webpack 5.102.0 → 5.103.0

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.
Files changed (146) hide show
  1. package/README.md +121 -134
  2. package/lib/ChunkGraph.js +2 -2
  3. package/lib/CodeGenerationResults.js +1 -1
  4. package/lib/CompatibilityPlugin.js +25 -2
  5. package/lib/Compilation.js +30 -13
  6. package/lib/ConcatenationScope.js +0 -15
  7. package/lib/ContextModule.js +3 -1
  8. package/lib/CssModule.js +6 -1
  9. package/lib/DefinePlugin.js +12 -12
  10. package/lib/Dependency.js +8 -1
  11. package/lib/DependencyTemplate.js +1 -0
  12. package/lib/DependencyTemplates.js +1 -1
  13. package/lib/DotenvPlugin.js +457 -0
  14. package/lib/EnvironmentPlugin.js +19 -16
  15. package/lib/EvalSourceMapDevToolPlugin.js +16 -0
  16. package/lib/ExportsInfo.js +6 -2
  17. package/lib/ExternalModule.js +20 -28
  18. package/lib/ExternalModuleFactoryPlugin.js +10 -8
  19. package/lib/ExternalsPlugin.js +2 -1
  20. package/lib/FileSystemInfo.js +9 -12
  21. package/lib/ManifestPlugin.js +235 -0
  22. package/lib/Module.js +3 -0
  23. package/lib/ModuleFilenameHelpers.js +1 -1
  24. package/lib/ModuleGraph.js +2 -1
  25. package/lib/ModuleSourceTypesConstants.js +0 -6
  26. package/lib/MultiCompiler.js +1 -1
  27. package/lib/NodeStuffPlugin.js +419 -121
  28. package/lib/NormalModule.js +18 -17
  29. package/lib/NormalModuleFactory.js +75 -4
  30. package/lib/RuntimeGlobals.js +22 -4
  31. package/lib/RuntimePlugin.js +27 -6
  32. package/lib/RuntimeTemplate.js +125 -57
  33. package/lib/SourceMapDevToolPlugin.js +26 -8
  34. package/lib/WebpackOptionsApply.js +33 -9
  35. package/lib/asset/AssetBytesGenerator.js +2 -1
  36. package/lib/asset/AssetGenerator.js +3 -5
  37. package/lib/asset/AssetSourceGenerator.js +1 -1
  38. package/lib/cache/getLazyHashedEtag.js +1 -1
  39. package/lib/config/browserslistTargetHandler.js +82 -76
  40. package/lib/config/defaults.js +105 -20
  41. package/lib/config/normalization.js +2 -1
  42. package/lib/config/target.js +7 -1
  43. package/lib/css/CssGenerator.js +283 -57
  44. package/lib/css/CssLoadingRuntimeModule.js +2 -0
  45. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  46. package/lib/css/CssModulesPlugin.js +86 -40
  47. package/lib/css/CssParser.js +1174 -667
  48. package/lib/css/walkCssTokens.js +98 -1
  49. package/lib/dependencies/CommonJsImportsParserPlugin.js +0 -9
  50. package/lib/dependencies/CommonJsPlugin.js +12 -0
  51. package/lib/dependencies/ContextElementDependency.js +2 -2
  52. package/lib/dependencies/CssIcssExportDependency.js +247 -8
  53. package/lib/dependencies/CssIcssFromIdentifierDependency.js +124 -0
  54. package/lib/dependencies/CssIcssGlobalIdentifierDependency.js +48 -0
  55. package/lib/dependencies/CssIcssImportDependency.js +60 -54
  56. package/lib/dependencies/CssIcssLocalIdentifierDependency.js +61 -0
  57. package/lib/dependencies/{CssSelfLocalIdentifierDependency.js → CssIcssSelfLocalIdentifierDependency.js} +88 -10
  58. package/lib/dependencies/CssIcssSymbolDependency.js +31 -29
  59. package/lib/dependencies/CssImportDependency.js +15 -5
  60. package/lib/dependencies/ExternalModuleInitFragment.js +1 -1
  61. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +95 -0
  62. package/lib/dependencies/HarmonyAcceptDependency.js +6 -1
  63. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -1
  64. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -1
  65. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +32 -21
  66. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +12 -8
  67. package/lib/dependencies/HarmonyImportDependency.js +27 -28
  68. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +28 -69
  69. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -3
  70. package/lib/dependencies/HarmonyImportSpecifierDependency.js +10 -8
  71. package/lib/dependencies/ImportContextDependency.js +13 -0
  72. package/lib/dependencies/ImportDependency.js +10 -4
  73. package/lib/dependencies/ImportEagerDependency.js +6 -3
  74. package/lib/dependencies/ImportMetaPlugin.js +98 -10
  75. package/lib/dependencies/ImportParserPlugin.js +19 -21
  76. package/lib/dependencies/ImportPhase.js +121 -0
  77. package/lib/dependencies/ImportWeakDependency.js +6 -3
  78. package/lib/dependencies/ModuleDependency.js +5 -1
  79. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  80. package/lib/dependencies/WorkerPlugin.js +1 -3
  81. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -8
  82. package/lib/hmr/LazyCompilationPlugin.js +1 -0
  83. package/lib/ids/HashedModuleIdsPlugin.js +5 -7
  84. package/lib/ids/IdHelpers.js +5 -2
  85. package/lib/index.js +6 -0
  86. package/lib/javascript/ChunkHelpers.js +16 -5
  87. package/lib/javascript/JavascriptGenerator.js +101 -101
  88. package/lib/javascript/JavascriptModulesPlugin.js +25 -16
  89. package/lib/javascript/JavascriptParser.js +143 -39
  90. package/lib/json/JsonParser.js +7 -1
  91. package/lib/library/ModuleLibraryPlugin.js +0 -10
  92. package/lib/library/SystemLibraryPlugin.js +19 -5
  93. package/lib/library/UmdLibraryPlugin.js +1 -1
  94. package/lib/node/NodeTargetPlugin.js +9 -1
  95. package/lib/node/ReadFileCompileWasmPlugin.js +0 -2
  96. package/lib/optimize/ConcatenatedModule.js +161 -135
  97. package/lib/optimize/RealContentHashPlugin.js +5 -3
  98. package/lib/runtime/AsyncModuleRuntimeModule.js +28 -18
  99. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  100. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +89 -55
  101. package/lib/serialization/FileMiddleware.js +1 -1
  102. package/lib/serialization/ObjectMiddleware.js +1 -1
  103. package/lib/stats/DefaultStatsFactoryPlugin.js +1 -1
  104. package/lib/util/Hash.js +35 -5
  105. package/lib/util/comparators.js +4 -3
  106. package/lib/util/create-schema-validation.js +1 -1
  107. package/lib/util/createHash.js +85 -15
  108. package/lib/util/hash/BatchedHash.js +47 -8
  109. package/lib/util/hash/wasm-hash.js +53 -13
  110. package/lib/util/internalSerializables.js +4 -4
  111. package/lib/util/jsonParseEvenBetterErrors.js +10 -0
  112. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -4
  113. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +8 -5
  114. package/lib/wasm-async/AsyncWebAssemblyParser.js +0 -9
  115. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +8 -4
  116. package/lib/wasm-sync/WebAssemblyParser.js +0 -9
  117. package/lib/web/FetchCompileWasmPlugin.js +0 -2
  118. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
  119. package/lib/webpack.js +85 -82
  120. package/module.d.ts +5 -0
  121. package/package.json +28 -26
  122. package/schemas/WebpackOptions.check.js +1 -1
  123. package/schemas/WebpackOptions.json +110 -15
  124. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +1 -1
  125. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  126. package/schemas/plugins/ManifestPlugin.json +98 -0
  127. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  128. package/schemas/plugins/SourceMapDevToolPlugin.json +16 -3
  129. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  130. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  131. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  132. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  133. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  134. package/schemas/plugins/css/CssAutoParserOptions.check.js +1 -1
  135. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +1 -1
  136. package/schemas/plugins/css/CssGlobalParserOptions.check.js +1 -1
  137. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
  138. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  139. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  140. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  141. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  142. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  143. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -1
  144. package/types.d.ts +788 -127
  145. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -252
  146. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
