diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index f3556f2513bb..5549bfde42a7 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -1236,6 +1236,8 @@ helpers.decorate = helper("7.1.5")` function _createElementDescriptor( def /*: ElementDefinition */, ) /*: ElementDescriptor */ { + var key = toPropertyKey(def.key); + var descriptor /*: PropertyDescriptor */; if (def.kind === "method") { descriptor = { @@ -1244,6 +1246,10 @@ helpers.decorate = helper("7.1.5")` configurable: true, enumerable: false, }; + Object.defineProperty(def.value, "name", { + value: typeof key === "symbol" ? "" : key, + configurable: true, + }); } else if (def.kind === "get") { descriptor = { get: def.value, configurable: true, enumerable: false }; } else if (def.kind === "set") { @@ -1254,7 +1260,7 @@ helpers.decorate = helper("7.1.5")` var element /*: ElementDescriptor */ = { kind: def.kind === "field" ? "field" : "method", - key: def.key, + key: key, placement: def.static ? "static" : def.kind === "field" diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/misc/method-name/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/method-name/exec.js new file mode 100644 index 000000000000..5e4dcb98925e --- /dev/null +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/method-name/exec.js @@ -0,0 +1,8 @@ +function decorator() {} + +@decorator +class Foo { + method() {} +} + +expect(Foo.prototype.method.name).toBe("method"); diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/misc/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/options.json new file mode 100644 index 000000000000..0fbe73eecd01 --- /dev/null +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/options.json @@ -0,0 +1,12 @@ +{ + "plugins": [ + ["proposal-decorators", { "decoratorsBeforeExport": false }], + "proposal-class-properties", + [ + "external-helpers", + { + "helperVersion": "7.1.5" + } + ] + ] +} diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/misc/to-primitive/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/to-primitive/exec.js new file mode 100644 index 000000000000..698b3e7049bf --- /dev/null +++ b/packages/babel-plugin-proposal-decorators/test/fixtures/misc/to-primitive/exec.js @@ -0,0 +1,16 @@ +let calls = 0; +const baz = { + [Symbol.toPrimitive]() { + calls++; + return "baz"; + } +} + +function dec() {} + +@dec +class A { + [baz]() {} +} + +expect(calls).toBe(1);