@angular-devkit/build-angular 12.2.11 → 12.2.12

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 CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@angular-devkit/build-angular",
3
- "version": "12.2.11",
3
+ "version": "12.2.12",
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",
11
- "@angular-devkit/build-optimizer": "0.1202.11",
12
- "@angular-devkit/build-webpack": "0.1202.11",
13
- "@angular-devkit/core": "12.2.11",
10
+ "@angular-devkit/architect": "0.1202.12",
11
+ "@angular-devkit/build-optimizer": "0.1202.12",
12
+ "@angular-devkit/build-webpack": "0.1202.12",
13
+ "@angular-devkit/core": "12.2.12",
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.11",
25
+ "@ngtools/webpack": "12.2.12",
26
26
  "ansi-colors": "4.1.1",
27
27
  "babel-loader": "8.2.2",
28
28
  "browserslist": "^4.9.1",
@@ -31,7 +31,7 @@
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.11",
34
+ "critters": "0.0.12",
35
35
  "css-loader": "6.2.0",
36
36
  "css-minimizer-webpack-plugin": "3.0.2",
37
37
  "esbuild-wasm": "0.13.8",
@@ -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) {
@@ -312,39 +319,32 @@ function buildWebpackBrowser(options, context, transforms = {}) {
312
319
  if (i18n.shouldInline) {
313
320
  spinner.start('Generating localized bundles...');
314
321
  const inlineActions = [];
315
- const processedFiles = new Set();
316
322
  for (const result of processResults) {
317
323
  if (result.original) {
318
324
  inlineActions.push({
319
325
  filename: path.basename(result.original.filename),
320
- code: fs.readFileSync(result.original.filename, 'utf8'),
321
- map: result.original.map &&
322
- fs.readFileSync(result.original.map.filename, 'utf8'),
326
+ // Memory mode is always enabled for i18n
327
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
328
+ code: result.original.content,
329
+ map: (_a = result.original.map) === null || _a === void 0 ? void 0 : _a.content,
323
330
  outputPath: baseOutputPath,
324
331
  es5: false,
325
332
  missingTranslation: options.i18nMissingTranslation,
326
333
  setLocale: result.name === mainChunkId,
327
334
  });
328
- processedFiles.add(result.original.filename);
329
- if (result.original.map) {
330
- processedFiles.add(result.original.map.filename);
331
- }
332
335
  }
333
336
  if (result.downlevel) {
334
337
  inlineActions.push({
335
338
  filename: path.basename(result.downlevel.filename),
336
- code: fs.readFileSync(result.downlevel.filename, 'utf8'),
337
- map: result.downlevel.map &&
338
- fs.readFileSync(result.downlevel.map.filename, 'utf8'),
339
+ // Memory mode is always enabled for i18n
340
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
341
+ code: result.downlevel.content,
342
+ map: (_b = result.downlevel.map) === null || _b === void 0 ? void 0 : _b.content,
339
343
  outputPath: baseOutputPath,
340
344
  es5: true,
341
345
  missingTranslation: options.i18nMissingTranslation,
342
346
  setLocale: result.name === mainChunkId,
343
347
  });
344
- processedFiles.add(result.downlevel.filename);
345
- if (result.downlevel.map) {
346
- processedFiles.add(result.downlevel.map.filename);
347
- }
348
348
  }
349
349
  }
350
350
  let hasErrors = false;
@@ -372,7 +372,6 @@ function buildWebpackBrowser(options, context, transforms = {}) {
372
372
  glob: '**/*',
373
373
  input: webpackOutputPath,
374
374
  output: '',
375
- ignore: [...processedFiles].map((f) => path.relative(webpackOutputPath, f)),
376
375
  },
377
376
  ], Array.from(outputPaths.values()), '');
378
377
  }
@@ -394,7 +393,7 @@ function buildWebpackBrowser(options, context, transforms = {}) {
394
393
  }
395
394
  }
