From 029b658664cf44ddcad0e7f592236da029ed7e54 Mon Sep 17 00:00:00 2001 From: macabeus Date: Sat, 4 Jan 2020 23:49:18 +0000 Subject: [PATCH] fix: optional-chaining should work correctly with ts non-null operator --- .../babel-plugin-proposal-optional-chaining/src/index.js | 5 +++++ .../test/fixtures/regression/10959/input.ts | 1 + .../test/fixtures/regression/10959/options.json | 4 ++++ .../test/fixtures/regression/10959/output.js | 3 +++ 4 files changed, 13 insertions(+) create mode 100644 packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/input.ts create mode 100644 packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/options.json create mode 100644 packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/output.js diff --git a/packages/babel-plugin-proposal-optional-chaining/src/index.js b/packages/babel-plugin-proposal-optional-chaining/src/index.js index 6a30dc74b909..7830b814e2dd 100644 --- a/packages/babel-plugin-proposal-optional-chaining/src/index.js +++ b/packages/babel-plugin-proposal-optional-chaining/src/index.js @@ -34,6 +34,11 @@ export default declare((api, options) => { optionalPath.node.type = "CallExpression"; optionalPath = optionalPath.get("callee"); } + + // unwrap a TSNonNullExpression if need + if (optionalPath.isTSNonNullExpression()) { + optionalPath.replaceWith(optionalPath.node.expression); + } } let replacementPath = path; diff --git a/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/input.ts b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/input.ts new file mode 100644 index 000000000000..2f226b314a3f --- /dev/null +++ b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/input.ts @@ -0,0 +1 @@ +a?.b!.c diff --git a/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/options.json b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/options.json new file mode 100644 index 000000000000..dd5a2ab5b31a --- /dev/null +++ b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["proposal-optional-chaining"], + "presets": ["../../../../../babel-preset-typescript"] +} diff --git a/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/output.js b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/output.js new file mode 100644 index 000000000000..44183a7d8f68 --- /dev/null +++ b/packages/babel-plugin-proposal-optional-chaining/test/fixtures/regression/10959/output.js @@ -0,0 +1,3 @@ +var _a; + +(_a = a) === null || _a === void 0 ? void 0 : _a.b.c;