Skip to content

Commit df988c2

Browse files
committed
fix(@schematics/angular): update web-worker to support Webpack 5
Webpack 5 now includes web worker support. However, the structure of the URL within the `Worker` constructor must be in a specific format. Before: `new Worker('./app.worker', ...)` After: `new Worker(new URL('./app.worker', import.meta.url), ...)`
1 parent 46e9d0e commit df988c2

File tree

3 files changed

+11
-16
lines changed

3 files changed

+11
-16
lines changed

packages/schematics/angular/web-worker/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function addSnippet(options: WebWorkerOptions): Rule {
7979
const workerCreationSnippet = tags.stripIndent`
8080
if (typeof Worker !== 'undefined') {
8181
// Create a new
82-
const worker = new Worker('./${options.name}.worker', { type: 'module' });
82+
const worker = new Worker(new URL('./${options.name}.worker', import.meta.url));
8383
worker.onmessage = ({ data }) => {
8484
${logMessage}
8585
};

packages/schematics/angular/web-worker/index_spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe('Web Worker Schematic', () => {
9595
const tree = await schematicRunner.runSchematicAsync('web-worker', defaultOptions, appTree)
9696
.toPromise();
9797
const appComponent = tree.readContent('/projects/bar/src/app/app.component.ts');
98-
expect(appComponent).toContain(`new Worker('./${defaultOptions.name}.worker`);
98+
expect(appComponent).toContain(`new Worker(new URL('./${defaultOptions.name}.worker`);
9999
expect(appComponent).toContain('console.log(`page got message: ${data}`)');
100100
});
101101

tests/legacy-cli/e2e/tests/build/worker.ts

+9-14
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import { join } from 'path';
99
import { expectFileToExist, expectFileToMatch, replaceInFile, writeFile } from '../../utils/fs';
1010
import { ng } from '../../utils/process';
11-
import { expectToFail } from '../../utils/utils';
1211

1312
export default async function () {
1413
const workerPath = join('src', 'app', 'app.worker.ts');
@@ -27,23 +26,19 @@ export default async function () {
2726
await expectFileToExist(workerPath);
2827
await expectFileToExist(projectTsConfig);
2928
await expectFileToExist(workerTsConfig);
30-
await expectFileToMatch(snippetPath, `new Worker('./app.worker', { type: 'module' })`);
29+
await expectFileToMatch(snippetPath, `new Worker(new URL('./app.worker', import.meta.url)`);
3130

3231
await ng('build', '--configuration=development');
33-
await expectFileToExist('dist/test-project/0-es5.worker.js');
34-
await expectFileToMatch('dist/test-project/main-es5.js', '0-es5.worker.js');
35-
await expectToFail(() => expectFileToMatch('dist/test-project/main-es5.js', '0-es2017.worker.js'));
36-
await expectFileToExist('dist/test-project/0-es2017.worker.js');
37-
await expectFileToMatch('dist/test-project/main-es2017.js', '0-es2017.worker.js');
38-
await expectToFail(() => expectFileToMatch('dist/test-project/main-es2017.js', '0-es5.worker.js'));
32+
await expectFileToExist('dist/test-project/src_app_app_worker_ts-es5.js');
33+
await expectFileToMatch('dist/test-project/main-es5.js', 'src_app_app_worker_ts');
34+
await expectFileToExist('dist/test-project/src_app_app_worker_ts-es2017.js');
35+
await expectFileToMatch('dist/test-project/main-es2017.js', 'src_app_app_worker_ts');
3936

4037
await ng('build', '--output-hashing=none');
41-
await expectFileToExist('dist/test-project/0-es5.worker.js');
42-
await expectFileToMatch('dist/test-project/main-es5.js', '0-es5.worker.js');
43-
await expectToFail(() => expectFileToMatch('dist/test-project/main-es5.js', '0-es2017.worker.js'));
44-
await expectFileToExist('dist/test-project/0-es2017.worker.js');
45-
await expectFileToMatch('dist/test-project/main-es2017.js', '0-es2017.worker.js');
46-
await expectToFail(() => expectFileToMatch('dist/test-project/main-es2017.js', '0-es5.worker.js'));
38+
await expectFileToExist('dist/test-project/609-es5.js');
39+
await expectFileToMatch('dist/test-project/main-es5.js', '609');
40+
await expectFileToExist('dist/test-project/609-es2017.js');
41+
await expectFileToMatch('dist/test-project/main-es2017.js', '609');
4742

4843
// console.warn has to be used because chrome only captures warnings and errors by default
4944
// https://github.com/angular/protractor/issues/2207

0 commit comments

Comments
 (0)