webpack 5.108.4 → 5.109.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 (186) hide show
  1. package/lib/APIPlugin.js +48 -29
  2. package/lib/CacheFacade.js +8 -0
  3. package/lib/ChunkGroup.js +1 -0
  4. package/lib/CompatibilityPlugin.js +31 -29
  5. package/lib/Compilation.js +49 -4
  6. package/lib/ConstPlugin.js +11 -11
  7. package/lib/ContextModule.js +239 -6
  8. package/lib/ContextModuleFactory.js +139 -14
  9. package/lib/DefinePlugin.js +396 -101
  10. package/lib/Entrypoint.js +1 -1
  11. package/lib/ExportsInfoApiPlugin.js +2 -2
  12. package/lib/ExternalModule.js +107 -5
  13. package/lib/ExternalModuleFactoryPlugin.js +20 -1
  14. package/lib/FileSystemInfo.js +130 -74
  15. package/lib/HotModuleReplacementPlugin.js +18 -15
  16. package/lib/Module.js +3 -0
  17. package/lib/ModuleFilenameHelpers.js +2 -2
  18. package/lib/ModuleTypeConstants.js +8 -1
  19. package/lib/MultiCompiler.js +13 -2
  20. package/lib/MultiWatching.js +1 -0
  21. package/lib/NodeStuffPlugin.js +51 -33
  22. package/lib/NormalModule.js +169 -401
  23. package/lib/NormalModuleFactory.js +76 -2
  24. package/lib/ProgressPlugin.js +211 -119
  25. package/lib/ProvidePlugin.js +2 -2
  26. package/lib/RuntimeGlobals.js +47 -0
  27. package/lib/RuntimePlugin.js +33 -0
  28. package/lib/RuntimeTemplate.js +304 -16
  29. package/lib/UseStrictPlugin.js +1 -1
  30. package/lib/WebpackIsIncludedPlugin.js +1 -1
  31. package/lib/WebpackOptionsApply.js +24 -19
  32. package/lib/asset/AssetGenerator.js +110 -28
  33. package/lib/asset/AssetModulesPlugin.js +92 -2
  34. package/lib/asset/WebManifestGenerator.js +164 -0
  35. package/lib/asset/WebManifestParser.js +130 -0
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +14 -4
  37. package/lib/async-modules/isGeneratorLowered.js +26 -0
  38. package/lib/cache/PackFileCacheStrategy.js +9 -3
  39. package/lib/config/browserslistTargetHandler.js +40 -0
  40. package/lib/config/defaults.js +219 -29
  41. package/lib/config/normalization.js +26 -0
  42. package/lib/config/target.js +9 -1
  43. package/lib/css/CssGenerator.js +40 -31
  44. package/lib/css/CssLoadingRuntimeModule.js +5 -1
  45. package/lib/css/CssModulesPlugin.js +13 -0
  46. package/lib/css/CssParser.js +594 -263
  47. package/lib/css/syntax.js +875 -462
  48. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -6
  49. package/lib/dependencies/AMDPlugin.js +2 -2
  50. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +13 -13
  51. package/lib/dependencies/CommonJsDependencyHelpers.js +39 -0
  52. package/lib/dependencies/CommonJsExportsDependency.js +47 -2
  53. package/lib/dependencies/CommonJsExportsParserPlugin.js +10 -10
  54. package/lib/dependencies/CommonJsImportsParserPlugin.js +18 -18
  55. package/lib/dependencies/CommonJsPlugin.js +2 -2
  56. package/lib/dependencies/CommonJsRequireDependency.js +26 -1
  57. package/lib/dependencies/CommonJsSelfReferenceDependency.js +32 -1
  58. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  59. package/lib/dependencies/CreateRequireParserPlugin.js +6 -6
  60. package/lib/dependencies/CssIcssExportDependency.js +162 -71
  61. package/lib/dependencies/CssUrlDependency.js +35 -4
  62. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +2 -2
  63. package/lib/dependencies/HarmonyCompatibilityDependency.js +32 -14
  64. package/lib/dependencies/HarmonyDetectionParserPlugin.js +43 -13
  65. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +7 -19
  66. package/lib/dependencies/HarmonyImportDependency.js +12 -1
  67. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +11 -11
  68. package/lib/dependencies/HarmonyModulesPlugin.js +6 -0
  69. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -1
  70. package/lib/dependencies/HtmlEntryDependency.js +797 -172
  71. package/lib/dependencies/HtmlSourceDependency.js +26 -0
  72. package/lib/dependencies/ImportDependency.js +43 -1
  73. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +31 -18
  74. package/lib/dependencies/ImportMetaContextPlugin.js +38 -7
  75. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  76. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  77. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  78. package/lib/dependencies/ImportMetaPlugin.js +532 -180
  79. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  80. package/lib/dependencies/ImportParserPlugin.js +80 -17
  81. package/lib/dependencies/ImportPhase.js +10 -8
  82. package/lib/dependencies/LoaderPlugin.js +5 -1
  83. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  84. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -6
  85. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -11
  86. package/lib/dependencies/SystemPlugin.js +2 -4
  87. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  88. package/lib/dependencies/URLDependency.js +141 -21
  89. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +324 -112
  90. package/lib/dependencies/WorkerDependency.js +86 -18
  91. package/lib/dependencies/WorkletDependency.js +278 -0
  92. package/lib/dll/DelegatedModuleFactoryPlugin.js +19 -0
  93. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +1 -1
  94. package/lib/errors/LoaderLoadingError.js +20 -0
  95. package/lib/errors/ModuleParseError.js +39 -22
  96. package/lib/errors/NodeStuffInWebError.js +1 -1
  97. package/lib/esm/ModuleChunkFormatPlugin.js +47 -14
  98. package/lib/esm/ModuleChunkLoadingPlugin.js +8 -1
  99. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +29 -1
  100. package/lib/hmr/lazyCompilationBackend.js +32 -8
  101. package/lib/html/HtmlGenerator.js +887 -15
  102. package/lib/html/HtmlModule.js +2 -2
  103. package/lib/html/HtmlModulesPlugin.js +610 -166
  104. package/lib/html/HtmlParser.js +603 -247
  105. package/lib/html/favicon.svg +1 -0
  106. package/lib/html/syntax.js +1264 -661
  107. package/lib/ids/IdHelpers.js +1 -1
  108. package/lib/index.js +6 -0
  109. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  110. package/lib/javascript/BasicEvaluatedExpression.js +366 -48
  111. package/lib/javascript/JavascriptGenerator.js +197 -49
  112. package/lib/javascript/JavascriptModulesPlugin.js +178 -24
  113. package/lib/javascript/JavascriptParser.js +701 -355
  114. package/lib/javascript/JavascriptParserHelpers.js +3 -6
  115. package/lib/javascript/syntax.js +4380 -0
  116. package/lib/library/ModuleLibraryPlugin.js +38 -1
  117. package/lib/loaders/LoaderRunner.js +714 -0
  118. package/lib/loaders/loadLoader.js +100 -0
  119. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +19 -0
  120. package/lib/node/ReadFileCompileWasmPlugin.js +14 -0
  121. package/lib/optimize/ConcatenatedModule.js +120 -16
  122. package/lib/optimize/FlagIncludedChunksPlugin.js +13 -3
  123. package/lib/optimize/InnerGraphPlugin.js +50 -30
  124. package/lib/optimize/ModuleConcatenationPlugin.js +69 -3
  125. package/lib/optimize/SideEffectsFlagPlugin.js +86 -43
  126. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +15 -0
  127. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +24 -13
  128. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  129. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  130. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  131. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  132. package/lib/rules/RuleSetCompiler.js +114 -0
  133. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  134. package/lib/runtime/AsyncModuleRuntimeModule.js +24 -8
  135. package/lib/runtime/AutoPublicPathRuntimeModule.js +7 -1
  136. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  137. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  138. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +204 -8
  139. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +4 -1
  140. package/lib/schemes/HttpUriPlugin.js +40 -1
  141. package/lib/schemes/VirtualUrlPlugin.js +1 -2
  142. package/lib/serialization/FileMiddleware.js +29 -3
  143. package/lib/stats/DefaultStatsFactoryPlugin.js +32 -3
  144. package/lib/stats/DefaultStatsPresetPlugin.js +2 -0
  145. package/lib/stats/DefaultStatsPrinterPlugin.js +12 -2
  146. package/lib/stats/StatsFactory.js +15 -8
  147. package/lib/url/URLParserPlugin.js +66 -13
  148. package/lib/util/AsyncQueue.js +122 -72
  149. package/lib/util/SetHelpers.js +1 -1
  150. package/lib/util/StackedMap.js +122 -48
  151. package/lib/util/binarySearchBounds.js +2 -2
  152. package/lib/util/concatenate.js +40 -14
  153. package/lib/util/createHooksRegistry.js +13 -5
  154. package/lib/util/dataURL.js +2 -2
  155. package/lib/util/deterministicGrouping.js +7 -5
  156. package/lib/util/formatSize.js +6 -2
  157. package/lib/util/globUtils.js +710 -0
  158. package/lib/util/identifier.js +23 -6
  159. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  160. package/lib/util/internalSerializables.js +88 -71
  161. package/lib/util/magicComment.js +121 -25
  162. package/lib/util/numberHash.js +2 -2
  163. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +24 -18
  164. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +33 -22
  165. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +79 -16
  166. package/lib/web/FetchCompileAsyncWasmPlugin.js +19 -0
  167. package/lib/web/FetchCompileWasmPlugin.js +14 -0
  168. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -0
  169. package/lib/webpack.js +65 -0
  170. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +3 -0
  171. package/module.d.ts +21 -0
  172. package/package.json +13 -12
  173. package/schemas/WebpackOptions.check.js +1 -1
  174. package/schemas/WebpackOptions.json +759 -36
  175. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  176. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  177. package/schemas/plugins/ProgressPlugin.json +17 -1
  178. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  179. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  180. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  181. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  182. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  183. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  184. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  185. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  186. package/types.d.ts +1213 -96
