@angular-devkit/build-angular 12.2.7 → 12.2.11

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.7",
3
+ "version": "12.2.11",
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.7",
11
- "@angular-devkit/build-optimizer": "0.1202.7",
12
- "@angular-devkit/build-webpack": "0.1202.7",
13
- "@angular-devkit/core": "12.2.7",
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",
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.7",
25
+ "@ngtools/webpack": "12.2.11",
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.10",
34
+ "critters": "0.0.11",
35
35
  "css-loader": "6.2.0",
36
36
  "css-minimizer-webpack-plugin": "3.0.2",
37
- "esbuild-wasm": "0.12.29",
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.1",
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.12.29"
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
  }
@@ -68,9 +68,15 @@ function default_1() {
68
68
  if (!enumCallee.isFunctionExpression() || enumCallee.node.params.length !== 1) {
69
69
  return;
70
70
  }
71
+ const enumCalleeParam = enumCallee.node.params[0];
72
+ const isEnumCalleeMatching = core_1.types.isIdentifier(enumCalleeParam) && enumCalleeParam.name === declarationId.name;
71
73
  // Loose mode rewrites the enum to a shorter but less TypeScript-like form
74
+ // Note: We only can apply the `loose` mode transformation if the callee parameter matches
75
+ // with the declaration identifier name. This is necessary in case the the declaration id has
76
+ // been renamed to avoid collisions, as the loose transform would then break the enum assignments
77
+ // which rely on the differently-named callee identifier name.
72
78
  let enumAssignments;
73
- if (loose) {
79
+ if (loose && isEnumCalleeMatching) {
74
80
  enumAssignments = [];
75
81
  }
76
82
  // Check if all enum member values are pure.
@@ -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
- // Workaround for https://github.com/babel/babel-loader/pull/896 is available
122
- // Delete once the above PR is released
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: configuration.options.inputSourceMap || false,
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
  });
@@ -288,106 +288,110 @@ function buildWebpackBrowser(options, context, transforms = {}) {
288
288
  processActions.push({ replacements: workerReplacements, ...action });
289
289
  }
290
290
  }
