Skip to content

Commit 22da33f

Browse files
committed
Adjust server actions transform
1 parent 4580fbb commit 22da33f

File tree

4 files changed

+43
-59
lines changed

4 files changed

+43
-59
lines changed

crates/next-custom-transforms/src/transforms/server_actions.rs

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,7 @@ impl<C: Comments> ServerActions<C> {
628628
&self.file_name,
629629
&action_id,
630630
&action_name,
631+
self.config.is_react_server_layer,
631632
)
632633
.into_iter()
633634
.map(ModuleItem::Stmt),
@@ -782,6 +783,7 @@ impl<C: Comments> ServerActions<C> {
782783
&self.file_name,
783784
&action_id,
784785
&action_name,
786+
self.config.is_react_server_layer,
785787
)
786788
.into_iter()
787789
.map(ModuleItem::Stmt),
@@ -882,6 +884,7 @@ impl<C: Comments> ServerActions<C> {
882884
self.mode,
883885
&self.file_name,
884886
&export_name,
887+
self.config.is_react_server_layer,
885888
);
886889

887890
if let Some(Ident { sym, .. }) = &self.arrow_or_fn_expr_ident {
@@ -980,6 +983,7 @@ impl<C: Comments> ServerActions<C> {
980983
self.mode,
981984
&self.file_name,
982985
&export_name,
986+
self.config.is_react_server_layer,
983987
);
984988

985989
if let Some(Ident { ref sym, .. }) = fn_name {
@@ -2293,6 +2297,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
22932297
&self.file_name,
22942298
ref_id,
22952299
&export_name.atom(),
2300+
self.config.is_react_server_layer,
22962301
);
22972302
if !self.config.is_react_server_layer {
22982303
if matches!(export_name, ModuleExportName::Ident(i) if i.sym == *"default") {
@@ -3104,6 +3109,7 @@ fn create_and_hoist_cache_function(
31043109
mode: ServerActionsMode,
31053110
file_name: &str,
31063111
export: &str,
3112+
is_react_server_layer: bool,
31073113
) -> Ident {
31083114
let cache_ident = private_ident!(Span::dummy_with_cmt(), cache_name.clone());
31093115
let inner_fn_name: Atom = format!("{}_INNER", cache_name).into();
@@ -3180,9 +3186,16 @@ fn create_and_hoist_cache_function(
31803186
)),
31813187
})));
31823188
hoisted_extra_items.extend(
3183-
emit_server_action(unresolved_ctxt, mode, file_name, &reference_id, export)
3184-
.into_iter()
3185-
.map(ModuleItem::Stmt),
3189+
emit_server_action(
3190+
unresolved_ctxt,
3191+
mode,
3192+
file_name,
3193+
&reference_id,
3194+
export,
3195+
is_react_server_layer,
3196+
)
3197+
.into_iter()
3198+
.map(ModuleItem::Stmt),
31863199
);
31873200

