feat(@angular-devkit/build-angular): Identify third-party sources in … · angular/angular-cli@b5f6d86 (original) (raw)
`@@ -10,6 +10,10 @@ import { Architect } from '@angular-devkit/architect';
`
10
10
`import * as path from 'path';
`
11
11
`import { browserBuild, createArchitect, host } from '../../../testing/test-utils';
`
12
12
``
``
13
`+
// Following the naming conventions from
`
``
14
`+
// https://sourcemaps.info/spec.html#h.ghqpj1ytqjbm
`
``
15
`+
const IGNORE_LIST = 'x_google_ignoreList';
`
``
16
+
13
17
`describe('Browser Builder external source map', () => {
`
14
18
`const target = { project: 'app', target: 'build' };
`
15
19
`let architect: Architect;
`
`@@ -50,3 +54,70 @@ describe('Browser Builder external source map', () => {
`
50
54
`` expect(hasTsSourcePaths).toBe(false, vendor.js.map not should have '.ts' extentions
);
``
51
55
`});
`
52
56
`});
`
``
57
+
``
58
`+
describe('Identifying third-party code in source maps', () => {
`
``
59
`+
interface SourceMap {
`
``
60
`+
sources: string[];
`
``
61
`+
`
``
62
`+
}
`
``
63
+
``
64
`+
const target = { project: 'app', target: 'build' };
`
``
65
`+
let architect: Architect;
`
``
66
+
``
67
`+
beforeEach(async () => {
`
``
68
`+
await host.initialize().toPromise();
`
``
69
`+
architect = (await createArchitect(host.root())).architect;
`
``
70
`+
});
`
``
71
`+
afterEach(async () => host.restore().toPromise());
`
``
72
+
``
73
`+
it('specifies which sources are third party when vendor processing is disabled', async () => {
`
``
74
`+
const overrides = {
`
``
75
`+
sourceMap: {
`
``
76
`+
scripts: true,
`
``
77
`+
vendor: false,
`
``
78
`+
},
`
``
79
`+
};
`
``
80
+
``
81
`+
const { files } = await browserBuild(architect, host, target, overrides);
`
``
82
`+
const mainMap: SourceMap = JSON.parse(await files['main.js.map']);
`
``
83
`+
const polyfillsMap: SourceMap = JSON.parse(await files['polyfills.js.map']);
`
``
84
`+
const runtimeMap: SourceMap = JSON.parse(await files['runtime.js.map']);
`
``
85
`+
const vendorMap: SourceMap = JSON.parse(await files['vendor.js.map']);
`
``
86
+
``
87
`+
expect(mainMapIGNORE_LIST).not.toBeUndefined();
`
``
88
`+
expect(polyfillsMapIGNORE_LIST).not.toBeUndefined();
`
``
89
`+
expect(runtimeMapIGNORE_LIST).not.toBeUndefined();
`
``
90
`+
expect(vendorMapIGNORE_LIST).not.toBeUndefined();
`
``
91
+
``
92
`+
expect(mainMapIGNORE_LIST.length).toEqual(0);
`
``
93
`+
expect(polyfillsMapIGNORE_LIST.length).not.toEqual(0);
`
``
94
`+
expect(runtimeMapIGNORE_LIST.length).not.toEqual(0);
`
``
95
`+
expect(vendorMapIGNORE_LIST.length).not.toEqual(0);
`
``
96
+
``
97
`+
const thirdPartyInMain = mainMap.sources.some((s) => s.includes('node_modules'));
`
``
98
`+
const thirdPartyInPolyfills = polyfillsMap.sources.some((s) => s.includes('node_modules'));
`
``
99
`+
const thirdPartyInRuntime = runtimeMap.sources.some((s) => s.includes('webpack'));
`
``
100
`+
const thirdPartyInVendor = vendorMap.sources.some((s) => s.includes('node_modules'));
`
``
101
`` +
expect(thirdPartyInMain).toBe(false, main.js.map should not include any node modules
);
``
``
102
`` +
expect(thirdPartyInPolyfills).toBe(true, polyfills.js.map should include some node modules
);
``
``
103
`` +
expect(thirdPartyInRuntime).toBe(true, runtime.js.map should include some webpack code
);
``
``
104
`` +
expect(thirdPartyInVendor).toBe(true, vendor.js.map should include some node modules
);
``
``
105
+
``
106
`+
// All sources in the main map are first-party.
`
``
107
`+
expect(mainMap.sources.filter((_, i) => !mainMapIGNORE_LIST.includes(i))).toEqual([
`
``
108
`+
'./src/app/app.component.ts',
`
``
109
`+
'./src/app/app.module.ts',
`
``
110
`+
'./src/environments/environment.ts',
`
``
111
`+
'./src/main.ts',
`
``
112
`+
]);
`
``
113
+
``
114
`+
// Only some sources in the polyfills map are first-party.
`
``
115
`+
expect(polyfillsMap.sources.filter((_, i) => !polyfillsMapIGNORE_LIST.includes(i))).toEqual([
`
``
116
`+
'./src/polyfills.ts',
`
``
117
`+
]);
`
``
118
+
``
119
`+
// None of the sources in the runtime and vendor maps are first-party.
`
``
120
`+
expect(runtimeMap.sources.filter((_, i) => !runtimeMapIGNORE_LIST.includes(i))).toEqual([]);
`
``
121
`+
expect(vendorMap.sources.filter((_, i) => !vendorMapIGNORE_LIST.includes(i))).toEqual([]);
`
``
122
`+
});
`
``
123
`+
});
`