diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/input.mjs b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/input.mjs new file mode 100644 index 0000000000..7523a4d06a --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/input.mjs @@ -0,0 +1,5 @@ +export class Foo extends Bar { + static foo = {}; + + test = args; +} diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/options.json new file mode 100644 index 0000000000..9d30185b9b --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "proposal-class-properties"] +} diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/output.mjs b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/output.mjs new file mode 100644 index 0000000000..9f5afa99d7 --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/7951/output.mjs @@ -0,0 +1,9 @@ +export class Foo extends Bar { + constructor(..._args) { + var _temp; + + return _temp = super(..._args), babelHelpers.defineProperty(this, "test", args), _temp; + } + +} +babelHelpers.defineProperty(Foo, "foo", {}); diff --git a/packages/babel-traverse/src/scope/lib/renamer.js b/packages/babel-traverse/src/scope/lib/renamer.js index 05b9e807f4..317dea76aa 100644 --- a/packages/babel-traverse/src/scope/lib/renamer.js +++ b/packages/babel-traverse/src/scope/lib/renamer.js @@ -108,7 +108,12 @@ export default class Renamer { path.isClassExpression(), ); if (parentDeclar) { - this.maybeConvertFromExportDeclaration(parentDeclar); + const bindingIds = parentDeclar.getBindingIdentifiers(); + if (bindingIds[oldName] === binding.identifier) { + // When we are renaming an exported identifier, we need to ensure that + // the exported binding keeps the old name. + this.maybeConvertFromExportDeclaration(parentDeclar); + } } scope.traverse(block || scope.block, renameVisitor, this);