diff --git a/packages/babel-plugin-transform-optional-chaining/src/index.js b/packages/babel-plugin-transform-optional-chaining/src/index.js index 73058c520d..b856e0d7a7 100644 --- a/packages/babel-plugin-transform-optional-chaining/src/index.js +++ b/packages/babel-plugin-transform-optional-chaining/src/index.js @@ -37,27 +37,37 @@ export default function ({ types: t }) { path.scope.push({ id }); } - let remplacement; + if (t.isAssignmentExpression(path.parent)) { - if (t.isCallExpression(path.parent)) { + const remplacement = createCondition( + t.identifier("temp_here_please"), + object, + property, + t.identifier("undefined"), + ); - remplacement = createCondition( + path.parentPath.replaceWith(remplacement); + } else if (t.isCallExpression(path.parent)) { + + const remplacement = createCondition( state.optionalTemp, object, property, - t.callExpression(t.identifier("Function"), []) + t.callExpression(t.identifier("Function"), []), ); + + path.replaceWith(remplacement); } else { - remplacement = createCondition( + const remplacement = createCondition( state.optionalTemp, object, property, - t.identifier("undefined") + t.identifier("undefined"), ); - } - path.replaceWith(remplacement); + path.replaceWith(remplacement); + } }, }, }; diff --git a/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/assignement/actual.js b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/assignement/actual.js new file mode 100644 index 0000000000..bf7a81758e --- /dev/null +++ b/packages/babel-plugin-transform-optional-chaining/test/fixtures/general/assignement/actual.js @@ -0,0 +1 @@ +a?.b = 42