@angular-devkit/build-angular 12.2.9 → 12.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -11
- package/src/babel/babel-loader.d.ts +12 -3
- package/src/babel/webpack-loader.js +24 -3
- package/src/browser/index.js +122 -97
- package/src/dev-server/index.js +3 -0
- package/src/utils/action-executor.js +4 -5
- package/src/utils/process-bundle.d.ts +3 -0
- package/src/utils/process-bundle.js +11 -5
- package/src/webpack/configs/browser.js +1 -0
- package/src/webpack/configs/test.js +1 -0
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-devkit/build-angular",
|
|
3
|
-
"version": "12.2.
|
|
3
|
+
"version": "12.2.13",
|
|
4
4
|
"description": "Angular Webpack Build Facade",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"typings": "src/index.d.ts",
|
|
7
7
|
"builders": "builders.json",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@ampproject/remapping": "1.0.1",
|
|
10
|
-
"@angular-devkit/architect": "0.1202.
|
|
11
|
-
"@angular-devkit/build-optimizer": "0.1202.
|
|
12
|
-
"@angular-devkit/build-webpack": "0.1202.
|
|
13
|
-
"@angular-devkit/core": "12.2.
|
|
10
|
+
"@angular-devkit/architect": "0.1202.13",
|
|
11
|
+
"@angular-devkit/build-optimizer": "0.1202.13",
|
|
12
|
+
"@angular-devkit/build-webpack": "0.1202.13",
|
|
13
|
+
"@angular-devkit/core": "12.2.13",
|
|
14
14
|
"@babel/core": "7.14.8",
|
|
15
15
|
"@babel/generator": "7.14.8",
|
|
16
16
|
"@babel/helper-annotate-as-pure": "7.14.5",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@babel/template": "7.14.5",
|
|
23
23
|
"@discoveryjs/json-ext": "0.5.3",
|
|
24
24
|
"@jsdevtools/coverage-istanbul-loader": "3.0.5",
|
|
25
|
-
"@ngtools/webpack": "12.2.
|
|
25
|
+
"@ngtools/webpack": "12.2.13",
|
|
26
26
|
"ansi-colors": "4.1.1",
|
|
27
27
|
"babel-loader": "8.2.2",
|
|
28
28
|
"browserslist": "^4.9.1",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"circular-dependency-plugin": "5.2.2",
|
|
32
32
|
"copy-webpack-plugin": "9.0.1",
|
|
33
33
|
"core-js": "3.16.0",
|
|
34
|
-
"critters": "0.0.
|
|
34
|
+
"critters": "0.0.12",
|
|
35
35
|
"css-loader": "6.2.0",
|
|
36
36
|
"css-minimizer-webpack-plugin": "3.0.2",
|
|
37
|
-
"esbuild-wasm": "0.13.
|
|
37
|
+
"esbuild-wasm": "0.13.8",
|
|
38
38
|
"find-cache-dir": "3.3.1",
|
|
39
39
|
"glob": "7.1.7",
|
|
40
40
|
"https-proxy-agent": "5.0.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"less-loader": "10.0.1",
|
|
45
45
|
"license-webpack-plugin": "2.3.20",
|
|
46
46
|
"loader-utils": "2.0.0",
|
|
47
|
-
"mini-css-extract-plugin": "2.2
|
|
47
|
+
"mini-css-extract-plugin": "2.4.2",
|
|
48
48
|
"minimatch": "3.0.4",
|
|
49
49
|
"open": "8.2.1",
|
|
50
50
|
"ora": "5.4.1",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"webpack-subresource-integrity": "1.5.2"
|
|
78
78
|
},
|
|
79
79
|
"optionalDependencies": {
|
|
80
|
-
"esbuild": "0.13.
|
|
80
|
+
"esbuild": "0.13.8"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
83
|
"@angular/compiler-cli": "^12.0.0",
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
},
|
|
127
127
|
"engines": {
|
|
128
128
|
"node": "^12.14.1 || >=14.0.0",
|
|
129
|
-
"npm": "^6.11.0 || ^7.5.6",
|
|
129
|
+
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
|
|
130
130
|
"yarn": ">= 1.13.0"
|
|
131
131
|
},
|
|
132
132
|
"author": "Angular Authors",
|
|
@@ -7,9 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
declare module 'babel-loader' {
|
|
10
|
-
type BabelLoaderCustomizer<T> = (
|
|
11
|
-
babel: typeof import('@babel/core'),
|
|
12
|
-
) => {
|
|
10
|
+
type BabelLoaderCustomizer<T> = (babel: typeof import('@babel/core')) => {
|
|
13
11
|
customOptions?(
|
|
14
12
|
this: import('webpack').loader.LoaderContext,
|
|
15
13
|
loaderOptions: Record<string, unknown>,
|
|
@@ -20,6 +18,17 @@ declare module 'babel-loader' {
|
|
|
20
18
|
configuration: import('@babel/core').PartialConfig,
|
|
21
19
|
loaderArguments: { source: string; map?: unknown; customOptions: T },
|
|
22
20
|
): import('@babel/core').TransformOptions;
|
|
21
|
+
result?(
|
|
22
|
+
this: import('webpack').loader.LoaderContext,
|
|
23
|
+
result: import('@babel/core').BabelFileResult,
|
|
24
|
+
context: {
|
|
25
|
+
source: string;
|
|
26
|
+
map?: unknown;
|
|
27
|
+
customOptions: T;
|
|
28
|
+
configuration: import('@babel/core').PartialConfig;
|
|
29
|
+
options: import('@babel/core').TransformOptions;
|
|
30
|
+
},
|
|
31
|
+
): import('@babel/core').BabelFileResult;
|
|
23
32
|
};
|
|
24
33
|
function custom<T>(customizer: BabelLoaderCustomizer<T>): import('webpack').loader.Loader;
|
|
25
34
|
}
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
* Use of this source code is governed by an MIT-style license that can be
|
|
7
7
|
* found in the LICENSE file at https://angular.io/license
|
|
8
8
|
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
9
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const remapping_1 = __importDefault(require("@ampproject/remapping"));
|
|
10
14
|
const linker_1 = require("@angular/compiler-cli/linker");
|
|
11
15
|
const babel_loader_1 = require("babel-loader");
|
|
12
16
|
const typescript_1 = require("typescript");
|
|
@@ -118,10 +122,10 @@ exports.default = babel_loader_1.custom(() => {
|
|
|
118
122
|
}
|
|
119
123
|
return {
|
|
120
124
|
...configuration.options,
|
|
121
|
-
//
|
|
122
|
-
//
|
|
125
|
+
// Using `false` disables babel from attempting to locate sourcemaps or process any inline maps.
|
|
126
|
+
// The babel types do not include the false option even though it is valid
|
|
123
127
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
124
|
-
inputSourceMap:
|
|
128
|
+
inputSourceMap: false,
|
|
125
129
|
plugins,
|
|
126
130
|
presets: [
|
|
127
131
|
...(configuration.options.presets || []),
|
|
@@ -146,5 +150,22 @@ exports.default = babel_loader_1.custom(() => {
|
|
|
146
150
|
],
|
|
147
151
|
};
|
|
148
152
|
},
|
|
153
|
+
result(result, { map: inputSourceMap }) {
|
|
154
|
+
if (result.map && inputSourceMap) {
|
|
155
|
+
// Merge the intermediate sourcemap generated by babel with the input source map.
|
|
156
|
+
// The casting is required due to slight differences in the types for babel and
|
|
157
|
+
// `@ampproject/remapping` source map objects but both are compatible with Webpack.
|
|
158
|
+
// This method for merging is used because it provides more accurate output
|
|
159
|
+
// and is faster while using less memory.
|
|
160
|
+
result.map = {
|
|
161
|
+
// Convert the SourceMap back to simple plain object.
|
|
162
|
+
// This is needed because otherwise code-coverage will fail with `don't know how to turn this value into a node`
|
|
163
|
+
// Which is throw by Babel when it is invoked again from `istanbul-lib-instrument`.
|
|
164
|
+
// https://github.com/babel/babel/blob/780aa48d2a34dc55f556843074b6aed45e7eabeb/packages/babel-types/src/converters/valueToNode.ts#L115-L130
|
|
165
|
+
...remapping_1.default([result.map, inputSourceMap], () => null),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
},
|
|
149
170
|
};
|
|
150
171
|
});
|
package/src/browser/index.js
CHANGED
|
@@ -131,7 +131,7 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
131
131
|
}).pipe(
|
|
132
132
|
// eslint-disable-next-line max-lines-per-function
|
|
133
133
|
operators_1.concatMap(async (buildEvent) => {
|
|
134
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
134
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
135
135
|
const spinner = new spinner_1.Spinner();
|
|
136
136
|
spinner.enabled = options.progress !== false;
|
|
137
137
|
const { success, emittedFiles = [], outputPath: webpackOutputPath } = buildEvent;
|
|
@@ -241,7 +241,7 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
241
241
|
if (actionOptions.sourceMaps) {
|
|
242
242
|
try {
|
|
243
243
|
map = fs.readFileSync(filename + '.map', 'utf8');
|
|
244
|
-
if (es5Polyfills) {
|
|
244
|
+
if (es5Polyfills || i18n.shouldInline) {
|
|
245
245
|
fs.unlinkSync(filename + '.map');
|
|
246
246
|
}
|
|
247
247
|
}
|
|
@@ -251,6 +251,11 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
251
251
|
fs.unlinkSync(filename);
|
|
252
252
|
filename = filename.replace(/\-es20\d{2}/, '');
|
|
253
253
|
}
|
|
254
|
+
else if (i18n.shouldInline) {
|
|
255
|
+
// Original files must be deleted with i18n to avoid the original files from
|
|
256
|
+
// being copied over the translated files when copying the project assets.
|
|
257
|
+
fs.unlinkSync(filename);
|
|
258
|
+
}
|
|
254
259
|
const es2015Polyfills = file.file.startsWith('polyfills-es20');
|
|
255
260
|
// Record the bundle processing action
|
|
256
261
|
// The runtime chunk gets special processing for lazy loaded files
|
|
@@ -265,6 +270,8 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
265
270
|
runtime: file.file.startsWith('runtime'),
|
|
266
271
|
ignoreOriginal: es5Polyfills,
|
|
267
272
|
optimizeOnly: es2015Polyfills,
|
|
273
|
+
// When using i18n, file results are kept in memory for further processing
|
|
274
|
+
memoryMode: i18n.shouldInline,
|
|
268
275
|
});
|
|
269
276
|
// ES2015 polyfills are only optimized; optimization check was performed above
|
|
270
277
|
if (es2015Polyfills) {
|
|
@@ -279,6 +286,9 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
279
286
|
const processActions = [];
|
|
280
287
|
let processRuntimeAction;
|
|
281
288
|
for (const action of actions) {
|
|
289
|
+
if (options.verbose) {
|
|
290
|
+
context.logger.info(`[${new Date().toISOString()}] Differential loading file queued: ${action.filename}`);
|
|
291
|
+
}
|
|
282
292
|
// If SRI is enabled always process the runtime bundle
|
|
283
293
|
// Lazy route integrity values are stored in the runtime bundle
|
|
284
294
|
if (action.integrityAlgorithm && action.runtime) {
|
|
@@ -288,109 +298,124 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
288
298
|
processActions.push({ replacements: workerReplacements, ...action });
|
|
289
299
|
}
|
|
290
300
|
}
|
|
291
|
-
const
|
|
301
|
+
const differentialLoadingExecutor = new action_executor_1.BundleActionExecutor({ cachePath: cacheDownlevelPath, i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
|
|
292
302
|
// Execute the bundle processing actions
|
|
293
303
|
try {
|
|
294
304
|
spinner.start('Generating ES5 bundles for differential loading...');
|
|
295
|
-
for await (const result of
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
// Runtime must be processed after all other files
|
|
299
|
-
if (processRuntimeAction) {
|
|
300
|
-
const runtimeOptions = {
|
|
301
|
-
...processRuntimeAction,
|
|
302
|
-
runtimeData: processResults,
|
|
303
|
-
supportedBrowsers: buildBrowserFeatures.supportedBrowsers,
|
|
304
|
-
};
|
|
305
|
-
processResults.push(await Promise.resolve().then(() => __importStar(require('../utils/process-bundle'))).then((m) => m.process(runtimeOptions)));
|
|
306
|
-
}
|
|
307
|
-
spinner.succeed('ES5 bundle generation complete.');
|
|
308
|
-
if (i18n.shouldInline) {
|
|
309
|
-
spinner.start('Generating localized bundles...');
|
|
310
|
-
const inlineActions = [];
|
|
311
|
-
const processedFiles = new Set();
|
|
312
|
-
for (const result of processResults) {
|
|
305
|
+
for await (const result of differentialLoadingExecutor.processAll(processActions)) {
|
|
306
|
+
if (options.verbose) {
|
|
313
307
|
if (result.original) {
|
|
314
|
-
|
|
315
|
-
filename: path.basename(result.original.filename),
|
|
316
|
-
code: fs.readFileSync(result.original.filename, 'utf8'),
|
|
317
|
-
map: result.original.map &&
|
|
318
|
-
fs.readFileSync(result.original.map.filename, 'utf8'),
|
|
319
|
-
outputPath: baseOutputPath,
|
|
320
|
-
es5: false,
|
|
321
|
-
missingTranslation: options.i18nMissingTranslation,
|
|
322
|
-
setLocale: result.name === mainChunkId,
|
|
323
|
-
});
|
|
324
|
-
processedFiles.add(result.original.filename);
|
|
325
|
-
if (result.original.map) {
|
|
326
|
-
processedFiles.add(result.original.map.filename);
|
|
327
|
-
}
|
|
308
|
+
context.logger.info(`[${new Date().toISOString()}] Differential loading file processed: ${result.original.filename}`);
|
|
328
309
|
}
|
|
329
310
|
if (result.downlevel) {
|
|
330
|
-
|
|
331
|
-
filename: path.basename(result.downlevel.filename),
|
|
332
|
-
code: fs.readFileSync(result.downlevel.filename, 'utf8'),
|
|
333
|
-
map: result.downlevel.map &&
|
|
334
|
-
fs.readFileSync(result.downlevel.map.filename, 'utf8'),
|
|
335
|
-
outputPath: baseOutputPath,
|
|
336
|
-
es5: true,
|
|
337
|
-
missingTranslation: options.i18nMissingTranslation,
|
|
338
|
-
setLocale: result.name === mainChunkId,
|
|
339
|
-
});
|
|
340
|
-
processedFiles.add(result.downlevel.filename);
|
|
341
|
-
if (result.downlevel.map) {
|
|
342
|
-
processedFiles.add(result.downlevel.map.filename);
|
|
343
|
-
}
|
|
311
|
+
context.logger.info(`[${new Date().toISOString()}] Differential loading file processed: ${result.downlevel.filename}`);
|
|
344
312
|
}
|
|
345
313
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
314
|
+
processResults.push(result);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
finally {
|
|
318
|
+
differentialLoadingExecutor.stop();
|
|
319
|
+
}
|
|
320
|
+
// Runtime must be processed after all other files
|
|
321
|
+
if (processRuntimeAction) {
|
|
322
|
+
const runtimeOptions = {
|
|
323
|
+
...processRuntimeAction,
|
|
324
|
+
runtimeData: processResults,
|
|
325
|
+
supportedBrowsers: buildBrowserFeatures.supportedBrowsers,
|
|
326
|
+
};
|
|
327
|
+
processResults.push(await Promise.resolve().then(() => __importStar(require('../utils/process-bundle'))).then((m) => m.process(runtimeOptions)));
|
|
328
|
+
}
|
|
329
|
+
if (options.verbose) {
|
|
330
|
+
context.logger.info(`[${new Date().toISOString()}] Differential loading processing complete.`);
|
|
331
|
+
}
|
|
332
|
+
spinner.succeed('ES5 bundle generation complete.');
|
|
333
|
+
if (i18n.shouldInline) {
|
|
334
|
+
spinner.start('Generating localized bundles...');
|
|
335
|
+
const inlineActions = [];
|
|
336
|
+
for (const result of processResults) {
|
|
337
|
+
if (result.original) {
|
|
338
|
+
if (options.verbose) {
|
|
339
|
+
context.logger.info(`[${new Date().toISOString()}] i18n localize file queued: ${result.original.filename}`);
|
|
363
340
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
spinner.fail('Localized bundle generation failed.');
|
|
376
|
-
return { success: false, error: mapErrorToMessage(err) };
|
|
377
|
-
}
|
|
378
|
-
if (hasErrors) {
|
|
379
|
-
spinner.fail('Localized bundle generation failed.');
|
|
341
|
+
inlineActions.push({
|
|
342
|
+
filename: path.basename(result.original.filename),
|
|
343
|
+
// Memory mode is always enabled for i18n
|
|
344
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
345
|
+
code: result.original.content,
|
|
346
|
+
map: (_a = result.original.map) === null || _a === void 0 ? void 0 : _a.content,
|
|
347
|
+
outputPath: baseOutputPath,
|
|
348
|
+
es5: false,
|
|
349
|
+
missingTranslation: options.i18nMissingTranslation,
|
|
350
|
+
setLocale: result.name === mainChunkId,
|
|
351
|
+
});
|
|
380
352
|
}
|
|
381
|
-
|
|
382
|
-
|
|
353
|
+
if (result.downlevel) {
|
|
354
|
+
if (options.verbose) {
|
|
355
|
+
context.logger.info(`[${new Date().toISOString()}] i18n localize file queued: ${result.downlevel.filename}`);
|
|
356
|
+
}
|
|
357
|
+
inlineActions.push({
|
|
358
|
+
filename: path.basename(result.downlevel.filename),
|
|
359
|
+
// Memory mode is always enabled for i18n
|
|
360
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
361
|
+
code: result.downlevel.content,
|
|
362
|
+
map: (_b = result.downlevel.map) === null || _b === void 0 ? void 0 : _b.content,
|
|
363
|
+
outputPath: baseOutputPath,
|
|
364
|
+
es5: true,
|
|
365
|
+
missingTranslation: options.i18nMissingTranslation,
|
|
366
|
+
setLocale: result.name === mainChunkId,
|
|
367
|
+
});
|
|
383
368
|
}
|
|
384
|
-
|
|
385
|
-
|
|
369
|
+
}
|
|
370
|
+
let hasErrors = false;
|
|
371
|
+
const i18nExecutor = new action_executor_1.BundleActionExecutor({ i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
|
|
372
|
+
try {
|
|
373
|
+
let localizedCount = 0;
|
|
374
|
+
for await (const result of i18nExecutor.inlineAll(inlineActions)) {
|
|
375
|
+
localizedCount++;
|
|
376
|
+
if (options.verbose) {
|
|
377
|
+
context.logger.info(`[${new Date().toISOString()}] (${localizedCount}/${inlineActions.length}) Localized "${result.file}" [${result.count} translation(s)].`);
|
|
378
|
+
}
|
|
379
|
+
for (const diagnostic of result.diagnostics) {
|
|
380
|
+
spinner.stop();
|
|
381
|
+
if (diagnostic.type === 'error') {
|
|
382
|
+
hasErrors = true;
|
|
383
|
+
context.logger.error(diagnostic.message);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
context.logger.warn(diagnostic.message);
|
|
387
|
+
}
|
|
388
|
+
spinner.start();
|
|
389
|
+
}
|
|
386
390
|
}
|
|
391
|
+
// Copy any non-processed files into the output locations
|
|
392
|
+
await copy_assets_1.copyAssets([
|
|
393
|
+
{
|
|
394
|
+
glob: '**/*',
|
|
395
|
+
input: webpackOutputPath,
|
|
396
|
+
output: '',
|
|
397
|
+
},
|
|
398
|
+
], Array.from(outputPaths.values()), '');
|
|
399
|
+
}
|
|
400
|
+
catch (err) {
|
|
401
|
+
spinner.fail('Localized bundle generation failed.');
|
|
402
|
+
return { success: false, error: mapErrorToMessage(err) };
|
|
403
|
+
}
|
|
404
|
+
finally {
|
|
405
|
+
i18nExecutor.stop();
|
|
406
|
+
}
|
|
407
|
+
if (hasErrors) {
|
|
408
|
+
spinner.fail('Localized bundle generation failed.');
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
spinner.succeed('Localized bundle generation complete.');
|
|
412
|
+
}
|
|
413
|
+
if (hasErrors) {
|
|
414
|
+
return { success: false };
|
|
387
415
|
}
|
|
388
|
-
}
|
|
389
|
-
finally {
|
|
390
|
-
executor.stop();
|
|
391
416
|
}
|
|
392
417
|
for (const result of processResults) {
|
|
393
|
-
const chunk = (
|
|
418
|
+
const chunk = (_c = webpackStats.chunks) === null || _c === void 0 ? void 0 : _c.find((chunk) => { var _a; return ((_a = chunk.id) === null || _a === void 0 ? void 0 : _a.toString()) === result.name; });
|
|
394
419
|
if (result.original) {
|
|
395
420
|
bundleInfoStats.push(generateBundleInfoStats(result.original, chunk, 'modern'));
|
|
396
421
|
}
|
|
@@ -398,9 +423,9 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
398
423
|
bundleInfoStats.push(generateBundleInfoStats(result.downlevel, chunk, 'legacy'));
|
|
399
424
|
}
|
|
400
425
|
}
|
|
401
|
-
const unprocessedChunks = ((
|
|
426
|
+
const unprocessedChunks = ((_d = webpackStats.chunks) === null || _d === void 0 ? void 0 : _d.filter((chunk) => !processResults.find((result) => { var _a; return ((_a = chunk.id) === null || _a === void 0 ? void 0 : _a.toString()) === result.name; }))) || [];
|
|
402
427
|
for (const chunk of unprocessedChunks) {
|
|
403
|
-
const asset = (
|
|
428
|
+
const asset = (_e = webpackStats.assets) === null || _e === void 0 ? void 0 : _e.find((a) => { var _a; return a.name === ((_a = chunk.files) === null || _a === void 0 ? void 0 : _a[0]); });
|
|
404
429
|
bundleInfoStats.push(stats_1.generateBundleStats({ ...chunk, size: asset === null || asset === void 0 ? void 0 : asset.size }));
|
|
405
430
|
}
|
|
406
431
|
}
|
|
@@ -421,10 +446,10 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
421
446
|
for (const { severity, message } of budgetFailures) {
|
|
422
447
|
switch (severity) {
|
|
423
448
|
case bundle_calculator_1.ThresholdSeverity.Warning:
|
|
424
|
-
(
|
|
449
|
+
(_f = webpackStats.warnings) === null || _f === void 0 ? void 0 : _f.push({ message });
|
|
425
450
|
break;
|
|
426
451
|
case bundle_calculator_1.ThresholdSeverity.Error:
|
|
427
|
-
(
|
|
452
|
+
(_g = webpackStats.errors) === null || _g === void 0 ? void 0 : _g.push({ message });
|
|
428
453
|
break;
|
|
429
454
|
default:
|
|
430
455
|
assertNever(severity);
|
|
@@ -434,7 +459,7 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
434
459
|
const buildSuccess = success && !stats_1.statsHasErrors(webpackStats);
|
|
435
460
|
if (buildSuccess) {
|
|
436
461
|
// Copy assets
|
|
437
|
-
if (!options.watch && ((
|
|
462
|
+
if (!options.watch && ((_h = options.assets) === null || _h === void 0 ? void 0 : _h.length)) {
|
|
438
463
|
spinner.start('Copying assets...');
|
|
439
464
|
try {
|
|
440
465
|
await copy_assets_1.copyAssets(utils_1.normalizeAssetPatterns(options.assets, root, core_1.normalize(projectRoot), projectSourceRoot === undefined ? undefined : core_1.normalize(projectSourceRoot)), Array.from(outputPaths.values()), context.workspaceRoot);
|
|
@@ -449,8 +474,8 @@ function buildWebpackBrowser(options, context, transforms = {}) {
|
|
|
449
474
|
spinner.start('Generating index html...');
|
|
450
475
|
const WOFFSupportNeeded = !buildBrowserFeatures.isFeatureSupported('woff2');
|
|
451
476
|
const entrypoints = package_chunk_sort_1.generateEntryPoints({
|
|
452
|
-
scripts: (
|
|
453
|
-
styles: (
|
|
477
|
+
scripts: (_j = options.scripts) !== null && _j !== void 0 ? _j : [],
|
|
478
|
+
styles: (_k = options.styles) !== null && _k !== void 0 ? _k : [],
|
|
454
479
|
});
|
|
455
480
|
const indexHtmlGenerator = new index_html_generator_1.IndexHtmlGenerator({
|
|
456
481
|
indexPath: path.join(context.workspaceRoot, webpack_browser_config_1.getIndexInputFile(options.index)),
|
package/src/dev-server/index.js
CHANGED
|
@@ -274,6 +274,9 @@ function serveWebpackBrowser(options, context, transforms = {}) {
|
|
|
274
274
|
if (buildEvent.success) {
|
|
275
275
|
logger.info(`\n${color_1.colors.greenBright(color_1.colors.symbols.check)} Compiled successfully.`);
|
|
276
276
|
}
|
|
277
|
+
else {
|
|
278
|
+
logger.info(`\n${color_1.colors.redBright(color_1.colors.symbols.cross)} Failed to compile.`);
|
|
279
|
+
}
|
|
277
280
|
return { ...buildEvent, baseUrl: serverAddress };
|
|
278
281
|
}));
|
|
279
282
|
}));
|
|
@@ -62,13 +62,12 @@ class BundleActionExecutor {
|
|
|
62
62
|
const executions = new Map();
|
|
63
63
|
for (const action of actions) {
|
|
64
64
|
const execution = executor(action);
|
|
65
|
-
executions.set(execution, execution.then((result) =>
|
|
66
|
-
executions.delete(execution);
|
|
67
|
-
return result;
|
|
68
|
-
}));
|
|
65
|
+
executions.set(execution, execution.then((result) => [execution, result]));
|
|
69
66
|
}
|
|
70
67
|
while (executions.size > 0) {
|
|
71
|
-
|
|
68
|
+
const [execution, result] = await Promise.race(executions.values());
|
|
69
|
+
executions.delete(execution);
|
|
70
|
+
yield result;
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
73
|
stop() {
|
|
@@ -24,6 +24,7 @@ export interface ProcessBundleOptions {
|
|
|
24
24
|
runtimeData?: ProcessBundleResult[];
|
|
25
25
|
replacements?: [string, string][];
|
|
26
26
|
supportedBrowsers?: string[] | Record<string, string>;
|
|
27
|
+
memoryMode?: boolean;
|
|
27
28
|
}
|
|
28
29
|
export interface ProcessBundleResult {
|
|
29
30
|
name: string;
|
|
@@ -35,9 +36,11 @@ export interface ProcessBundleFile {
|
|
|
35
36
|
filename: string;
|
|
36
37
|
size: number;
|
|
37
38
|
integrity?: string;
|
|
39
|
+
content?: string;
|
|
38
40
|
map?: {
|
|
39
41
|
filename: string;
|
|
40
42
|
size: number;
|
|
43
|
+
content?: string;
|
|
41
44
|
};
|
|
42
45
|
}
|
|
43
46
|
export declare const enum CacheKey {
|
|
@@ -134,7 +134,7 @@ async function process(options) {
|
|
|
134
134
|
}
|
|
135
135
|
exports.process = process;
|
|
136
136
|
async function processBundle(options) {
|
|
137
|
-
const { optimize, isOriginal, code, map, downlevelMap, filename: filepath, hiddenSourceMaps, cacheKeys = [], integrityAlgorithm, } = options;
|
|
137
|
+
const { optimize, isOriginal, code, map, downlevelMap, filename: filepath, hiddenSourceMaps, cacheKeys = [], integrityAlgorithm, memoryMode, } = options;
|
|
138
138
|
const filename = path.basename(filepath);
|
|
139
139
|
let resultCode = code;
|
|
140
140
|
let optimizeResult;
|
|
@@ -168,11 +168,15 @@ async function processBundle(options) {
|
|
|
168
168
|
mapContent = map;
|
|
169
169
|
}
|
|
170
170
|
await cachePut(mapContent, cacheKeys[isOriginal ? 1 /* OriginalMap */ : 3 /* DownlevelMap */]);
|
|
171
|
-
|
|
171
|
+
if (!memoryMode) {
|
|
172
|
+
fs.writeFileSync(filepath + '.map', mapContent);
|
|
173
|
+
}
|
|
172
174
|
}
|
|
173
|
-
const fileResult = createFileEntry(filepath, resultCode, mapContent, integrityAlgorithm);
|
|
175
|
+
const fileResult = createFileEntry(filepath, resultCode, mapContent, memoryMode, integrityAlgorithm);
|
|
174
176
|
await cachePut(resultCode, cacheKeys[isOriginal ? 0 /* OriginalCode */ : 2 /* DownlevelCode */], fileResult.integrity);
|
|
175
|
-
|
|
177
|
+
if (!memoryMode) {
|
|
178
|
+
fs.writeFileSync(filepath, resultCode);
|
|
179
|
+
}
|
|
176
180
|
return fileResult;
|
|
177
181
|
}
|
|
178
182
|
async function terserMangle(code, options = {}) {
|
|
@@ -200,16 +204,18 @@ async function terserMangle(code, options = {}) {
|
|
|
200
204
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
201
205
|
return { code: minifyOutput.code, map: minifyOutput.map };
|
|
202
206
|
}
|
|
203
|
-
function createFileEntry(filename, code, map, integrityAlgorithm) {
|
|
207
|
+
function createFileEntry(filename, code, map, memoryMode, integrityAlgorithm) {
|
|
204
208
|
return {
|
|
205
209
|
filename: filename,
|
|
206
210
|
size: Buffer.byteLength(code),
|
|
207
211
|
integrity: integrityAlgorithm && generateIntegrityValue(integrityAlgorithm, code),
|
|
212
|
+
content: memoryMode ? code : undefined,
|
|
208
213
|
map: !map
|
|
209
214
|
? undefined
|
|
210
215
|
: {
|
|
211
216
|
filename: filename + '.map',
|
|
212
217
|
size: Buffer.byteLength(map),
|
|
218
|
+
content: memoryMode ? map : undefined,
|
|
213
219
|
},
|
|
214
220
|
};
|
|
215
221
|
}
|
|
@@ -61,6 +61,7 @@ function getTestConfig(wco) {
|
|
|
61
61
|
target: wco.tsConfig.options.target === typescript_1.ScriptTarget.ES5 ? ['web', 'es5'] : 'web',
|
|
62
62
|
resolve: {
|
|
63
63
|
mainFields: ['es2015', 'browser', 'module', 'main'],
|
|
64
|
+
conditionNames: ['es2015', '...'],
|
|
64
65
|
},
|
|
65
66
|
devtool: false,
|
|
66
67
|
entry: {
|