From 41f23ab44e5fe50f4faffb3963e7fa06e3fb68e5 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 27 Aug 2018 16:43:45 +0200 Subject: [PATCH 1/2] fix(@angular-devkit/build-angular): exclude `.map` files from budget calculations Closes #11999 --- .../utilities/bundle-calculator.ts | 3 ++ .../test/browser/bundle-budgets_spec_large.ts | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts index 810899e0d868..86f1fe0e4951 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts @@ -64,6 +64,7 @@ class InitialCalculator extends Calculator { const initialChunks = this.compilation.chunks.filter(chunk => chunk.isOnlyInitial()); const size: number = initialChunks .reduce((files, chunk) => [...files, ...chunk.files], []) + .filter((file: string) => !/\.map$/.test(file)) .map((file: string) => this.compilation.assets[file].size()) .reduce((total: number, size: number) => total + size, 0); return [{size, label: 'initial'}]; @@ -90,6 +91,7 @@ class AllScriptCalculator extends Calculator { class AllCalculator extends Calculator { calculate() { const size: number = Object.keys(this.compilation.assets) + .filter(key => !/\.map$/.test(key)) .map(key => this.compilation.assets[key].size()) .reduce((total: number, size: number) => total + size, 0); return [{size, label: 'total'}]; @@ -119,6 +121,7 @@ class AnyScriptCalculator extends Calculator { class AnyCalculator extends Calculator { calculate() { return Object.keys(this.compilation.assets) + .filter(key => !/\.map$/.test(key)) .map(key => { const asset = this.compilation.assets[key]; return { diff --git a/packages/angular_devkit/build_angular/test/browser/bundle-budgets_spec_large.ts b/packages/angular_devkit/build_angular/test/browser/bundle-budgets_spec_large.ts index 918e691ba72b..56eb019a5e79 100644 --- a/packages/angular_devkit/build_angular/test/browser/bundle-budgets_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/browser/bundle-budgets_spec_large.ts @@ -54,4 +54,39 @@ describe('Browser Builder bundle budgets', () => { tap(() => expect(logger.includes('WARNING')).toBe(true)), ).toPromise().then(done, done.fail); }); + + describe(`should ignore '.map' files`, () => { + it(`when 'intial' budget`, (done) => { + const overrides = { + optimization: true, + budgets: [{ type: 'initial', maximumError: '1mb' }], + }; + + runTargetSpec(host, browserTargetSpec, overrides, DefaultTimeout * 2).pipe( + tap((buildEvent) => expect(buildEvent.success).toBe(true)), + ).toPromise().then(done, done.fail); + }); + + it(`when 'all' budget`, (done) => { + const overrides = { + optimization: true, + budgets: [{ type: 'all', maximumError: '1mb' }], + }; + + runTargetSpec(host, browserTargetSpec, overrides, DefaultTimeout * 2).pipe( + tap((buildEvent) => expect(buildEvent.success).toBe(true)), + ).toPromise().then(done, done.fail); + }); + + it(`when 'any' budget`, (done) => { + const overrides = { + optimization: true, + budgets: [{ type: 'any', maximumError: '1mb' }], + }; + + runTargetSpec(host, browserTargetSpec, overrides, DefaultTimeout * 2).pipe( + tap((buildEvent) => expect(buildEvent.success).toBe(true)), + ).toPromise().then(done, done.fail); + }); + }); }); From 227d30bf23293cae493340a6c64b8fd8c170c775 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 27 Aug 2018 17:59:42 +0200 Subject: [PATCH 2/2] refactor(@angular-devkit/build-angular): replace `RegExp` with `endsWith` --- .../angular-cli-files/utilities/bundle-calculator.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts index 86f1fe0e4951..a396b2f3801d 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/utilities/bundle-calculator.ts @@ -64,7 +64,7 @@ class InitialCalculator extends Calculator { const initialChunks = this.compilation.chunks.filter(chunk => chunk.isOnlyInitial()); const size: number = initialChunks .reduce((files, chunk) => [...files, ...chunk.files], []) - .filter((file: string) => !/\.map$/.test(file)) + .filter((file: string) => !file.endsWith('.map')) .map((file: string) => this.compilation.assets[file].size()) .reduce((total: number, size: number) => total + size, 0); return [{size, label: 'initial'}]; @@ -77,7 +77,7 @@ class InitialCalculator extends Calculator { class AllScriptCalculator extends Calculator { calculate() { const size: number = Object.keys(this.compilation.assets) - .filter(key => /\.js$/.test(key)) + .filter(key => key.endsWith('.js')) .map(key => this.compilation.assets[key]) .map(asset => asset.size()) .reduce((total: number, size: number) => total + size, 0); @@ -91,7 +91,7 @@ class AllScriptCalculator extends Calculator { class AllCalculator extends Calculator { calculate() { const size: number = Object.keys(this.compilation.assets) - .filter(key => !/\.map$/.test(key)) + .filter(key => !key.endsWith('.map')) .map(key => this.compilation.assets[key].size()) .reduce((total: number, size: number) => total + size, 0); return [{size, label: 'total'}]; @@ -104,7 +104,7 @@ class AllCalculator extends Calculator { class AnyScriptCalculator extends Calculator { calculate() { return Object.keys(this.compilation.assets) - .filter(key => /\.js$/.test(key)) + .filter(key => key.endsWith('.js')) .map(key => { const asset = this.compilation.assets[key]; return { @@ -121,7 +121,7 @@ class AnyScriptCalculator extends Calculator { class AnyCalculator extends Calculator { calculate() { return Object.keys(this.compilation.assets) - .filter(key => !/\.map$/.test(key)) + .filter(key => !key.endsWith('.map')) .map(key => { const asset = this.compilation.assets[key]; return {