From 5f63a2cf5271d151ec597e2c7951cc022e0c0a25 Mon Sep 17 00:00:00 2001 From: Alan Date: Wed, 24 Apr 2019 13:45:45 +0200 Subject: [PATCH] fix(@angular-devkit/build-optimizer): don't add pure comments in call expressions When we removed tsickle from the library compilation pipeline the emitted JS changes for Classes. With tsc a class can be of kind CallExpression because of this syntax ``` let Foo = class Foo { constructor() { this.isExpandedChange = new EventEmitter(); } set isExpanded(value) { this.isExpandedChange.emit(value); } }; ``` In such case we shall not add `/*@__PURE__*/` inside this class Fixes #14084 --- .../src/transforms/prefix-functions.ts | 1 + .../src/transforms/prefix-functions_spec.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts index d2414bb98970..a692862a87bb 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts @@ -47,6 +47,7 @@ export function findTopLevelFunctions(parentNode: ts.Node): Set { if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isClassDeclaration(node) + || ts.isClassExpression(node) || ts.isArrowFunction(node) || ts.isMethodDeclaration(node) ) { diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts index d8b55c65a5d4..10c444afb057 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts @@ -167,4 +167,23 @@ describe('prefix-functions', () => { expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); }); + + it('doesn\'t add comment when inside class expression', () => { + const input = tags.stripIndent` + let Foo = class Foo { + constructor() { + this.isExpandedChange = new EventEmitter(); + } + + set isExpanded(value) { + this.isExpandedChange.emit(value); + } + }; + `; + const output = tags.stripIndent` + ${input} + `; + + expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); + }); });