Skip to content

Commit e64f018

Browse files
committed
collect actions for the right runtime only
1 parent a9b691e commit e64f018

File tree

11 files changed

+52
-43
lines changed

11 files changed

+52
-43
lines changed

crates/next-api/src/app.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,24 +1290,27 @@ impl AppEndpoint {
12901290
let app_entry = self.app_endpoint_entry().await?;
12911291
let runtime = app_entry.config.await?.runtime.unwrap_or_default();
12921292

1293+
// By only collecting the correct runtime, modules emitted for the other runtime are
1294+
// never even compiled if unused.
12931295
Ok(Vc::cell(vec![
12941296
// Collect inline "use server" function inside of RSC modules
12951297
ResolvedVc::upcast(
12961298
ServerActionCollectModule::new(
1297-
rcstr!("next/server-actions"),
1299+
match runtime {
1300+
NextRuntime::NodeJs => rcstr!("next/server-actions/rsc-nodejs"),
1301+
NextRuntime::Edge => rcstr!("next/server-actions/rsc-edge"),
1302+
},
12981303
this.page.to_string().into(),
12991304
)
13001305
.to_resolved()
13011306
.await?,
13021307
),
13031308
// Collect "use server" modules imported from client components.
1304-
// By only collecting the correct runtime, modules emitted for the other runtime are
1305-
// never even compiled.
13061309
ResolvedVc::upcast(
13071310
ServerActionCollectModule::new(
13081311
match runtime {
1309-
NextRuntime::NodeJs => rcstr!("next/server-actions/node"),
1310-
NextRuntime::Edge => rcstr!("next/server-actions/edge"),
1312+
NextRuntime::NodeJs => rcstr!("next/server-actions/browser-nodejs"),
1313+
NextRuntime::Edge => rcstr!("next/server-actions/browser-edge"),
13111314
},
13121315
this.page.to_string().into(),
13131316
)

crates/next-api/src/server_actions.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ async fn collect_actions(
103103
hash.to_string(),
104104
(
105105
match namespace.as_str() {
106-
"next/server-actions" => ActionLayer::Rsc,
107-
"next/server-actions/edge" | "next/server-actions/node" => {
108-
ActionLayer::ActionBrowser
106+
"next/server-actions/rsc-edge" | "next/server-actions/rsc-nodejs" => {
107+
ActionLayer::Rsc
109108
}
109+
"next/server-actions/browser-edge"
110+
| "next/server-actions/browser-nodejs" => ActionLayer::ActionBrowser,
110111
_ => bail!("unexpected namespace {namespace} for collected reference"),
111112
},
112113
ActionMeta {
@@ -221,8 +222,8 @@ type HashToLayerNameModule = Vec<(
221222
#[turbo_tasks::value(transparent)]
222223
pub struct AllActions(HashToLayerNameModule);
223224

224-
/// This module performs what `__turbopack_collect__({namespace: 'next/server-actions'})` would do
225-
/// chunking-wise. Except that we collect the list manually into a separate JSON, so
225+
/// This module performs what `__turbopack_collect__({namespace: 'next/server-actions/*'})` would
226+
/// do chunking-wise. Except that we collect the list manually into a separate JSON, so
226227
/// __turbopack_collect__ would unnecessarily codegen a big list of server actions.
227228
#[turbo_tasks::value]
228229
pub struct ServerActionCollectModule {

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3265,24 +3265,29 @@ fn emit_server_action(
32653265
)
32663266
.into();
32673267
let data: Expr = format!("{action_id}|{export}").into();
3268+
32683269
if is_react_server_layer {
32693270
// Don't transition, we are already in the RSC layer
32703271
vec![quote!(
3271-
"$emit($req, {namespace:'next/server-actions', data: $data});" as Stmt,
3272-
emit = emit,
3273-
req: Expr = req,
3274-
data: Expr = data
3272+
"$emit($req, {
3273+
namespace: $process.env.NEXT_RUNTIME === 'nodejs' ? 'next/server-actions/rsc-nodejs' : 'next/server-actions/rsc-edge',
3274+
data: $data
3275+
});" as Stmt,
3276+
process: Ident = quote_ident!(unresolved_ctxt, "process"),
3277+
emit = emit.clone(),
3278+
req: Expr = req.clone(),
3279+
data: Expr = data.clone()
32753280
)]
32763281
} else {
32773282
vec![
32783283
quote!(
3279-
"$emit($req, {namespace:'next/server-actions/node', data: $data, with: { 'turbopack-transition': 'next-rsc' }});" as Stmt,
3284+
"$emit($req, {namespace:'next/server-actions/browser-nodejs', data: $data, with: { 'turbopack-transition': 'next-rsc' }});" as Stmt,
32803285
emit = emit.clone(),
32813286
req: Expr = req.clone(),
32823287
data: Expr = data.clone()
32833288
),
32843289
quote!(
3285-
"$emit($req, {namespace:'next/server-actions/edge', data: $data, with: { 'turbopack-transition': 'next-edge-rsc' }});" as Stmt,
3290+
"$emit($req, {namespace:'next/server-actions/browser-edge', data: $data, with: { 'turbopack-transition': 'next-edge-rsc' }});" as Stmt,
32863291
emit = emit,
32873292
req: Expr = req,
32883293
data: Expr = data,

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

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import { createServerReference, callServer, findSourceMapURL } from "private-nex
22
const $$RSC_SERVER_ACTION_0 = /*#__PURE__*/ createServerReference("00ab21efdafbe611287bc25c0462b1e0510d13e48b", callServer, void 0, findSourceMapURL, "foo");
33
export { $$RSC_SERVER_ACTION_0 as foo };
44
__turbopack_emit__("./item.js", {
5-
namespace: 'next/server-actions/node',
5+
namespace: 'next/server-actions/browser-nodejs',
66
data: "00ab21efdafbe611287bc25c0462b1e0510d13e48b|foo",
77
with: {
88
'turbopack-transition': 'next-rsc'
99
}
1010
});
1111
__turbopack_emit__("./item.js", {
12-
namespace: 'next/server-actions/edge',
12+
namespace: 'next/server-actions/browser-edge',
1313
data: "00ab21efdafbe611287bc25c0462b1e0510d13e48b|foo",
1414
with: {
1515
'turbopack-transition': 'next-edge-rsc'

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { createServerReference, callServer, findSourceMapURL } from "private-next-rsc-action-client-wrapper";
22
export default /*#__PURE__*/ createServerReference("00c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", callServer, void 0, findSourceMapURL, "default");
33
__turbopack_emit__("./item.js", {
4-
namespace: 'next/server-actions/node',
4+
namespace: 'next/server-actions/browser-nodejs',
55
data: "00c18c215a6b7cdc64bf709f3a714ffdef1bf9651d|default",
66
with: {
77
'turbopack-transition': 'next-rsc'
88
}
99
});
1010
__turbopack_emit__("./item.js", {
11-
namespace: 'next/server-actions/edge',
11+
namespace: 'next/server-actions/browser-edge',
1212
data: "00c18c215a6b7cdc64bf709f3a714ffdef1bf9651d|default",
1313
with: {
1414
'turbopack-transition': 'next-edge-rsc'

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export const $$RSC_SERVER_ACTION_0 = async function deleteItem() {
55
};
66
registerServerReference($$RSC_SERVER_ACTION_0, "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
77
__turbopack_emit__("./item.js", {
8-
namespace: 'next/server-actions',
8+
namespace: process.env.NEXT_RUNTIME === 'nodejs' ? 'next/server-actions/rsc-nodejs' : 'next/server-actions/rsc-edge',
99
data: "006a88810ecce4a4e8b59d53b8327d7e98bbf251d7|$$RSC_SERVER_ACTION_0"
1010
});
1111
export function Item() {
@@ -19,7 +19,7 @@ export const $$RSC_SERVER_ACTION_1 = async function action($$ACTION_CLOSURE_BOUN
1919
};
2020
registerServerReference($$RSC_SERVER_ACTION_1, "4090b5db271335765a4b0eab01f044b381b5ebd5cd", null);
2121
__turbopack_emit__("./item.js", {
22-
namespace: 'next/server-actions',
22+
namespace: process.env.NEXT_RUNTIME === 'nodejs' ? 'next/server-actions/rsc-nodejs' : 'next/server-actions/rsc-edge',
2323
data: "4090b5db271335765a4b0eab01f044b381b5ebd5cd|$$RSC_SERVER_ACTION_1"
2424
});
2525
export default function Home() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ ensureServerEntryExports([
99
]);
1010
registerServerReference(myAction, "70e10665baac148856374b2789aceb970f66fec33e", null);
1111
__turbopack_emit__("./item.js", {
12-
namespace: 'next/server-actions',
12+
namespace: process.env.NEXT_RUNTIME === 'nodejs' ? 'next/server-actions/rsc-nodejs' : 'next/server-actions/rsc-edge',
1313
data: "70e10665baac148856374b2789aceb970f66fec33e|myAction"
1414
});

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export var $$RSC_SERVER_CACHE_0 = $$reactCache__(function my_fn() {
99
});
1010
registerServerReference($$RSC_SERVER_CACHE_0, "803128060c414d59f8552e4788b846c0d2b7f74743", null);
1111
__turbopack_emit__("./item.js", {
12-
namespace: 'next/server-actions',
12+
namespace: process.env.NEXT_RUNTIME === 'nodejs' ? 'next/server-actions/rsc-nodejs' : 'next/server-actions/rsc-edge',
1313
data: "803128060c414d59f8552e4788b846c0d2b7f74743|$$RSC_SERVER_CACHE_0"
1414
});
1515
Object["defineProperty"]($$RSC_SERVER_CACHE_0, "name", {

0 commit comments

Comments
 (0)