diff --git a/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members.ts b/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members.ts index 226c135fd5bd..d7791a1f8454 100644 --- a/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members.ts +++ b/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members.ts @@ -365,12 +365,7 @@ export default function (): PluginObj { return; } - if ( - !classNode.id || - !parentPath.isVariableDeclarator() || - !types.isIdentifier(parentPath.node.id) || - parentPath.node.id.name !== classNode.id.name - ) { + if (!parentPath.isVariableDeclarator() || !types.isIdentifier(parentPath.node.id)) { return; } @@ -402,16 +397,17 @@ export default function (): PluginObj { [], types.blockStatement([ types.variableDeclaration('let', [ - types.variableDeclarator(types.cloneNode(classNode.id), classNode), + types.variableDeclarator(types.cloneNode(parentPath.node.id), classNode), ]), ...wrapStatementNodes, - types.returnStatement(types.cloneNode(classNode.id)), + types.returnStatement(types.cloneNode(parentPath.node.id)), ]), ); const replacementInitializer = types.callExpression( types.parenthesizedExpression(container), [], ); + annotateAsPure(replacementInitializer); // Add the wrapped class directly to the variable declaration diff --git a/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members_spec.ts b/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members_spec.ts index c8d660e04d80..83f4dfeee697 100644 --- a/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members_spec.ts +++ b/packages/angular_devkit/build_angular/src/tools/babel/plugins/adjust-static-class-members_spec.ts @@ -595,6 +595,31 @@ describe('adjust-static-class-members Babel plugin', () => { }), ); + it( + 'wraps class with class decorators when wrapDecorators is true (esbuild output)', + testCase({ + input: ` + var ExampleClass = class { + method() { + } + }; + __decorate([ + SomeDecorator() + ], ExampleClass.prototype, "method", null); + `, + expected: ` + var ExampleClass = /*#__PURE__*/ (() => { + let ExampleClass = class { + method() {} + }; + __decorate([SomeDecorator()], ExampleClass.prototype, "method", null); + return ExampleClass; + })(); + `, + options: { wrapDecorators: true }, + }), + ); + it( 'wraps class with class decorators when wrapDecorators is true', testCase({