From edd0d271ab110a50245412aa62eb73e967f91c41 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 26 Sep 2017 16:24:52 +0100 Subject: [PATCH 1/3] ci: accept revert commits --- scripts/validate-commits.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/validate-commits.ts b/scripts/validate-commits.ts index 1877f06d7d..d4ad2043ab 100644 --- a/scripts/validate-commits.ts +++ b/scripts/validate-commits.ts @@ -90,6 +90,7 @@ export default function (_: {}, logger: Logger) { // Types that MUST NOT contain a scope. case 'build': + case 'revert': case 'ci': if (scope) { _invalid(sha, message, 'should not have a scope'); From c94f630161e934545d2371a13e189f38573d1a33 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 26 Sep 2017 14:44:15 +0100 Subject: [PATCH 2/3] revert: "fix(@angular-devkit/build-optimizer): don't add pure to super calls" This reverts commit 69225e51be3b8565b760f750cd09893a6a56894e. --- .../src/transforms/prefix-functions.ts | 7 ------- .../src/transforms/prefix-functions_spec.ts | 18 +----------------- 2 files changed, 1 insertion(+), 24 deletions(-) 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 b876cefcf6..1e94b34eae 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts @@ -70,7 +70,6 @@ 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); @@ -118,9 +117,3 @@ 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 f322bb9aac..031936e7ea 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(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); }); - it('doesn\'t add comment when inside function declarations or expressions', () => { + it('doesn\'t adds comment when inside function declarations or expressions', () => { const input = stripIndent` function funcDecl() { var newClazz = Clazz(); @@ -102,21 +102,5 @@ describe('prefix-functions', () => { expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); }); - - it('doesn\'t add comment to super calls', () => { - const input = oneLine` - class ExtendedClass extends BaseClass { - constructor(e) { - super(e); - } - } - `; - const output = stripIndent` - ${emptyImportsComment} - ${input} - `; - - expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); - }); }); }); From 22fa623a8ec7d25d67dc65aed921a843a448ef47 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 26 Sep 2017 15:53:49 +0100 Subject: [PATCH 3/3] feat(@angular-devkit/build-optimizer): support es2015 modules --- .../src/build-optimizer/build-optimizer.ts | 40 ++++++++++++------- .../build-optimizer/build-optimizer_spec.ts | 18 +++++++++ .../src/transforms/scrub-file.ts | 4 +- .../src/transforms/scrub-file_spec.ts | 14 +++++++ 4 files changed, 60 insertions(+), 16 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 f859047ad1..6c5e513f08 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 @@ -16,20 +16,29 @@ import { getWrapEnumsTransformer, testWrapEnums } from '../transforms/wrap-enums const whitelistedAngularModules = [ - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)animations(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)common(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)compiler(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)core(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)forms(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)http(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)platform-browser-dynamic(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)platform-browser(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)platform-webworker-dynamic(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)platform-webworker(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)router(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)upgrade(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)material(\\|\/)/, - /(\\|\/)node_modules(\\|\/)@angular(\\|\/)cdk(\\|\/)/, + /[\\\/]node_modules[\\\/]@angular[\\\/]animations[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]common[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]compiler[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]core[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]forms[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]http[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]platform-browser-dynamic[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]platform-browser[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]platform-webworker-dynamic[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]platform-webworker[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]router[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]upgrade[\\\/]/, + /[\\\/]node_modules[\\\/]@angular[\\\/]material[\\\/]/, + /[\\\/]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 { @@ -70,9 +79,10 @@ export function buildOptimizer(options: BuildOptimizerOptions): TransformJavascr if (inputFilePath && whitelistedAngularModules.some((re) => re.test(inputFilePath)) + && es5AngularModules.some((re) => re.test(inputFilePath)) ) { getTransforms.push( - // getPrefixFunctionsTransformer is rather dangerous, apply only to known pure modules. + // getPrefixFunctionsTransformer is rather dangerous, apply only to known pure es5 modules. // It will mark both `require()` calls and `console.log(stuff)` as pure. // We only apply it to whitelisted modules, since we know they are safe. // getPrefixFunctionsTransformer needs to be before getFoldFileTransformer. diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts index ea99c4fa62..0e76451396 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts @@ -66,6 +66,24 @@ describe('build-optimizer', () => { expect(boOutput.content).toBeFalsy(); expect(boOutput.emitSkipped).toEqual(true); }); + + it('supports es2015 modules', () => { + // prefix-functions would add PURE_IMPORTS_START and PURE to the super call. + // This test ensures it isn't applied to es2015 modules. + const output = oneLine` + import { Injectable } from '@angular/core'; + class Clazz extends BaseClazz { constructor(e) { super(e); } } + `; + const input = stripIndent` + ${output} + Clazz.ctorParameters = () => [ { type: Injectable } ]; + `; + + const inputFilePath = '/node_modules/@angular/core/@angular/core.js'; + const boOutput = buildOptimizer({ content: input, inputFilePath }); + expect(oneLine`${boOutput.content}`).toEqual(output); + expect(boOutput.emitSkipped).toEqual(false); + }); }); 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 f7b38d4485..a2c9cefafc 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/scrub-file.ts @@ -226,7 +226,9 @@ function isCtorParamsAssignmentExpression(exprStmt: ts.ExpressionStatement): boo if (expr.operatorToken.kind !== ts.SyntaxKind.FirstAssignment) { return false; } - if (expr.right.kind !== ts.SyntaxKind.FunctionExpression) { + if (expr.right.kind !== ts.SyntaxKind.FunctionExpression + && expr.right.kind !== ts.SyntaxKind.ArrowFunction + ) { return false; } diff --git a/packages/angular_devkit/build_optimizer/src/transforms/scrub-file_spec.ts b/packages/angular_devkit/build_optimizer/src/transforms/scrub-file_spec.ts index a5a7467076..7ee5fe98db 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/scrub-file_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/scrub-file_spec.ts @@ -173,6 +173,20 @@ describe('scrub-file', () => { expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); }); + + fit('removes top-level Angular constructor parameters in es2015', () => { + const output = stripIndent` + class Clazz extends BaseClazz { constructor(e) { super(e); } } + `; + const input = stripIndent` + ${output} + Clazz.ctorParameters = () => [ { type: Injectable } ]; + `; + + expect(testScrubFile(input)).toBeTruthy(); + expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); + }); + it('removes nested constructor parameters', () => { const output = stripIndent` import { Injector } from '@angular/core';