31883201
cache_ident
@@ -3235,6 +3248,7 @@ fn emit_server_action(
32353248
file_name: &str,
32363249
action_id: &str,
32373250
export: &str,
3251+
is_react_server_layer: bool,
32383252
) -> Vec<Stmt> {
32393253
if mode == ServerActionsMode::Turbopack {
32403254
let emit = quote_ident!(unresolved_ctxt, "__turbopack_emit__");
@@ -3244,20 +3258,30 @@ fn emit_server_action(
32443258
)
32453259
.into();
32463260
let data: Expr = format!("{action_id}|{export}").into();
3247-
vec![
3248-
quote!(
3249-
"$emit($req, {namespace:'next/server-actions', data: $data, with: { 'turbopack-transition': 'next-rsc' }});" as Stmt,
3250-
emit = emit.clone(),
3251-
req: Expr = req.clone(),
3252-
data: Expr = data.clone()
3253-
),
3254-
quote!(
3255-
"$emit($req, {namespace:'next/server-actions', data: $data, with: { 'turbopack-transition': 'next-edge-rsc' }});" as Stmt,
3261+
if is_react_server_layer {
3262+
// Don't transition, we are already in the RSC layer
3263+
vec![quote!(
3264+
"$emit($req, {namespace:'next/server-actions', data: $data});" as Stmt,
32563265
emit = emit,
32573266
req: Expr = req,
3258-
data: Expr = data,
3259-
),
3260-
]
3267+
data: Expr = data
3268+
)]
3269+
} else {
3270+
vec![
3271+
quote!(
3272+
"$emit($req, {namespace:'next/server-actions', data: $data, with: { 'turbopack-transition': 'next-rsc' }});" as Stmt,
3273+
emit = emit.clone(),
3274+
req: Expr = req.clone(),
3275+
data: Expr = data.clone()
3276+
),
3277+
quote!(
3278+
"$emit($req, {namespace:'next/server-actions', data: $data, with: { 'turbopack-transition': 'next-edge-rsc' }});" as Stmt,
3279+
emit = emit,
3280+
req: Expr = req,
3281+
data: Expr = data,
3282+
),
3283+
]
3284+
}
32613285
} else {
32623286
vec![]
32633287
}

crates/next-custom-transforms/tests/fixture/server-actions/server-graph/turbopack/1/output.js

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,7 @@ export const $$RSC_SERVER_ACTION_0 = async function deleteItem() {
66
registerServerReference($$RSC_SERVER_ACTION_0, "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
77
__turbopack_emit__("./item.js", {
88
namespace: 'next/server-actions',
9-
data: "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7|$$RSC_SERVER_ACTION_0",
10-
with: {
11-
'turbopack-transition': 'next-rsc'
12-
}
13-
});
14-
__turbopack_emit__("./item.js", {
15-
namespace: 'next/server-actions',
16-
data: "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7|$$RSC_SERVER_ACTION_0",
17-
with: {
18-
'turbopack-transition': 'next-edge-rsc'
19-
}
9+
data: "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7|$$RSC_SERVER_ACTION_0"
2010
});
2111
export function Item() {
2212
var deleteItem = $$RSC_SERVER_ACTION_0;
@@ -30,17 +20,7 @@ export const $$RSC_SERVER_ACTION_1 = async function action($$ACTION_CLOSURE_BOUN
3020
registerServerReference($$RSC_SERVER_ACTION_1, "4090b5db271335765a4b0eab01f044b381b5ebd5cd", null);
3121
__turbopack_emit__("./item.js", {
3222
namespace: 'next/server-actions',
33-
data: "4090b5db271335765a4b0eab01f044b381b5ebd5cd|$$RSC_SERVER_ACTION_1",
34-
with: {
35-
'turbopack-transition': 'next-rsc'
36-
}
37-
});
38-
__turbopack_emit__("./item.js", {
39-
namespace: 'next/server-actions',
40-
data: "4090b5db271335765a4b0eab01f044b381b5ebd5cd|$$RSC_SERVER_ACTION_1",
41-
with: {
42-
'turbopack-transition': 'next-edge-rsc'
43-
}
23+
data: "4090b5db271335765a4b0eab01f044b381b5ebd5cd|$$RSC_SERVER_ACTION_1"
4424
});
4525
export default function Home() {
4626
const info = {

crates/next-custom-transforms/tests/fixture/server-actions/server-graph/turbopack/3/output.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,5 @@ ensureServerEntryExports([
1010
registerServerReference(myAction, "70e10665baac148856374b2789aceb970f66fec33e", null);
1111
__turbopack_emit__("./item.js", {
1212
namespace: 'next/server-actions',
13-
data: "70e10665baac148856374b2789aceb970f66fec33e|myAction",
14-
with: {
15-
'turbopack-transition': 'next-rsc'
16-
}
17-
});
18-
__turbopack_emit__("./item.js", {
19-
namespace: 'next/server-actions',
20-
data: "70e10665baac148856374b2789aceb970f66fec33e|myAction",
21-
with: {
22-
'turbopack-transition': 'next-edge-rsc'
23-
}
13+
data: "70e10665baac148856374b2789aceb970f66fec33e|myAction"
2414
});

crates/next-custom-transforms/tests/fixture/server-actions/server-graph/turbopack/35/output.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,7 @@ export var $$RSC_SERVER_CACHE_0 = $$reactCache__(function my_fn() {
1010
registerServerReference($$RSC_SERVER_CACHE_0, "803128060c414d59f8552e4788b846c0d2b7f74743", null);
1111
__turbopack_emit__("./item.js", {
1212
namespace: 'next/server-actions',
13-
data: "803128060c414d59f8552e4788b846c0d2b7f74743|$$RSC_SERVER_CACHE_0",
14-
with: {
15-
'turbopack-transition': 'next-rsc'
16-
}
17-
});
18-
__turbopack_emit__("./item.js", {
19-
namespace: 'next/server-actions',
20-
data: "803128060c414d59f8552e4788b846c0d2b7f74743|$$RSC_SERVER_CACHE_0",
21-
with: {
22-
'turbopack-transition': 'next-edge-rsc'
23-
}
13+
data: "803128060c414d59f8552e4788b846c0d2b7f74743|$$RSC_SERVER_CACHE_0"
2414
});
2515
Object["defineProperty"]($$RSC_SERVER_CACHE_0, "name", {
2616
value: "my_fn"

0 commit comments

Comments
 (0)