diff --git a/packages/babel-plugin-proposal-decorators/src/index.ts b/packages/babel-plugin-proposal-decorators/src/index.ts index c166dd9e88..6d9fcf633b 100644 --- a/packages/babel-plugin-proposal-decorators/src/index.ts +++ b/packages/babel-plugin-proposal-decorators/src/index.ts @@ -12,36 +12,7 @@ import transformer2021_12 from "./transformer-2021-12"; export default declare((api, options) => { api.assertVersion(7); - let { legacy = false } = options; - if (typeof legacy !== "boolean") { - throw new Error("'legacy' must be a boolean."); - } - const { decoratorsBeforeExport, version } = options; - if (version !== undefined && options.legacy !== undefined) { - throw new Error( - 'You can either specify `legacy: true` or `version: "legacy"` with decorators, not both.', - ); - } - legacy ||= version === "legacy"; - - if (decoratorsBeforeExport === undefined) { - if (!legacy) { - throw new Error( - "The decorators plugin requires a 'decoratorsBeforeExport' option," + - " whose value must be a boolean. If you want to use the legacy" + - " decorators semantics, you can set the `version: 'legacy'` option.", - ); - } - } else { - if (legacy) { - throw new Error( - "'decoratorsBeforeExport' can't be used with legacy decorators.", - ); - } - if (typeof decoratorsBeforeExport !== "boolean") { - throw new Error("'decoratorsBeforeExport' must be a boolean."); - } - } + const { legacy, decoratorsBeforeExport, version } = options; if (legacy) { return { @@ -52,24 +23,21 @@ export default declare((api, options) => { }, visitor: legacyVisitor, }; - } - - if (version === "2021-12") { + } else if (version === "2021-12") { return transformer2021_12(api, options); - } else if (!(version === "2018-09" || version === undefined)) { - throw new Error("Unsupported decorators version: " + version); + } else { + const plugin = createClassFeaturePlugin({ + name: "proposal-decorators", + + api, + feature: FEATURES.decorators, + // loose: options.loose, Not supported + + manipulateOptions({ generatorOpts }) { + generatorOpts.decoratorsBeforeExport = decoratorsBeforeExport; + }, + }); + plugin.inherits = syntaxDecorators; + return plugin; } - - return createClassFeaturePlugin({ - name: "proposal-decorators", - - api, - feature: FEATURES.decorators, - // loose: options.loose, Not supported - - manipulateOptions({ generatorOpts, parserOpts }) { - parserOpts.plugins.push(["decorators", { decoratorsBeforeExport }]); - generatorOpts.decoratorsBeforeExport = decoratorsBeforeExport; - }, - }); }); diff --git a/packages/babel-plugin-syntax-decorators/src/index.ts b/packages/babel-plugin-syntax-decorators/src/index.ts index 5f43d029b7..1b659a7c04 100644 --- a/packages/babel-plugin-syntax-decorators/src/index.ts +++ b/packages/babel-plugin-syntax-decorators/src/index.ts @@ -3,19 +3,29 @@ import { declare } from "@babel/helper-plugin-utils"; export default declare((api, options) => { api.assertVersion(7); - const { legacy = false, version } = options; + let { legacy = false } = options; if (typeof legacy !== "boolean") { throw new Error("'legacy' must be a boolean."); } + const { decoratorsBeforeExport, version = "2018-09" } = options; + if ( + !(version === "2021-12" || version === "2018-09" || version === "legacy") + ) { + throw new Error("Unsupported decorators version: " + version); + } + if (version !== undefined && options.legacy !== undefined) { + throw new Error( + 'You can either specify `legacy: true` or `version: "legacy"` with decorators, not both.', + ); + } + legacy ||= version === "legacy"; - const { decoratorsBeforeExport } = options; if (decoratorsBeforeExport === undefined) { if (!legacy) { throw new Error( - "The '@babel/plugin-syntax-decorators' plugin requires a" + - " 'decoratorsBeforeExport' option, whose value must be a boolean." + - " If you want to use the legacy decorators semantics, you can set" + - " the 'legacy: true' option.", + "The decorators plugin requires a 'decoratorsBeforeExport' option," + + " whose value must be a boolean. If you want to use the legacy" + + " decorators semantics, you can set the `version: 'legacy'` option.", ); } } else { @@ -29,12 +39,6 @@ export default declare((api, options) => { } } - if ( - !(version === "2021-12" || version === "2018-09" || version === undefined) - ) { - throw new Error("Unsupported decorators version: " + version); - } - return { name: "syntax-decorators",