diff --git a/packages/babel-plugin-proposal-optional-chaining/src/index.js b/packages/babel-plugin-proposal-optional-chaining/src/index.js index c25d95d7f996..e3289b27f5c0 100644 --- a/packages/babel-plugin-proposal-optional-chaining/src/index.js +++ b/packages/babel-plugin-proposal-optional-chaining/src/index.js @@ -111,6 +111,9 @@ export default declare((api, options) => { replacementPath = parentPath; isDeleteOperation = true; } + + let needsRequeue = false; + for (let i = optionals.length - 1; i >= 0; i--) { const node = optionals[i]; @@ -237,6 +240,15 @@ export default declare((api, options) => { replacementPath.get("alternate"), ); } + + needsRequeue = true; + } + + // TODO(bng): Continue investigating why changes in https://github.com/babel/babel/pull/12302 + // now need this requeue (and also why this _specific_ requeue, + // replacementPath.requeue() doesn't work). + if (needsRequeue) { + parentPath.requeue(); } }, }, diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/input.ts new file mode 100644 index 000000000000..778dc9064277 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/input.ts @@ -0,0 +1,2 @@ +const a = 1; +const b = () => a?.b?.c!.d; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/options.json new file mode 100644 index 000000000000..57204f16510c --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-typescript", "proposal-optional-chaining"] +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/output.js b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/output.js new file mode 100644 index 000000000000..a2a72afdb108 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/variable-declaration/non-null-in-optional-chain/output.js @@ -0,0 +1,7 @@ +const a = 1; + +const b = () => { + var _a$b; + + return a === null || a === void 0 ? void 0 : (_a$b = a.b) === null || _a$b === void 0 ? void 0 : _a$b.c.d; +};