@@ -29,11 +29,13 @@ const SelfModuleFactory = require("../SelfModuleFactory");
29
29
  const Template = require("../Template");
30
30
  const WebpackError = require("../WebpackError");
31
31
  const CssIcssExportDependency = require("../dependencies/CssIcssExportDependency");
32
+ const CssIcssFromIdentifierDependency = require("../dependencies/CssIcssFromIdentifierDependency");
33
+ const CssIcssGlobalIdentifierDependency = require("../dependencies/CssIcssGlobalIdentifierDependency");
32
34
  const CssIcssImportDependency = require("../dependencies/CssIcssImportDependency");
35
+ const CssIcssLocalIdentifierDependency = require("../dependencies/CssIcssLocalIdentifierDependency");
36
+ const CssIcssSelfLocalIdentifierDependency = require("../dependencies/CssIcssSelfLocalIdentifierDependency");
33
37
  const CssIcssSymbolDependency = require("../dependencies/CssIcssSymbolDependency");
34
38
  const CssImportDependency = require("../dependencies/CssImportDependency");
35
- const CssLocalIdentifierDependency = require("../dependencies/CssLocalIdentifierDependency");
36
- const CssSelfLocalIdentifierDependency = require("../dependencies/CssSelfLocalIdentifierDependency");
37
39
  const CssUrlDependency = require("../dependencies/CssUrlDependency");
