diff --git a/packages/next-swc/crates/core/src/server_actions.rs b/packages/next-swc/crates/core/src/server_actions.rs index ea27cfeb60c19..949a911564e0c 100644 --- a/packages/next-swc/crates/core/src/server_actions.rs +++ b/packages/next-swc/crates/core/src/server_actions.rs @@ -166,6 +166,17 @@ impl VisitMut for ServerActions { .push(annotate(&f.ident, "$$name", action_name.into())); if self.top_level { + // myAction.$$bound = []; + self.annotations.push(annotate( + &f.ident, + "$$bound", + ArrayLit { + span: DUMMY_SP, + elems: Vec::new(), + } + .into(), + )); + if !(self.in_action_file && self.in_export_decl) { // export const $ACTION_myAction = myAction; self.extra_items @@ -197,10 +208,10 @@ impl VisitMut for ServerActions { used_ids: &ids_from_closure, }); - // myAction.$$closure = [id1, id2] + // myAction.$$bound = [id1, id2] self.annotations.push(annotate( &f.ident, - "$$closure", + "$$bound", ArrayLit { span: DUMMY_SP, elems: ids_from_closure @@ -218,7 +229,7 @@ impl VisitMut for ServerActions { args: vec![f .ident .clone() - .make_member(quote_ident!("$$closure")) + .make_member(quote_ident!("$$bound")) .as_arg()], type_args: Default::default(), }; diff --git a/packages/next-swc/crates/core/tests/errors/server-actions/1/output.js b/packages/next-swc/crates/core/tests/errors/server-actions/1/output.js index 8b63bdd40d8de..38a993359dad0 100644 --- a/packages/next-swc/crates/core/tests/errors/server-actions/1/output.js +++ b/packages/next-swc/crates/core/tests/errors/server-actions/1/output.js @@ -2,3 +2,4 @@ foo.$$typeof = Symbol.for("react.server.reference"); foo.$$filepath = "/app/item.js"; foo.$$name = "foo"; +foo.$$bound = []; \ No newline at end of file diff --git a/packages/next-swc/crates/core/tests/errors/server-actions/2/output.js b/packages/next-swc/crates/core/tests/errors/server-actions/2/output.js index 895b3089eb564..78ee72aa0b2f5 100644 --- a/packages/next-swc/crates/core/tests/errors/server-actions/2/output.js +++ b/packages/next-swc/crates/core/tests/errors/server-actions/2/output.js @@ -3,3 +3,4 @@ export function bar() {} bar.$$typeof = Symbol.for("react.server.reference"); bar.$$filepath = "/app/item.js"; bar.$$name = "bar"; +bar.$$bound = []; \ No newline at end of file diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/1/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/1/output.js index 69431941a707c..f8458be654646 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/1/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/1/output.js @@ -1,12 +1,12 @@ /* __next_internal_action_entry_do_not_use__ $ACTION_deleteItem */ import deleteFromDb from 'db' export function Item({ id1 , id2 }) { async function deleteItem() { - return $ACTION_deleteItem(deleteItem.$$closure); + return $ACTION_deleteItem(deleteItem.$$bound); } deleteItem.$$typeof = Symbol.for("react.server.reference"); deleteItem.$$filepath = "/app/item.js"; deleteItem.$$name = "$ACTION_deleteItem"; - deleteItem.$$closure = [ + deleteItem.$$bound = [ id1, id2 ]; diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/2/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/2/output.js index 270db3ccf1d86..8b95415ec63b4 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/2/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/2/output.js @@ -4,6 +4,7 @@ myAction.$$typeof = Symbol.for("react.server.reference"); myAction.$$filepath = "/app/item.js"; myAction.$$name = "$ACTION_myAction"; +myAction.$$bound = []; export const $ACTION_myAction = myAction; export default function Page() { return ; diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/3/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/3/output.js index 7206640f72924..79b7a1fefafd5 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/3/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/3/output.js @@ -5,3 +5,4 @@ myAction.$$typeof = Symbol.for("react.server.reference"); myAction.$$filepath = "/app/item.js"; myAction.$$name = "myAction"; +myAction.$$bound = []; diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/4/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/4/output.js index 07d24aefc5e3e..ebca00e095c85 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/4/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/4/output.js @@ -2,22 +2,25 @@ a.$$typeof = Symbol.for("react.server.reference"); a.$$filepath = "/app/item.js"; a.$$name = "a"; +a.$$bound = []; export async function b() {} b.$$typeof = Symbol.for("react.server.reference"); b.$$filepath = "/app/item.js"; b.$$name = "b"; +b.$$bound = []; export async function c() {} c.$$typeof = Symbol.for("react.server.reference"); c.$$filepath = "/app/item.js"; c.$$name = "c"; +c.$$bound = []; function d() {} function Foo() { async function e() { - return $ACTION_e(e.$$closure); + return $ACTION_e(e.$$bound); } e.$$typeof = Symbol.for("react.server.reference"); e.$$filepath = "/app/item.js"; e.$$name = "$ACTION_e"; - e.$$closure = []; + e.$$bound = []; } export async function $ACTION_e(closure) {} \ No newline at end of file diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/5/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/5/output.js index c3805b24d12fe..0dac9bbb9fd18 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/5/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/5/output.js @@ -3,12 +3,12 @@ const v1 = 'v1'; export function Item({ id1 , id2 }) { const v2 = id2; async function deleteItem() { - return $ACTION_deleteItem(deleteItem.$$closure); + return $ACTION_deleteItem(deleteItem.$$bound); } deleteItem.$$typeof = Symbol.for("react.server.reference"); deleteItem.$$filepath = "/app/item.js"; deleteItem.$$name = "$ACTION_deleteItem"; - deleteItem.$$closure = [ + deleteItem.$$bound = [ id1, v2 ]; diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/6/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/6/output.js index f365c7fcf38aa..1a439964a2e28 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/6/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/6/output.js @@ -18,12 +18,12 @@ export function y(p, [p1, { p2 }], ...p3) { const f8 = 1; } async function action() { - return $ACTION_action(action.$$closure); + return $ACTION_action(action.$$bound); } action.$$typeof = Symbol.for("react.server.reference"); action.$$filepath = "/app/item.js"; action.$$name = "$ACTION_action"; - action.$$closure = [ + action.$$bound = [ f2, f2, f11, diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/7/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/7/output.js index d292a7466a5e7..e6fc67b750c9b 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/7/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/7/output.js @@ -1,12 +1,12 @@ /* __next_internal_action_entry_do_not_use__ $ACTION_deleteItem */ import deleteFromDb from 'db'; export function Item(product, foo, bar) { async function deleteItem() { - return $ACTION_deleteItem(deleteItem.$$closure); + return $ACTION_deleteItem(deleteItem.$$bound); } deleteItem.$$typeof = Symbol.for("react.server.reference"); deleteItem.$$filepath = "/app/item.js"; deleteItem.$$name = "$ACTION_deleteItem"; - deleteItem.$$closure = [ + deleteItem.$$bound = [ product.id, product?.foo, product.bar.baz, diff --git a/packages/next-swc/crates/core/tests/fixture/server-actions/8/output.js b/packages/next-swc/crates/core/tests/fixture/server-actions/8/output.js index df571e856f05a..23ef58e08cd83 100644 --- a/packages/next-swc/crates/core/tests/fixture/server-actions/8/output.js +++ b/packages/next-swc/crates/core/tests/fixture/server-actions/8/output.js @@ -6,6 +6,7 @@ myAction.$$typeof = Symbol.for("react.server.reference"); myAction.$$filepath = "/app/item.js"; myAction.$$name = "$ACTION_myAction"; +myAction.$$bound = []; export const $ACTION_myAction = myAction; export default function Page() { return ;