diff --git a/packages/@ngtools/webpack/src/transformers/elide_imports.ts b/packages/@ngtools/webpack/src/transformers/elide_imports.ts index 0b1fe03c7cf0..7dbe888d328d 100644 --- a/packages/@ngtools/webpack/src/transformers/elide_imports.ts +++ b/packages/@ngtools/webpack/src/transformers/elide_imports.ts @@ -22,7 +22,7 @@ export function elideImports( const typeChecker = getTypeChecker(); // Collect all imports and used identifiers - const exportSpecifiers = new Set(); + const specialCaseNames = new Set(); const usedSymbols = new Set(); const imports = new Array(); ts.forEachChild(sourceFile, function visit(node) { @@ -42,8 +42,11 @@ export function elideImports( } else if (ts.isExportSpecifier(node)) { // Export specifiers return the non-local symbol from the above // so check the name string instead - exportSpecifiers.add((node.propertyName || node.name).text); + specialCaseNames.add((node.propertyName || node.name).text); return; + } else if (ts.isShorthandPropertyAssignment(node)) { + // Shorthand property assignments return the object property's symbol not the import's + specialCaseNames.add(node.name.text); } ts.forEachChild(node, visit); @@ -54,7 +57,7 @@ export function elideImports( } const isUnused = (node: ts.Identifier) => { - if (exportSpecifiers.has(node.text)) { + if (specialCaseNames.has(node.text)) { return false; } diff --git a/packages/@ngtools/webpack/src/transformers/remove_decorators.spec.ts b/packages/@ngtools/webpack/src/transformers/remove_decorators.spec.ts index 48e744b0bad0..ab2188272865 100644 --- a/packages/@ngtools/webpack/src/transformers/remove_decorators.spec.ts +++ b/packages/@ngtools/webpack/src/transformers/remove_decorators.spec.ts @@ -200,6 +200,7 @@ describe('@ngtools/webpack transformers', () => { it('should not remove imports from types that are still used', () => { const input = stripIndent` import { Component, ChangeDetectionStrategy, EventEmitter } from '@angular/core'; + import { abc } from 'xyz'; @Component({ selector: 'app-root', @@ -210,17 +211,20 @@ describe('@ngtools/webpack transformers', () => { export class AppComponent { notify: EventEmitter = new EventEmitter(); title = 'app'; + example = { abc }; } export { ChangeDetectionStrategy }; `; const output = stripIndent` import { ChangeDetectionStrategy, EventEmitter } from '@angular/core'; + import { abc } from 'xyz'; export class AppComponent { constructor() { this.notify = new EventEmitter(); this.title = 'app'; + this.example = { abc }; } }