38
40
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
39
41
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
@@ -45,6 +47,7 @@ const memoize = require("../util/memoize");
45
47
  const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
46
48
  const removeBOM = require("../util/removeBOM");
47
49
  const CssGenerator = require("./CssGenerator");
50
+ const CssMergeStyleSheetsRuntimeModule = require("./CssMergeStyleSheetsRuntimeModule");
48
51
  const CssParser = require("./CssParser");
49
52
 
50
53
  /** @typedef {import("webpack-sources").Source} Source */
@@ -62,6 +65,7 @@ const CssParser = require("./CssParser");
62
65
  /** @typedef {import("../Template").RuntimeTemplate} RuntimeTemplate */
63
66
  /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
64
67
  /** @typedef {import("../util/Hash")} Hash */
68
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
65
69
 
66
70
  /**
67
71
  * @typedef {object} RenderContext
@@ -76,11 +80,13 @@ const CssParser = require("./CssParser");
76
80
 
77
81
  /**
78
82
  * @typedef {object} ChunkRenderContext
79
- * @property {Chunk} chunk the chunk
80
- * @property {ChunkGraph} chunkGraph the chunk graph
81
- * @property {CodeGenerationResults} codeGenerationResults results of code generation
83
+ * @property {Chunk=} chunk the chunk
84
+ * @property {ChunkGraph=} chunkGraph the chunk graph
85
+ * @property {CodeGenerationResults=} codeGenerationResults results of code generation
82
86
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
83
87
  * @property {string} undoPath undo path to css file
88
+ * @property {WeakMap<Source, ModuleFactoryCacheEntry>} moduleFactoryCache moduleFactoryCache
89
+ * @property {Source} moduleSourceContent content
84
90
  */
85
91
 
86
92
  /**
@@ -89,6 +95,13 @@ const CssParser = require("./CssParser");
89
95
  * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
90
96
  */
91
97
 
98
+ /**
99
+ * @typedef {object} ModuleFactoryCacheEntry
100
+ * @property {string} undoPath - The undo path to the CSS file
101
+ * @property {Inheritance} inheritance - The inheritance chain
102
+ * @property {CachedSource} source - The cached source
103
+ */
104
+
92
105
  const getCssLoadingRuntimeModule = memoize(() =>
93
106
  require("./CssLoadingRuntimeModule")
94
107
  );
@@ -192,7 +205,7 @@ class CssModulesPlugin {
192
205
  }
193
206
 
194
207
  constructor() {
195
- /** @type {WeakMap<Source, { undoPath: string, inheritance: Inheritance, source: CachedSource }>} */
208
+ /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
196
209
  this._moduleFactoryCache = new WeakMap();
197
210
  }
198
211
 
@@ -224,16 +237,16 @@ class CssModulesPlugin {
224
237
  new CssUrlDependency.Template()
225
238
  );