@@ -102,6 +102,8 @@ module.exports = class MultiCompiler {
102
102
  this.dependencies = new WeakMap();
103
103
  /** @type {boolean} */
104
104
  this.running = false;
105
+ /** @type {MultiWatching | undefined} */
106
+ this.watching = undefined;
105
107
 
106
108
  /** @type {(Stats | null)[]} */
107
109
  const compilerStats = this.compilers.map(() => null);
@@ -662,10 +664,12 @@ module.exports = class MultiCompiler {
662
664
  },
663
665
  handler
664
666
  );
665
- return new MultiWatching(watchings, this);
667
+ this.watching = new MultiWatching(watchings, this);
668
+ return this.watching;
666
669
  }
667
670
 
668
- return new MultiWatching([], this);
671
+ this.watching = new MultiWatching([], this);
672
+ return this.watching;
669
673
  }
670
674
 
671
675
  /**
@@ -709,6 +713,13 @@ module.exports = class MultiCompiler {
709
713
  * @returns {void}
710
714
  */
711
715
  close(callback) {
716
+ if (this.watching) {
717
+ // When there is still an active watching, close this first
718
+ this.watching.close((_err) => {
719
+ this.close(callback);
720
+ });
721
+ return;
722
+ }
712
723
  asyncLib.each(
713
724
  this.compilers,
714
725
  (compiler, callback) => {
@@ -69,6 +69,7 @@ class MultiWatching {
69
69
  watching.close(finishedCallback);
70
70
  },
71
71
  (err) => {
72
+ if (this.compiler.watching === this) this.compiler.watching = undefined;
72
73
  this.compiler.hooks.watchClose.call();
73
74
  if (typeof callback === "function") {
74
75
  this.compiler.running = false;
@@ -34,7 +34,8 @@ const { parseResource } = require("./util/identifier");
34
34
  const PLUGIN_NAME = "NodeStuffPlugin";
35
35
  const URL_MODULE_CONSTANT_FUNCTION_NAME = "__webpack_fileURLToPath__";
36
36
 
37
- const { IMPORT_META_DIRNAME, IMPORT_META_FILENAME } = ImportMetaPlugin;
37
+ const { IMPORT_META_DIRNAME, IMPORT_META_FILENAME, isImportMetaFieldEnabled } =
38
+ ImportMetaPlugin;
38
39
 
39
40
  class NodeStuffPlugin {
40
41
  /**
@@ -97,7 +98,7 @@ class NodeStuffPlugin {
97
98
 
98
99
  parser.hooks.expression.for("global").tap(PLUGIN_NAME, (expr) => {
99
100
  const dep = getGlobalDep(expr);
100
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
101
+ dep.loc = parser.getLocation(expr);
101
102
  parser.state.module.addPresentationalDependency(dep);
102
103
 
103
104
  if (withWarning) {
@@ -113,7 +114,7 @@ class NodeStuffPlugin {
113
114
 
114
115
  parser.hooks.rename.for("global").tap(PLUGIN_NAME, (expr) => {
115
116
  const dep = getGlobalDep(expr);
116
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
117
+ dep.loc = parser.getLocation(expr);
117
118
  parser.state.module.addPresentationalDependency(dep);
118
119
  return false;
119
120
  });
@@ -138,7 +139,7 @@ class NodeStuffPlugin {
138
139
  /** @type {Range} */
139
140
  (expr.range)
140
141
  );
141
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
142
+ dep.loc = parser.getLocation(expr);
142
143
  parser.state.module.addPresentationalDependency(dep);
143
144
  return true;
144
145
  });
@@ -180,7 +181,7 @@ class NodeStuffPlugin {
180
181
  (expr.range),
181
182
  `__webpack_${property}__`
182
183
  );
183
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
184
+ dep.loc = parser.getLocation(expr);
184
185
  parser.state.module.addPresentationalDependency(dep);
185
186
 
186
187
  if (warning) {
@@ -201,7 +202,7 @@ class NodeStuffPlugin {
201
202
  if (warning) {
202
203
  parser.state.module.addWarning(
203
204
  new NodeStuffInWebError(
204
- usingProperty.loc,
205
+ parser.getLocation(usingProperty),
205
206
  expressionName,
206
207
  warning
207
208
  )
@@ -278,7 +279,7 @@ class NodeStuffPlugin {
278
279
  CachedConstDependency.PLACE_CHUNK
279
280
  );
280
281
 
281
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
282
+ dep.loc = parser.getLocation(expr);
282
283
  parser.state.module.addPresentationalDependency(dep);
283
284
  return;
284
285
  }
@@ -297,7 +298,7 @@ class NodeStuffPlugin {
297
298
  `__webpack_${property}__`,
298
299
  ExternalModuleDependency.PLACE_CHUNK
299
300
  );
300
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
301
+ dep.loc = parser.getLocation(expr);
301
302
  parser.state.module.addPresentationalDependency(dep);
302
303
 
303
304
  return true;
@@ -324,9 +325,7 @@ class NodeStuffPlugin {
324
325
  `__webpack_${property}__`,
325
326
  CachedConstDependency.PLACE_CHUNK
326
327
  );
327
- dep.loc = /** @type {DependencyLocation} */ (
328
- usingProperty.loc
329
- );
328
+ dep.loc = parser.getLocation(usingProperty);
330
329
  parser.state.module.addPresentationalDependency(dep);
331
330
  return `${property}: __webpack_${property}__,`;
332
331
  }
@@ -346,7 +345,7 @@ class NodeStuffPlugin {
346
345
  ExternalModuleDependency.PLACE_CHUNK
347
346
  );
348
347
 
349
- dep.loc = /** @type {DependencyLocation} */ (usingProperty.loc);
348
+ dep.loc = parser.getLocation(usingProperty);
350
349
  parser.state.module.addPresentationalDependency(dep);
351
350
 
352
351
  return `${property}: __webpack_${property}__,`;
@@ -359,23 +358,24 @@ class NodeStuffPlugin {
359
358
  * Dirname and filename handler.
360
359
  * @param {JavascriptParser} parser the parser
361
360
  * @param {NodeOptions} nodeOptions options
362
- * @param {{ dirname: "__dirname" | "import.meta.dirname", filename: "__filename" | "import.meta.filename" }} identifiers options
361
+ * @param {{ dirname: "__dirname" | "import.meta.dirname", filename: "__filename" | "import.meta.filename", dirnameEnabled?: boolean, filenameEnabled?: boolean }} identifiers options
363
362
  * @returns {void}
364
363
  */
365
364
  const dirnameAndFilenameHandler = (
366
365
  parser,
367
366
  nodeOptions,
368
- { dirname, filename }
367
+ { dirname, filename, dirnameEnabled = true, filenameEnabled = true }
369
368
  ) => {
370
- // Keep `import.meta.filename` in code
369
+ // Keep `import.meta.filename` in code.
371
370
  if (
371
+ filenameEnabled &&
372
372
  nodeOptions.__filename === false &&
373
373
  filename === IMPORT_META_FILENAME
374
374
  ) {
375
375
  setModuleConstant(parser, filename, () => filename, "filename");
376
376
  }
377
377
 
378
- if (nodeOptions.__filename) {
378
+ if (filenameEnabled && nodeOptions.__filename) {
379
379
  switch (nodeOptions.__filename) {
380
380
  case "mock":
381
381
  setConstant(parser, filename, "/index.js", "filename");
@@ -446,15 +446,16 @@ class NodeStuffPlugin {
446
446
  });
447
447
  }
448
448
 
449
- // Keep `import.meta.dirname` in code
449
+ // Keep `import.meta.dirname` in code.
450
450
  if (
451
+ dirnameEnabled &&
451
452
  nodeOptions.__dirname === false &&
452
453
  dirname === IMPORT_META_DIRNAME
453
454
  ) {
454
455
  setModuleConstant(parser, dirname, () => dirname, "dirname");
455
456
  }
456
457
 
457
- if (nodeOptions.__dirname) {
458
+ if (dirnameEnabled && nodeOptions.__dirname) {
458
459
  switch (nodeOptions.__dirname) {
459
460
  case "mock":
460
461
  setConstant(parser, dirname, "/", "dirname");
@@ -537,19 +538,24 @@ class NodeStuffPlugin {
537
538
  */
538
539
  const handler = (parser, parserOptions, a, b) => {
539
540
  if (b && parserOptions.node === false) {
540
- // Keep `import.meta.dirname` and `import.meta.filename` in code
541
- setModuleConstant(
542
- parser,
543
- IMPORT_META_DIRNAME,
544
- () => IMPORT_META_DIRNAME,
545
- "dirname"
546
- );
547
- setModuleConstant(
548
- parser,
549
- IMPORT_META_FILENAME,
550
- () => IMPORT_META_FILENAME,
551
- "filename"
552
- );
541
+ if (isImportMetaFieldEnabled(parserOptions.importMeta, "dirname")) {
542
+ setModuleConstant(
543
+ parser,
544
+ IMPORT_META_DIRNAME,
545
+ () => IMPORT_META_DIRNAME,
546
+ "dirname"
547
+ );
548
+ }
549
+ if (
550
+ isImportMetaFieldEnabled(parserOptions.importMeta, "filename")
551
+ ) {
552
+ setModuleConstant(
553
+ parser,
554
+ IMPORT_META_FILENAME,
555
+ () => IMPORT_META_FILENAME,
556
+ "filename"
557
+ );
558
+ }
553
559
  return;
554
560
  }
555
561
 
@@ -570,10 +576,22 @@ class NodeStuffPlugin {
570
576
  });
571
577
  }
572
578
 
573
- if (b && parserOptions.importMeta !== false) {
579
+ if (
580
+ b &&
581
+ (isImportMetaFieldEnabled(parserOptions.importMeta, "dirname") ||
582
+ isImportMetaFieldEnabled(parserOptions.importMeta, "filename"))
583
+ ) {
574
584
  dirnameAndFilenameHandler(parser, localOptions, {
575
585
  dirname: IMPORT_META_DIRNAME,
576
- filename: IMPORT_META_FILENAME
586
+ filename: IMPORT_META_FILENAME,
587
+ dirnameEnabled: isImportMetaFieldEnabled(
588
+ parserOptions.importMeta,
589
+ "dirname"
590
+ ),
591
+ filenameEnabled: isImportMetaFieldEnabled(
592
+ parserOptions.importMeta,
593
+ "filename"
594
+ )
577
595
  });
578
596
  }
579
597
  };