@angular-devkit/build-angular 12.2.10 → 12.2.14

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.10",
3
+ "version": "12.2.14",
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.10",
11
- "@angular-devkit/build-optimizer": "0.1202.10",
12
- "@angular-devkit/build-webpack": "0.1202.10",
13
- "@angular-devkit/core": "12.2.10",
10
+ "@angular-devkit/architect": "0.1202.14",
11
+ "@angular-devkit/build-optimizer": "0.1202.14",
12
+ "@angular-devkit/build-webpack": "0.1202.14",
13
+ "@angular-devkit/core": "12.2.14",
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.10",
25
+ "@ngtools/webpack": "12.2.14",
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.12",
35
35
  "css-loader": "6.2.0",
36
36
  "css-minimizer-webpack-plugin": "3.0.2",
37
- "esbuild-wasm": "0.13.4",
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.13.4"
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",
@@ -157,7 +157,13 @@ exports.default = babel_loader_1.custom(() => {
157
157
  // `@ampproject/remapping` source map objects but both are compatible with Webpack.
158
158
  // This method for merging is used because it provides more accurate output
159
159
  // and is faster while using less memory.
160
- result.map = remapping_1.default([result.map, inputSourceMap], () => null);
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
+ };
161
167
  }
162
168
  return result;
163
169
  },
@@ -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 executor = new action_executor_1.BundleActionExecutor({ cachePath: cacheDownlevelPath, i18n }, options.subresourceIntegrity ? 'sha384' : undefined);
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 executor.processAll(processActions)) {
296
- processResults.push(result);
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
- 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
- }
308
+ context.logger.info(`[${new Date().toISOString()}] Differential loading file processed: ${result.original.filename}`);
328
309
  }
329
310
  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
- }
311
+ context.logger.info(`[${new Date().toISOString()}] Differential loading file processed: ${result.downlevel.filename}`);
344
312
  }
345
313
  }
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)].`);
351
- }
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();
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
- // 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.');
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
- else {
382
- spinner.succeed('Localized bundle generation complete.');
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
- if (hasErrors) {
385
- return { success: false };
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 = (_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; });
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 = ((_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; }))) || [];
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 = (_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]); });
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
- (_d = webpackStats.warnings) === null || _d === void 0 ? void 0 : _d.push({ message });
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
- (_e = webpackStats.errors) === null || _e === void 0 ? void 0 : _e.push({ message });
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 && ((_f = options.assets) === null || _f === void 0 ? void 0 : _f.length)) {
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: (_g = options.scripts) !== null && _g !== void 0 ? _g : [],
453
- styles: (_h = options.styles) !== null && _h !== void 0 ? _h : [],
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)),
@@ -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
- 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
  }