From 0ab1362893d1caea0733e9da73207e1b8a7b7212 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 7 Apr 2015 09:54:14 -0700 Subject: [PATCH] don't reassign decorated classes - fixes #1167 --- .../transformers/es6/classes.js | 7 +++++-- src/babel/types/visitor-keys.json | 8 +++---- .../es7.decorators/class-modules/actual.js | 6 ++++++ .../es7.decorators/class-modules/expected.js | 21 +++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 test/core/fixtures/transformation/es7.decorators/class-modules/actual.js create mode 100644 test/core/fixtures/transformation/es7.decorators/class-modules/expected.js diff --git a/src/babel/transformation/transformers/es6/classes.js b/src/babel/transformation/transformers/es6/classes.js index 1a63e8ad8b..8f087b8673 100644 --- a/src/babel/transformation/transformers/es6/classes.js +++ b/src/babel/transformation/transformers/es6/classes.js @@ -181,10 +181,13 @@ class ClassTransformer { if (decorators) { for (var i = 0; i < decorators.length; i++) { var decorator = decorators[i]; - body.push(util.template("class-decorator", { + + var decoratorNode = util.template("class-decorator", { DECORATOR: decorator.expression, CLASS_REF: classRef - }, true)); + }, true); + decoratorNode.expression._ignoreModulesRemap = true; + body.push(decoratorNode); } } diff --git a/src/babel/types/visitor-keys.json b/src/babel/types/visitor-keys.json index 9dd063eb18..bba5f3b61f 100644 --- a/src/babel/types/visitor-keys.json +++ b/src/babel/types/visitor-keys.json @@ -11,8 +11,8 @@ "CallExpression": ["callee", "arguments"], "CatchClause": ["param", "body"], "ClassBody": ["body"], - "ClassDeclaration": ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements"], - "ClassExpression": ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements"], + "ClassDeclaration": ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements", "decorators"], + "ClassExpression": ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements", "decorators"], "ComprehensionBlock": ["left", "right", "body"], "ComprehensionExpression": ["filter", "blocks", "body"], "ConditionalExpression": ["test", "consequent", "alternate"], @@ -40,12 +40,12 @@ "LogicalExpression": ["left", "right"], "MemberExpression": ["object", "property"], "MetaProperty": ["meta", "property"], - "MethodDefinition": ["key", "value"], + "MethodDefinition": ["key", "value", "decorators"], "NewExpression": ["callee", "arguments"], "ObjectExpression": ["properties"], "ObjectPattern": ["properties", "typeAnnotation"], "Program": ["body"], - "Property": ["key", "value"], + "Property": ["key", "value", "decorators"], "RestElement": ["argument", "typeAnnotation"], "ReturnStatement": ["argument"], "SequenceExpression": ["expressions"], diff --git a/test/core/fixtures/transformation/es7.decorators/class-modules/actual.js b/test/core/fixtures/transformation/es7.decorators/class-modules/actual.js new file mode 100644 index 0000000000..61173aa9a9 --- /dev/null +++ b/test/core/fixtures/transformation/es7.decorators/class-modules/actual.js @@ -0,0 +1,6 @@ +import foo from "foo"; + +@foo +export default class Foo { + +} diff --git a/test/core/fixtures/transformation/es7.decorators/class-modules/expected.js b/test/core/fixtures/transformation/es7.decorators/class-modules/expected.js new file mode 100644 index 0000000000..a2deb0610e --- /dev/null +++ b/test/core/fixtures/transformation/es7.decorators/class-modules/expected.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _foo = require("foo"); + +var _foo2 = babelHelpers.interopRequireWildcard(_foo); + +var Foo = (function () { + function Foo() { + babelHelpers.classCallCheck(this, Foo); + } + + Foo = _foo2["default"](Foo) || Foo; + return Foo; +})(); + +exports["default"] = Foo; +module.exports = exports["default"];