396
395
  for (const result of processResults) {
397
- const chunk = (_a = webpackStats.chunks) === null || _a === void 0 ? void 0 : _a.find((chunk) => { var _a; return ((_a = chunk.id) === null || _a === void 0 ? void 0 : _a.toString()) === result.name; });
396
+ 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; });
398
397
  if (result.original) {
399
398
  bundleInfoStats.push(generateBundleInfoStats(result.original, chunk, 'modern'));
400
399
  }
@@ -402,9 +401,9 @@ function buildWebpackBrowser(options, context, transforms = {}) {
402
401
  bundleInfoStats.push(generateBundleInfoStats(result.downlevel, chunk, 'legacy'));
403
402
  }
404
403
  }
405
- const unprocessedChunks = ((_b = webpackStats.chunks) === null || _b === void 0 ? void 0 : _b.filter((chunk) => !processResults.find((result) => { var _a; return ((_a = chunk.id) === null || _a === void 0 ? void 0 : _a.toString()) === result.name; }))) || [];
404
+ 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; }))) || [];
406
405
  for (const chunk of unprocessedChunks) {
407
- const asset = (_c = webpackStats.assets) === null || _c === void 0 ? void 0 : _c.find((a) => { var _a; return a.name === ((_a = chunk.files) === null || _a === void 0 ? void 0 : _a[0]); });
406
+ 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]); });
408
407
  bundleInfoStats.push(stats_1.generateBundleStats({ ...chunk, size: asset === null || asset === void 0 ? void 0 : asset.size }));
409
408
  }
410
409
  }
@@ -425,10 +424,10 @@ function buildWebpackBrowser(options, context, transforms = {}) {
425
424
  for (const { severity, message } of budgetFailures) {
426
425
  switch (severity) {
427
426
  case bundle_calculator_1.ThresholdSeverity.Warning:
428
- (_d = webpackStats.warnings) === null || _d === void 0 ? void 0 : _d.push({ message });
427
+ (_f = webpackStats.warnings) === null || _f === void 0 ? void 0 : _f.push({ message });
429
428
  break;
430
429
  case bundle_calculator_1.ThresholdSeverity.Error:
431
- (_e = webpackStats.errors) === null || _e === void 0 ? void 0 : _e.push({ message });
430
+ (_g = webpackStats.errors) === null || _g === void 0 ? void 0 : _g.push({ message });
432
431
  break;
433
432
  default:
434
433
  assertNever(severity);
@@ -438,7 +437,7 @@ function buildWebpackBrowser(options, context, transforms = {}) {
438
437
  const buildSuccess = success && !stats_1.statsHasErrors(webpackStats);
439
438
  if (buildSuccess) {
440
439
  // Copy assets
441
- if (!options.watch && ((_f = options.assets) === null || _f === void 0 ? void 0 : _f.length)) {
440
+ if (!options.watch && ((_h = options.assets) === null || _h === void 0 ? void 0 : _h.length)) {
442
441
  spinner.start('Copying assets...');
443
442
  try {
444
443
  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);
@@ -453,8 +452,8 @@ function buildWebpackBrowser(options, context, transforms = {}) {
453
452
  spinner.start('Generating index html...');
454
453
  const WOFFSupportNeeded = !buildBrowserFeatures.isFeatureSupported('woff2');
455
454
  const entrypoints = package_chunk_sort_1.generateEntryPoints({
456
- scripts: (_g = options.scripts) !== null && _g !== void 0 ? _g : [],
457
- styles: (_h = options.styles) !== null && _h !== void 0 ? _h : [],
455
+ scripts: (_j = options.scripts) !== null && _j !== void 0 ? _j : [],
456
+ styles: (_k = options.styles) !== null && _k !== void 0 ? _k : [],
458
457
  });
459
458
  const indexHtmlGenerator = new index_html_generator_1.IndexHtmlGenerator({
460
459
  indexPath: path.join(context.workspaceRoot, webpack_browser_config_1.getIndexInputFile(options.index)),
@@ -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
- yield Promise.race(executions.values());
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
- fs.writeFileSync(filepath + '.map', mapContent);
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
- fs.writeFileSync(filepath, resultCode);
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
  }