From a0d910c0cb7a2d76517c7843719432c51a76fae3 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 24 Oct 2017 16:43:03 +0100 Subject: [PATCH] feat(@angular-devkit/build-optimizer): support es2015 Followup to #168, 169 --- .../src/build-optimizer/build-optimizer.ts | 13 +------------ .../src/transforms/prefix-functions.ts | 7 +++++++ .../src/transforms/prefix-functions_spec.ts | 18 +++++++++++++++++- .../src/transforms/scrub-file.ts | 1 + 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts index 27de56ef82..0e05f9913b 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts @@ -32,15 +32,6 @@ const whitelistedAngularModules = [ /[\\/]node_modules[\\/]@angular[\\/]cdk[\\/]/, ]; -const es5AngularModules = [ - // Angular 4 packaging format has .es5.js as the extension. - /\.es5\.js$/, // Angular 4 - // Angular 5 has esm5 folders. - /[\\/]node_modules[\\/]@angular[\\/][^\\/]+[\\/]esm5[\\/]/, - // All Angular versions have UMD with es5. - /\.umd\.js$/, -]; - export interface BuildOptimizerOptions { content?: string; inputFilePath?: string; @@ -77,9 +68,7 @@ export function buildOptimizer(options: BuildOptimizerOptions): TransformJavascr getTransforms.push(getPrefixClassesTransformer); } - if (inputFilePath - && whitelistedAngularModules.some((re) => re.test(inputFilePath)) - && es5AngularModules.some((re) => re.test(inputFilePath)) + if (inputFilePath && whitelistedAngularModules.some((re) => re.test(inputFilePath)) ) { getTransforms.push( // getPrefixFunctionsTransformer is rather dangerous, apply only to known pure es5 modules. 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 1e94b34eae..b876cefcf6 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts @@ -70,6 +70,7 @@ export function findTopLevelFunctions(parentNode: ts.Node): ts.Node[] { topLevelFunctions.push(node.parent); } else if ((node.kind === ts.SyntaxKind.CallExpression || node.kind === ts.SyntaxKind.NewExpression) + && !isSuperCall(node) && !hasPureComment(node) ) { topLevelFunctions.push(node); @@ -117,3 +118,9 @@ function hasPureComment(node: ts.Node) { return leadingComment && leadingComment.some((comment) => comment.text === pureFunctionComment); } + +function isSuperCall(node: ts.Node) { + const callExpr = node as ts.CallExpression; + + return callExpr.expression && callExpr.expression.kind === ts.SyntaxKind.SuperKeyword; +} 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 37a973b180..db4a273b67 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 @@ -83,7 +83,7 @@ describe('prefix-functions', () => { expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); }); - it('doesn\'t adds comment when inside function declarations or expressions', () => { + it('doesn\'t add comment when inside function declarations or expressions', () => { const input = tags.stripIndent` function funcDecl() { var newClazz = Clazz(); @@ -102,5 +102,21 @@ describe('prefix-functions', () => { expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); }); + + it('doesn\'t add comment to super calls', () => { + const input = tags.stripIndent` + class ExtendedClass extends BaseClass { + constructor(e) { + super(e); + } + } + `; + const output = tags.stripIndent` + ${emptyImportsComment} + ${input} + `; + + expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); + }); }); }); diff --git a/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts b/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts index 2af38ec80f..6dc5727f00 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts @@ -22,6 +22,7 @@ export function testScrubFile(content: string) { // Don't remove `ctorParameters` from these. const platformWhitelist = [ + 'PlatformRef', 'PlatformRef_', 'TestabilityRegistry', 'Console',