diff --git a/packages/babel-helper-create-class-features-plugin/src/features.js b/packages/babel-helper-create-class-features-plugin/src/features.js index 332a425777c5..7eaddf69ac06 100644 --- a/packages/babel-helper-create-class-features-plugin/src/features.js +++ b/packages/babel-helper-create-class-features-plugin/src/features.js @@ -53,12 +53,6 @@ export function verifyUsedFeatures(path, file) { } } - if (hasFeature(file, FEATURES.decorators)) { - throw new Error( - "@babel/plugin-class-features doesn't support decorators yet.", - ); - } - if (path.isClassPrivateMethod()) { if (!hasFeature(file, FEATURES.privateMethods)) { throw path.buildCodeFrameError("Class private methods are not enabled."); diff --git a/packages/babel-plugin-proposal-decorators/package.json b/packages/babel-plugin-proposal-decorators/package.json index 0c447292865c..70778e58e814 100644 --- a/packages/babel-plugin-proposal-decorators/package.json +++ b/packages/babel-plugin-proposal-decorators/package.json @@ -16,7 +16,7 @@ ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-class-features": "^7.1.4", + "@babel/helper-create-class-features-plugin": "^7.1.4", "@babel/plugin-syntax-decorators": "^7.1.0" }, "peerDependencies": { diff --git a/packages/babel-plugin-proposal-decorators/src/index.js b/packages/babel-plugin-proposal-decorators/src/index.js index 2c2a93610e86..4d0e05cb57d2 100644 --- a/packages/babel-plugin-proposal-decorators/src/index.js +++ b/packages/babel-plugin-proposal-decorators/src/index.js @@ -1,9 +1,11 @@ +/* eslint-disable local-rules/plugin-name */ + import { declare } from "@babel/helper-plugin-utils"; import syntaxDecorators from "@babel/plugin-syntax-decorators"; -import pluginClassFeatures, { - enableFeature, +import { + createClassFeaturePlugin, FEATURES, -} from "@babel/plugin-class-features"; +} from "@babel/helper-create-class-features-plugin"; import legacyVisitor from "./transformer-legacy"; export default declare((api, options) => { @@ -45,17 +47,15 @@ export default declare((api, options) => { }; } - return { + return createClassFeaturePlugin({ name: "proposal-decorators", - inherits: pluginClassFeatures, + + feature: FEATURES.decorators, + // loose: options.loose, Not supported manipulateOptions({ generatorOpts, parserOpts }) { parserOpts.plugins.push(["decorators", { decoratorsBeforeExport }]); generatorOpts.decoratorsBeforeExport = decoratorsBeforeExport; }, - - pre() { - enableFeature(this.file, FEATURES.decorators, false); - }, - }; + }); });