diff --git a/packages/babel-generator/src/generators/classes.ts b/packages/babel-generator/src/generators/classes.ts index 0212bd9d4737..01416fa82828 100644 --- a/packages/babel-generator/src/generators/classes.ts +++ b/packages/babel-generator/src/generators/classes.ts @@ -11,11 +11,15 @@ export function ClassDeclaration( node: t.ClassDeclaration, parent: t.Node, ) { - if ( - !this.format.decoratorsBeforeExport || - (!isExportDefaultDeclaration(parent) && !isExportNamedDeclaration(parent)) - ) { + if (process.env.BABEL_8_BREAKING) { this.printJoin(node.decorators, node); + } else { + if ( + !this.format.decoratorsBeforeExport || + (!isExportDefaultDeclaration(parent) && !isExportNamedDeclaration(parent)) + ) { + this.printJoin(node.decorators, node); + } } if (node.declare) { diff --git a/packages/babel-generator/src/generators/modules.ts b/packages/babel-generator/src/generators/modules.ts index e902729430cc..f40ba76b2604 100644 --- a/packages/babel-generator/src/generators/modules.ts +++ b/packages/babel-generator/src/generators/modules.ts @@ -90,11 +90,13 @@ export function ExportNamedDeclaration( this: Printer, node: t.ExportNamedDeclaration, ) { - if ( - this.format.decoratorsBeforeExport && - isClassDeclaration(node.declaration) - ) { - this.printJoin(node.declaration.decorators, node); + if (!process.env.BABEL_8_BREAKING) { + if ( + this.format.decoratorsBeforeExport && + isClassDeclaration(node.declaration) + ) { + this.printJoin(node.declaration.decorators, node); + } } this.word("export"); @@ -156,11 +158,13 @@ export function ExportDefaultDeclaration( this: Printer, node: t.ExportDefaultDeclaration, ) { - if ( - this.format.decoratorsBeforeExport && - isClassDeclaration(node.declaration) - ) { - this.printJoin(node.declaration.decorators, node); + if (!process.env.BABEL_8_BREAKING) { + if ( + this.format.decoratorsBeforeExport && + isClassDeclaration(node.declaration) + ) { + this.printJoin(node.declaration.decorators, node); + } } this.word("export"); diff --git a/packages/babel-generator/src/index.ts b/packages/babel-generator/src/index.ts index c6f609c7e831..b64536d182ab 100644 --- a/packages/babel-generator/src/index.ts +++ b/packages/babel-generator/src/index.ts @@ -66,7 +66,6 @@ function normalizeOptions( style: " ", base: 0, }, - decoratorsBeforeExport: !!opts.decoratorsBeforeExport, jsescOption: { quotes: "double", wrap: true, @@ -78,6 +77,7 @@ function normalizeOptions( }; if (!process.env.BABEL_8_BREAKING) { + format.decoratorsBeforeExport = !!opts.decoratorsBeforeExport; format.jsonCompatibleStrings = opts.jsonCompatibleStrings; } @@ -193,6 +193,7 @@ export interface GeneratorOptions { /** * Set to true to enable support for experimental decorators syntax before module exports. * Defaults to `false`. + * @deprecated Removed in Babel 8 */ decoratorsBeforeExport?: boolean; diff --git a/packages/babel-generator/src/printer.ts b/packages/babel-generator/src/printer.ts index 227fabe71aa6..857ca0c97034 100644 --- a/packages/babel-generator/src/printer.ts +++ b/packages/babel-generator/src/printer.ts @@ -35,7 +35,6 @@ export type Format = { style: string; base: number; }; - decoratorsBeforeExport: boolean; recordAndTupleSyntaxType: RecordAndTuplePluginOptions["syntaxType"]; jsescOption: jsescOptions; jsonCompatibleStrings?: boolean; @@ -44,6 +43,10 @@ export type Format = { * Changes what token is used for pipe bodies’ topic references. */ topicToken?: PipelineOperatorPluginOptions["topicToken"]; + /** + * @deprecated Removed in Babel 8 + */ + decoratorsBeforeExport?: boolean; }; interface AddNewlinesOptions { diff --git a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-false/options.json b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-false/options.json index 7ebfdd91777b..f19a69b6a2b8 100644 --- a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-false/options.json +++ b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-false/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": false, "plugins": [["decorators", { "decoratorsBeforeExport": false }]], "decoratorsBeforeExport": false } diff --git a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-true/options.json b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-true/options.json index 234fb2bac889..5cd524b7c638 100644 --- a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-true/options.json +++ b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/false-to-true/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": false, "plugins": [["decorators", { "decoratorsBeforeExport": false }]], "decoratorsBeforeExport": true } diff --git a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-false/options.json b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-false/options.json index 2540d61c86c0..99dc70805820 100644 --- a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-false/options.json +++ b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-false/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": false, "plugins": [["decorators", { "decoratorsBeforeExport": true }]], "decoratorsBeforeExport": false } diff --git a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-true/options.json b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-true/options.json index 788cc225058a..f82968d9ccb5 100644 --- a/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-true/options.json +++ b/packages/babel-generator/test/fixtures/decoratorsBeforeExport/true-to-true/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": false, "plugins": [["decorators", { "decoratorsBeforeExport": true }]], "decoratorsBeforeExport": true } diff --git a/packages/babel-standalone/test/preset-stage-1.test.js b/packages/babel-standalone/test/preset-stage-1.test.js index 6a75a552261b..c9a64c3326b1 100644 --- a/packages/babel-standalone/test/preset-stage-1.test.js +++ b/packages/babel-standalone/test/preset-stage-1.test.js @@ -50,15 +50,7 @@ const require = createRequire(import.meta.url); it("should support decorators versioned 2021-12", () => { const output = Babel.transform("@dec class C {}", { plugins: [["external-helpers", { helperVersion: "7.100.0" }]], - presets: [ - [ - "stage-1", - { - decoratorsVersion: "2021-12", - decoratorsBeforeExport: false, - }, - ], - ], + presets: [["stage-1", { decoratorsVersion: "2021-12" }]], }).code; expect(output).toMatch("babelHelpers.applyDecs"); });