Skip to content

Commit 03c2ee5

Browse files
committed
Unwrap registerServerReference function
In the same vein as #69190, where we already unwrapped `createServerReference`, we now also unwrap `registerServerReference`, which is required for React to select the right call stack frame when generating source locations for server actions facebook/react#30741. Whereas unwrapping of `createServerReference` was required for server actions that are imported into client components, unwrapping `registerServerReference` is needed for server actions that are passed from server components to client components. This does not fully enable the source mapping just yet. For this to work end-to-end, the next step is to generate proper spans in the SWC transform, which will be done in the next PR.
1 parent 5d42735 commit 03c2ee5

File tree

47 files changed

+89
-93
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+89
-93
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,7 +1626,6 @@ impl<C: Comments> VisitMut for ServerActions<C> {
16261626
if (self.has_action || self.has_cache) && self.config.is_react_server_layer {
16271627
// Inlined actions are only allowed on the server layer.
16281628
// import { registerServerReference } from 'private-next-rsc-server-reference'
1629-
// registerServerReference("action_id")
16301629
new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl {
16311630
span: DUMMY_SP,
16321631
specifiers: vec![ImportSpecifier::Named(ImportNamedSpecifier {
@@ -1825,21 +1824,22 @@ fn annotate_ident_as_server_reference(
18251824
bound: Vec<Option<ExprOrSpread>>,
18261825
action_id: String,
18271826
) -> Expr {
1828-
// Add the proxy wrapper call `registerServerReference($$id, $$bound, myAction,
1829-
// maybe_orig_action)`.
1830-
1827+
// registerServerReference(reference, id, null)
18311828
let proxy_expr = Expr::Call(CallExpr {
18321829
span: DUMMY_SP,
18331830
callee: quote_ident!("registerServerReference").as_callee(),
18341831
args: vec![
1835-
// $$id
1832+
ExprOrSpread {
1833+
spread: None,
1834+
expr: Box::new(Expr::Ident(ident)),
1835+
},
18361836
ExprOrSpread {
18371837
spread: None,
18381838
expr: Box::new(action_id.clone().into()),
18391839
},
18401840
ExprOrSpread {
18411841
spread: None,
1842-
expr: Box::new(Expr::Ident(ident)),
1842+
expr: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))),
18431843
},
18441844
],
18451845
..Default::default()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* __next_internal_client_entry_do_not_use__ default auto */ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ export default function App() {
2-
var fn = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0);
2+
var fn = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
33
return <div>App</div>;
44
}
55
export async function $$RSC_SERVER_ACTION_0() {}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate";
55
ensureServerEntryExports([
66
foo
77
]);
8-
registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo);
8+
registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null);

crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate";
66
ensureServerEntryExports([
77
bar
88
]);
9-
registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar);
9+
registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate";
55
ensureServerEntryExports([
66
x
77
]);
8-
registerServerReference("b78c261f135a7a852508c2920bd7228020ff4bd7", x);
8+
registerServerReference(x, "b78c261f135a7a852508c2920bd7228020ff4bd7", null);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference";
22
import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption";
3-
export default registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0);
3+
export default registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
44
export async function $$RSC_SERVER_ACTION_0() {}
55
import { ensureServerEntryExports } from "private-next-rsc-action-validate";
66
ensureServerEntryExports([]);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
/* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference";
22
import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption";
3-
const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0);
3+
const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
44
export async function $$RSC_SERVER_ACTION_0() {}

crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference";
22
import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption";
3-
const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0);
3+
const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null);
44
export async function $$RSC_SERVER_ACTION_0() {
55
'use strict';
66
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption";
33
import deleteFromDb from 'db';
44
export function Item({ id1, id2 }) {
5-
var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [
5+
var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [
66
id1,
77
id2
88
]));
@@ -18,7 +18,7 @@ export default function Home() {
1818
name: 'John',
1919
test: 'test'
2020
};
21-
const action = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [
21+
const action = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [
2222
info.name,
2323
info.test
2424
]));

crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate";
55
ensureServerEntryExports([
66
foo
77
]);
8-
registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo);
8+
registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null);

0 commit comments

Comments
 (0)