From 08bd16311af7931d2e49f6017745d71720bc7b9e Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 22 Jan 2020 16:26:32 -0500 Subject: [PATCH] fix(@angular-devkit/build-angular): ensure output is ASCII only Fixes: #16721 --- .../models/webpack-configs/common.ts | 3 +++ .../test/browser/optimization-level_spec_large.ts | 13 +++++++++++++ tests/legacy-cli/e2e/tests/basic/ivy.ts | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts index 849abbef7e1a..f339236f4a0b 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts @@ -404,6 +404,9 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { safari10: true, output: { ecma: terserEcma, + // For differential loading, this is handled in the bundle processing. + // This should also work with just true but the experimental rollup support breaks without this check. + ascii_only: !differentialLoadingMode, // default behavior (undefined value) is to keep only important comments (licenses, etc.) comments: !buildOptions.extractLicenses && undefined, webkit: true, diff --git a/packages/angular_devkit/build_angular/test/browser/optimization-level_spec_large.ts b/packages/angular_devkit/build_angular/test/browser/optimization-level_spec_large.ts index b37c9dc9afaf..3d982aff4ac8 100644 --- a/packages/angular_devkit/build_angular/test/browser/optimization-level_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/browser/optimization-level_spec_large.ts @@ -79,4 +79,17 @@ describe('Browser Builder optimization level', () => { expect(await files['main.js']).toContain('color: white'); expect(await files['styles.css']).toContain('color: white'); }); + + it('outputs ASCII only content', async () => { + const overrides = { aot: true, optimization: true }; + + host.writeMultipleFiles({ + 'src/app/app.component.html': `
€€€
`, + }); + + const { files } = await browserBuild(architect, host, target, overrides); + expect(await files['main.js']).not.toContain('ɵ'); + expect(await files['main.js']).not.toContain('€€€'); + expect(await files['main.js']).toContain('\\u20ac\\u20ac\\u20ac'); + }); }); diff --git a/tests/legacy-cli/e2e/tests/basic/ivy.ts b/tests/legacy-cli/e2e/tests/basic/ivy.ts index 80bb9fff78f0..fc5a42a594ef 100644 --- a/tests/legacy-cli/e2e/tests/basic/ivy.ts +++ b/tests/legacy-cli/e2e/tests/basic/ivy.ts @@ -42,7 +42,7 @@ export default async function() { const mainUrl = mainUrlMatch && mainUrlMatch[1]; const main = await request('http://localhost:4200/' + mainUrl); - if (!main.match(/ɵcmp\s*=/)) { + if (!main.match(/ɵcmp\s*=/) && !main.match(/\\u0275cmp\s*=/)) { throw new Error('Ivy could not be found.'); } if (main.match(/ngDevMode/)) {