From d0cc0cbda3c08c7d36fa7a0b69ae2f431325695f Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Thu, 21 Jan 2021 11:16:36 +0100 Subject: [PATCH] fix(@angular-devkit/build-angular): correctly handle scripts when using subresource-integrity option Fixes #19829 --- .../options/subresource-integrity_spec.ts | 24 +++++++++++++++++-- .../webpack/plugins/scripts-webpack-plugin.ts | 1 + 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/browser/tests/options/subresource-integrity_spec.ts b/packages/angular_devkit/build_angular/src/browser/tests/options/subresource-integrity_spec.ts index f98329582e..d7e31047b2 100644 --- a/packages/angular_devkit/build_angular/src/browser/tests/options/subresource-integrity_spec.ts +++ b/packages/angular_devkit/build_angular/src/browser/tests/options/subresource-integrity_spec.ts @@ -20,7 +20,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { const { result } = await harness.executeOnce(); expect(result?.success).toBe(true); - harness.expectFile('dist/index.html').content.toContain('integrity='); + harness.expectFile('dist/index.html').content.not.toContain('integrity='); }); it(`does not add integrity attribute when 'false'`, async () => { @@ -32,7 +32,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { const { result } = await harness.executeOnce(); expect(result?.success).toBe(true); - harness.expectFile('dist/index.html').content.toContain('integrity='); + harness.expectFile('dist/index.html').content.not.toContain('integrity='); }); it(`does add integrity attribute when 'true'`, async () => { @@ -46,5 +46,25 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { expect(result?.success).toBe(true); harness.expectFile('dist/index.html').content.toMatch(/integrity="\w+-[A-Za-z0-9\/\+=]+"/); }); + + it(`does not issue a warning when 'true' and 'scripts' is set.`, async () => { + await harness.writeFile('src/script.js', ''); + + harness.useTarget('build', { + ...BASE_OPTIONS, + subresourceIntegrity: true, + scripts: ['src/script.js'], + }); + + const { result, logs } = await harness.executeOnce(); + + expect(result?.success).toBe(true); + harness.expectFile('dist/index.html').content.toMatch(/integrity="\w+-[A-Za-z0-9\/\+=]+"/); + expect(logs).not.toContain( + jasmine.objectContaining({ + message: jasmine.stringMatching(/subresource-integrity/), + }), + ); + }); }); }); diff --git a/packages/angular_devkit/build_angular/src/webpack/plugins/scripts-webpack-plugin.ts b/packages/angular_devkit/build_angular/src/webpack/plugins/scripts-webpack-plugin.ts index 52d44a4d3d..e0b5d117fb 100644 --- a/packages/angular_devkit/build_angular/src/webpack/plugins/scripts-webpack-plugin.ts +++ b/packages/angular_devkit/build_angular/src/webpack/plugins/scripts-webpack-plugin.ts @@ -93,6 +93,7 @@ export class ScriptsWebpackPlugin { } compilation.assets[filename] = source; + compilation.hooks.chunkAsset.call(chunk, filename); } apply(compiler: Compiler): void {