226
239
  compilation.dependencyTemplates.set(
227
- CssLocalIdentifierDependency,
228
- new CssLocalIdentifierDependency.Template()
240
+ CssIcssLocalIdentifierDependency,
241
+ new CssIcssLocalIdentifierDependency.Template()
229
242
  );
230
243
  compilation.dependencyFactories.set(
231
- CssSelfLocalIdentifierDependency,
244
+ CssIcssSelfLocalIdentifierDependency,
232
245
  selfFactory
233
246
  );
234
247
  compilation.dependencyTemplates.set(
235
- CssSelfLocalIdentifierDependency,
236
- new CssSelfLocalIdentifierDependency.Template()
248
+ CssIcssSelfLocalIdentifierDependency,
249
+ new CssIcssSelfLocalIdentifierDependency.Template()
237
250
  );
238
251
  compilation.dependencyFactories.set(
239
252
  CssIcssImportDependency,
@@ -243,6 +256,22 @@ class CssModulesPlugin {
243
256
  CssIcssImportDependency,
244
257
  new CssIcssImportDependency.Template()
245
258
  );
259
+ compilation.dependencyFactories.set(
260
+ CssIcssFromIdentifierDependency,
261
+ normalModuleFactory
262
+ );
263
+ compilation.dependencyTemplates.set(
264
+ CssIcssFromIdentifierDependency,
265
+ new CssIcssFromIdentifierDependency.Template()
266
+ );
267
+ compilation.dependencyFactories.set(
268
+ CssIcssGlobalIdentifierDependency,
269
+ normalModuleFactory
270
+ );
271
+ compilation.dependencyTemplates.set(
272
+ CssIcssGlobalIdentifierDependency,
273
+ new CssIcssGlobalIdentifierDependency.Template()
274
+ );
246
275
  compilation.dependencyTemplates.set(
247
276
  CssIcssExportDependency,
248
277
  new CssIcssExportDependency.Template()
@@ -265,35 +294,44 @@ class CssModulesPlugin {
265
294
  .for(type)
266
295
  .tap(PLUGIN_NAME, (parserOptions) => {
267
296
  validateParserOptions[type](parserOptions);
268
- const { url, import: importOption, namedExports } = parserOptions;
297
+ const {
298
+ url,
299
+ import: importOption,
300
+ namedExports,
301
+ exportType
302
+ } = parserOptions;
269
303
 
270
304
  switch (type) {
271
305
  case CSS_MODULE_TYPE:
272
306
  return new CssParser({
273
307
  importOption,
274
308
  url,
275
- namedExports
309
+ namedExports,
310
+ exportType
276
311
  });
277
312
  case CSS_MODULE_TYPE_GLOBAL:
278
313
  return new CssParser({
279
314
  defaultMode: "global",
280
315
  importOption,
281
316
  url,
282
- namedExports
317
+ namedExports,
318
+ exportType
283
319
  });
284
320
  case CSS_MODULE_TYPE_MODULE:
285
321
  return new CssParser({
286
322
  defaultMode: "local",
287
323
  importOption,
288
324
  url,
289
- namedExports
325
+ namedExports,
326
+ exportType
290
327
  });
291
328
  case CSS_MODULE_TYPE_AUTO:
292
329
  return new CssParser({
293
330
  defaultMode: "auto",
294
331
  importOption,
295
332
  url,
296
- namedExports
333
+ namedExports,
334
+ exportType
297
335
  });
298
336
  }
299
337
  });
@@ -470,12 +508,8 @@ class CssModulesPlugin {
470
508
  hash.update(chunkGraph.getModuleHash(module, chunk.runtime));
471
509
  }
472
510
  }
473
- const digest = /** @type {string} */ (hash.digest(hashDigest));
474
- chunk.contentHash.css = nonNumericOnlyHash(
475
- digest,
476
- /** @type {number} */
477
- (hashDigestLength)
478
- );
511
+ const digest = hash.digest(hashDigest);
512
+ chunk.contentHash.css = nonNumericOnlyHash(digest, hashDigestLength);
479
513
  });
480
514
  compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
481
515
  const { chunkGraph } = compilation;
