diff --git a/packages/babel-preset-stage-0/README.md b/packages/babel-preset-stage-0/README.md index b67d1259e2..42d1db872d 100644 --- a/packages/babel-preset-stage-0/README.md +++ b/packages/babel-preset-stage-0/README.md @@ -47,3 +47,9 @@ Enable "loose" transformations for any plugins in this preset that allow them. `boolean`, defaults to `false`. Will use the native built-in instead of trying to polyfill behavior for any plugins that require one. + +### `decoratorsLegacy` + +`boolean`, defaults to `false`. + +Use the legacy (stage 1) decorators syntax and behavior. diff --git a/packages/babel-preset-stage-0/src/index.js b/packages/babel-preset-stage-0/src/index.js index fbcf5f3df1..25bd1f26e7 100644 --- a/packages/babel-preset-stage-0/src/index.js +++ b/packages/babel-preset-stage-0/src/index.js @@ -3,16 +3,10 @@ import presetStage1 from "@babel/preset-stage-1"; import transformFunctionBind from "@babel/plugin-proposal-function-bind"; -export default declare((api, opts) => { +export default declare((api, opts = {}) => { api.assertVersion(7); - let loose = false; - let useBuiltIns = false; - - if (opts !== undefined) { - if (opts.loose !== undefined) loose = opts.loose; - if (opts.useBuiltIns !== undefined) useBuiltIns = opts.useBuiltIns; - } + const { loose = false, useBuiltIns = false, decoratorsLegacy = false } = opts; if (typeof loose !== "boolean") { throw new Error("@babel/preset-stage-0 'loose' option must be a boolean."); @@ -22,9 +16,22 @@ export default declare((api, opts) => { "@babel/preset-stage-0 'useBuiltIns' option must be a boolean.", ); } + if (typeof decoratorsLegacy !== "boolean") { + throw new Error( + "@babel/preset-stage-0 'decoratorsLegacy' option must be a boolean.", + ); + } + + if (decoratorsLegacy !== true) { + throw new Error( + "The new decorators proposal is not supported yet." + + ' You muse pass the `"decoratorsLegacy": true` option to' + + " @babel/preset-stage-0", + ); + } return { - presets: [[presetStage1, { loose, useBuiltIns }]], + presets: [[presetStage1, { loose, useBuiltIns, decoratorsLegacy }]], plugins: [transformFunctionBind], }; }); diff --git a/packages/babel-preset-stage-1/README.md b/packages/babel-preset-stage-1/README.md index 735f6dd90b..0166562289 100644 --- a/packages/babel-preset-stage-1/README.md +++ b/packages/babel-preset-stage-1/README.md @@ -58,6 +58,12 @@ Enable "loose" transformations for any plugins in this preset that allow them. Will use the native built-in instead of trying to polyfill behavior for any plugins that require one. +### `decoratorsLegacy` + +`boolean`, defaults to `false`. + +Use the legacy (stage 1) decorators syntax and behavior. + ## References - Chapter "[The TC39 process for ECMAScript features](http://exploringjs.com/es2016-es2017/ch_tc39-process.html)" in "Exploring ES2016 and ES2017" by Axel Rauschmayer diff --git a/packages/babel-preset-stage-1/package.json b/packages/babel-preset-stage-1/package.json index 820e92916e..a1da8a5475 100644 --- a/packages/babel-preset-stage-1/package.json +++ b/packages/babel-preset-stage-1/package.json @@ -9,7 +9,6 @@ "main": "lib/index.js", "dependencies": { "@babel/helper-plugin-utils": "7.0.0-beta.44", - "@babel/plugin-proposal-decorators": "7.0.0-beta.44", "@babel/plugin-proposal-do-expressions": "7.0.0-beta.44", "@babel/plugin-proposal-export-default-from": "7.0.0-beta.44", "@babel/plugin-proposal-logical-assignment-operators": "7.0.0-beta.44", diff --git a/packages/babel-preset-stage-1/src/index.js b/packages/babel-preset-stage-1/src/index.js index 7ae22ea366..31b2e88a46 100644 --- a/packages/babel-preset-stage-1/src/index.js +++ b/packages/babel-preset-stage-1/src/index.js @@ -1,7 +1,6 @@ import { declare } from "@babel/helper-plugin-utils"; import presetStage2 from "@babel/preset-stage-2"; -import transformDecorators from "@babel/plugin-proposal-decorators"; import transformExportDefaultFrom from "@babel/plugin-proposal-export-default-from"; import transformLogicalAssignmentOperators from "@babel/plugin-proposal-logical-assignment-operators"; import transformOptionalChaining from "@babel/plugin-proposal-optional-chaining"; @@ -9,16 +8,10 @@ import transformPipelineOperator from "@babel/plugin-proposal-pipeline-operator" import transformNullishCoalescingOperator from "@babel/plugin-proposal-nullish-coalescing-operator"; import transformDoExpressions from "@babel/plugin-proposal-do-expressions"; -export default declare((api, opts) => { +export default declare((api, opts = {}) => { api.assertVersion(7); - let loose = false; - let useBuiltIns = false; - - if (opts !== undefined) { - if (opts.loose !== undefined) loose = opts.loose; - if (opts.useBuiltIns !== undefined) useBuiltIns = opts.useBuiltIns; - } + const { loose = false, useBuiltIns = false, decoratorsLegacy = false } = opts; if (typeof loose !== "boolean") { throw new Error("@babel/preset-stage-1 'loose' option must be a boolean."); @@ -28,11 +21,23 @@ export default declare((api, opts) => { "@babel/preset-stage-1 'useBuiltIns' option must be a boolean.", ); } + if (typeof decoratorsLegacy !== "boolean") { + throw new Error( + "@babel/preset-stage-1 'decoratorsLegacy' option must be a boolean.", + ); + } + + if (decoratorsLegacy !== true) { + throw new Error( + "The new decorators proposal is not supported yet." + + ' You muse pass the `"decoratorsLegacy": true` option to' + + " @babel/preset-stage-1", + ); + } return { - presets: [[presetStage2, { loose, useBuiltIns }]], + presets: [[presetStage2, { loose, useBuiltIns, decoratorsLegacy }]], plugins: [ - [transformDecorators, { legacy: true }], transformExportDefaultFrom, transformLogicalAssignmentOperators, [transformOptionalChaining, { loose }], diff --git a/packages/babel-preset-stage-2/README.md b/packages/babel-preset-stage-2/README.md index 60131d788a..10342ad4db 100644 --- a/packages/babel-preset-stage-2/README.md +++ b/packages/babel-preset-stage-2/README.md @@ -58,6 +58,12 @@ Enable "loose" transformations for any plugins in this preset that allow them. Will use the native built-in instead of trying to polyfill behavior for any plugins that require one. +### `decoratorsLegacy` + +`boolean`, defaults to `false`. + +Use the legacy (stage 1) decorators syntax and behavior. + ## References - Chapter "[The TC39 process for ECMAScript features](http://exploringjs.com/es2016-es2017/ch_tc39-process.html)" in "Exploring ES2016 and ES2017" by Axel Rauschmayer diff --git a/packages/babel-preset-stage-2/package.json b/packages/babel-preset-stage-2/package.json index 946574bde0..3d789a5601 100644 --- a/packages/babel-preset-stage-2/package.json +++ b/packages/babel-preset-stage-2/package.json @@ -9,6 +9,7 @@ "main": "lib/index.js", "dependencies": { "@babel/helper-plugin-utils": "7.0.0-beta.44", + "@babel/plugin-proposal-decorators": "7.0.0-beta.44", "@babel/plugin-proposal-export-namespace-from": "7.0.0-beta.44", "@babel/plugin-proposal-function-sent": "7.0.0-beta.44", "@babel/plugin-proposal-numeric-separator": "7.0.0-beta.44", diff --git a/packages/babel-preset-stage-2/src/index.js b/packages/babel-preset-stage-2/src/index.js index 22c1fd81bd..fa87562bf9 100644 --- a/packages/babel-preset-stage-2/src/index.js +++ b/packages/babel-preset-stage-2/src/index.js @@ -1,21 +1,16 @@ import { declare } from "@babel/helper-plugin-utils"; import presetStage3 from "@babel/preset-stage-3"; +import transformDecorators from "@babel/plugin-proposal-decorators"; import transformFunctionSent from "@babel/plugin-proposal-function-sent"; import transformExportNamespaceFrom from "@babel/plugin-proposal-export-namespace-from"; import transformNumericSeparator from "@babel/plugin-proposal-numeric-separator"; import transformThrowExpressions from "@babel/plugin-proposal-throw-expressions"; -export default declare((api, opts) => { +export default declare((api, opts = {}) => { api.assertVersion(7); - let loose = false; - let useBuiltIns = false; - - if (opts !== undefined) { - if (opts.loose !== undefined) loose = opts.loose; - if (opts.useBuiltIns !== undefined) useBuiltIns = opts.useBuiltIns; - } + const { loose = false, useBuiltIns = false, decoratorsLegacy = false } = opts; if (typeof loose !== "boolean") { throw new Error("@babel/preset-stage-2 'loose' option must be a boolean."); @@ -25,10 +20,24 @@ export default declare((api, opts) => { "@babel/preset-stage-2 'useBuiltIns' option must be a boolean.", ); } + if (typeof decoratorsLegacy !== "boolean") { + throw new Error( + "@babel/preset-stage-2 'decoratorsLegacy' option must be a boolean.", + ); + } + + if (decoratorsLegacy !== true) { + throw new Error( + "The new decorators proposal is not supported yet." + + ' You muse pass the `"decoratorsLegacy": true` option to' + + " @babel/preset-stage-2", + ); + } return { presets: [[presetStage3, { loose, useBuiltIns }]], plugins: [ + [transformDecorators, { legacy: decoratorsLegacy }], transformFunctionSent, transformExportNamespaceFrom, transformNumericSeparator,