From 8cb9a43a8ce9d1998d0a6e2bacd40d5cebf929bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 3 Jul 2023 15:37:17 +0200 Subject: [PATCH] Fix transform of `delete a?.b` in function params --- .../babel-plugin-transform-optional-chaining/src/transform.ts | 4 +++- .../test/fixtures/general/delete-in-function-params/input.js | 1 + .../test/fixtures/general/delete-in-function-params/output.js | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/input.js create mode 100644 packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/output.js diff --git a/packages/babel-plugin-transform-optional-chaining/src/transform.ts b/packages/babel-plugin-transform-optional-chaining/src/transform.ts index aac579cea298..d47d559c2386 100644 --- a/packages/babel-plugin-transform-optional-chaining/src/transform.ts +++ b/packages/babel-plugin-transform-optional-chaining/src/transform.ts @@ -68,7 +68,9 @@ export function transformOptionalChain( // Replace `function (a, x = a.b?.c) {}` to `function (a, x = (() => a.b?.c)() ){}` // so the temporary variable can be injected in correct scope if (scope.path.isPattern() && needsMemoize(path)) { - path.replaceWith(template.ast`(() => ${path.node})()` as t.Statement); + replacementPath.replaceWith( + template.expression.ast`(() => ${replacementPath.node})()`, + ); // The injected optional chain will be queued and eventually transformed when visited return; } diff --git a/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/input.js b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/input.js new file mode 100644 index 000000000000..44cfc096d50f --- /dev/null +++ b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/input.js @@ -0,0 +1 @@ +function f(x = delete a()?.b) {} diff --git a/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/output.js b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/output.js new file mode 100644 index 000000000000..0b2247b29b00 --- /dev/null +++ b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/delete-in-function-params/output.js @@ -0,0 +1,4 @@ +function f(x = (() => { + var _a; + return (_a = a()) === null || _a === void 0 ? true : delete _a.b; +})()) {}