291
- const executor = new action_executor_1.BundleActionExecutor({ cachePath: cacheDownlevelPath, i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
291
+ const differentialLoadingExecutor = new action_executor_1.BundleActionExecutor({ cachePath: cacheDownlevelPath, i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
292
292
  // Execute the bundle processing actions
293
293
  try {
294
294
  spinner.start('Generating ES5 bundles for differential loading...');
295
- for await (const result of executor.processAll(processActions)) {
295
+ for await (const result of differentialLoadingExecutor.processAll(processActions)) {
296
296
  processResults.push(result);
297
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) {
313
- if (result.original) {
314
- inlineActions.push({
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
- }
298
+ }
299
+ finally {
300
+ differentialLoadingExecutor.stop();
301
+ }
302
+ // Runtime must be processed after all other files
303
+ if (processRuntimeAction) {
304
+ const runtimeOptions = {
305
+ ...processRuntimeAction,
306
+ runtimeData: processResults,
307
+ supportedBrowsers: buildBrowserFeatures.supportedBrowsers,
308
+ };
309
+ processResults.push(await Promise.resolve().then(() => __importStar(require('../utils/process-bundle'))).then((m) => m.process(runtimeOptions)));
310
+ }
311
+ spinner.succeed('ES5 bundle generation complete.');
312
+ if (i18n.shouldInline) {
313
+ spinner.start('Generating localized bundles...');
314
+ const inlineActions = [];
315
+ const processedFiles = new Set();
316
+ for (const result of processResults) {
317
+ if (result.original) {
318
+ inlineActions.push({
319
+ 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'),
323
+ outputPath: baseOutputPath,
324
+ es5: false,
325
+ missingTranslation: options.i18nMissingTranslation,
326
+ setLocale: result.name === mainChunkId,
327
+ });
328
+ processedFiles.add(result.original.filename);
329
+ if (result.original.map) {
330
+ processedFiles.add(result.original.map.filename);
328
331
  }
329
- if (result.downlevel) {
330
- inlineActions.push({
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
- }
332
+ }
333
+ if (result.downlevel) {
334
+ inlineActions.push({
335
+ 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
+ outputPath: baseOutputPath,
340
+ es5: true,
341
+ missingTranslation: options.i18nMissingTranslation,
342
+ setLocale: result.name === mainChunkId,
343
+ });
344
+ processedFiles.add(result.downlevel.filename);
345
+ if (result.downlevel.map) {
346
+ processedFiles.add(result.downlevel.map.filename);
344
347
  }
345
348
  }
346
- let hasErrors = false;
347
- try {
348
- for await (const result of executor.inlineAll(inlineActions)) {
349
- if (options.verbose) {
350
- context.logger.info(`Localized "${result.file}" [${result.count} translation(s)].`);
349
+ }
350
+ let hasErrors = false;
351
+ const i18nExecutor = new action_executor_1.BundleActionExecutor({ i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
352
+ try {
353
+ for await (const result of i18nExecutor.inlineAll(inlineActions)) {
354
+ if (options.verbose) {
355
+ context.logger.info(`Localized "${result.file}" [${result.count} translation(s)].`);
356
+ }
357
+ for (const diagnostic of result.diagnostics) {
358
+ spinner.stop();
359
+ if (diagnostic.type === 'error') {
360
+ hasErrors = true;
361
+ context.logger.error(diagnostic.message);
351
362
  }
352
- for (const diagnostic of result.diagnostics) {
353
- spinner.stop();
354
- if (diagnostic.type === 'error') {
355
- hasErrors = true;
356
- context.logger.error(diagnostic.message);
357
- }
358
- else {
359
- context.logger.warn(diagnostic.message);
360
- }
361
- spinner.start();
363
+ else {
364
+ context.logger.warn(diagnostic.message);
362
365
  }
366
+ spinner.start();
363
367
  }
364
- // Copy any non-processed files into the output locations
365
- await copy_assets_1.copyAssets([
366
- {
367
- glob: '**/*',
368
- input: webpackOutputPath,
369
- output: '',
370
- ignore: [...processedFiles].map((f) => path.relative(webpackOutputPath, f)),
371
- },
372
- ], Array.from(outputPaths.values()), '');
373
- }
374
- catch (err) {
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.');
380
- }
381
- else {
382
- spinner.succeed('Localized bundle generation complete.');
383
- }
384
- if (hasErrors) {
385
- return { success: false };
386
368
  }
369
+ // Copy any non-processed files into the output locations
370
+ await copy_assets_1.copyAssets([
371
+ {
372
+ glob: '**/*',
373
+ input: webpackOutputPath,
374
+ output: '',
375
+ ignore: [...processedFiles].map((f) => path.relative(webpackOutputPath, f)),
376
+ },
377
+ ], Array.from(outputPaths.values()), '');
378
+ }
379
+ catch (err) {
380
+ spinner.fail('Localized bundle generation failed.');
381
+ return { success: false, error: mapErrorToMessage(err) };
382
+ }
383
+ finally {
384
+ i18nExecutor.stop();
385
+ }
386
+ if (hasErrors) {
387
+ spinner.fail('Localized bundle generation failed.');
388
+ }
389
+ else {
390
+ spinner.succeed('Localized bundle generation complete.');
391
+ }
392
+ if (hasErrors) {
393
+ return { success: false };
387
394
  }
388
- }
389
- finally {
390
- executor.stop();
391
395
  }
392
396
  for (const result of processResults) {
393
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; });
@@ -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
  }));
@@ -37,6 +37,7 @@ function getBrowserConfig(wco) {
37
37
  devtool: false,
38
38
  resolve: {
39
39
  mainFields: ['es2015', 'browser', 'module', 'main'],
40
+ conditionNames: ['es2015', '...'],
40
41
  },
41
42
  output: {
42
43
  crossOriginLoading,
@@ -386,7 +386,7 @@ function getCommonConfig(wco) {
386
386
  test: /\.[cm]?js$|\.tsx?$/,
387
387
  // The below is needed due to a bug in `@babel/runtime`. See: https://github.com/babel/babel/issues/12824
388
388
  resolve: { fullySpecified: false },
389
- exclude: [/[\/\\](?:core-js|\@babel|tslib|web-animations-js)[\/\\]/],
389
+ exclude: [/[/\\](?:core-js|@babel|tslib|web-animations-js|web-streams-polyfill)[/\\]/],
390
390
  use: [
391
391
  {
392
392
  loader: require.resolve('../../babel/webpack-loader'),
@@ -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: {