@@ -549,8 +583,6 @@ class CssModulesPlugin {
549
583
  onceForChunkSet.add(chunk);
550
584
  if (!isEnabledForChunk(chunk)) return;
551
585
 
552
- set.add(RuntimeGlobals.makeNamespaceObject);
553
-
554
586
  const CssLoadingRuntimeModule = getCssLoadingRuntimeModule();
555
587
  compilation.addRuntimeModule(chunk, new CssLoadingRuntimeModule(set));
556
588
  };
@@ -597,6 +629,15 @@ class CssModulesPlugin {
597
629
  set.add(RuntimeGlobals.publicPath);
598
630
  set.add(RuntimeGlobals.getChunkCssFilename);
599
631
  });
632
+
633
+ compilation.hooks.runtimeRequirementInTree
634
+ .for(RuntimeGlobals.cssMergeStyleSheets)
635
+ .tap(PLUGIN_NAME, (chunk) => {
636
+ compilation.addRuntimeModule(
637
+ chunk,
638
+ new CssMergeStyleSheetsRuntimeModule()
639
+ );
640
+ });
600
641
  }
601
642
  );
602
643
  }
@@ -762,18 +803,11 @@ class CssModulesPlugin {
762
803
  * @param {CssModule} module css module
763
804
  * @param {ChunkRenderContext} renderContext options object
764
805
  * @param {CompilationHooks} hooks hooks
765
- * @returns {Source} css module source
806
+ * @returns {Source | null} css module source
766
807
  */
767
- renderModule(module, renderContext, hooks) {
768
- const { codeGenerationResults, chunk, undoPath } = renderContext;
769
- const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
770
- const moduleSourceContent =
771
- /** @type {Source} */
772
- (
773
- codeGenResult.sources.get("css") ||
774
- codeGenResult.sources.get("css-import")
775
- );
776
- const cacheEntry = this._moduleFactoryCache.get(moduleSourceContent);
808
+ static renderModule(module, renderContext, hooks) {
809
+ const { undoPath, moduleFactoryCache, moduleSourceContent } = renderContext;
810
+ const cacheEntry = moduleFactoryCache.get(moduleSourceContent);
777
811
 
778
812
  /** @type {Inheritance} */
779
813
  const inheritance = [[module.cssLayer, module.supports, module.media]];
@@ -795,6 +829,7 @@ class CssModulesPlugin {
795
829
  ) {
796
830
  source = cacheEntry.source;
797
831
  } else {
832
+ if (!moduleSourceContent) return null;
798
833
  const moduleSourceCode =
799
834
  /** @type {string} */
800
835
  (moduleSourceContent.source());
@@ -849,7 +884,7 @@ class CssModulesPlugin {
849
884
  }
850
885
 
851
886
  source = new CachedSource(moduleSource);
852
- this._moduleFactoryCache.set(moduleSourceContent, {
887
+ moduleFactoryCache.set(moduleSourceContent, {
853
888
  inheritance,
854
889
  undoPath,
855
890
  source
@@ -871,28 +906,39 @@ class CssModulesPlugin {
871
906
  {
872
907
  undoPath,
873
908
  chunk,
874
- chunkGraph,
875
909
  codeGenerationResults,
876
910
  modules,
877
- runtimeTemplate
911
+ runtimeTemplate,
912
+ chunkGraph
878
913
  },
879
914
  hooks
880
915
  ) {
881
916
  const source = new ConcatSource();
882
917
  for (const module of modules) {
883
918
  try {
884
- const moduleSource = this.renderModule(
919
+ const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
920
+ const moduleSourceContent =
921
+ /** @type {Source} */
922
+ (
923
+ codeGenResult.sources.get("css") ||
924
+ codeGenResult.sources.get("css-import")
925
+ );
926
+ const moduleSource = CssModulesPlugin.renderModule(
885
927
  module,
886
928
  {
887
929
  undoPath,
888
930
  chunk,
889
931
  chunkGraph,
890
932
  codeGenerationResults,
933
+ moduleSourceContent,
934
+ moduleFactoryCache: this._moduleFactoryCache,
891
935
  runtimeTemplate
892
936
  },
893
937
  hooks
894
938
  );
895
- source.add(moduleSource);
939
+ if (moduleSource) {
940
+ source.add(moduleSource);
941
+ }
896
942
  } catch (err) {
897
943
  /** @type {Error} */
898
944
  (err).message += `\nduring rendering of css ${module.identifier()}`;