webpack 5.110.2 → 5.111.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 (226) hide show
  1. package/README.md +5 -2
  2. package/lib/APIPlugin.js +23 -7
  3. package/lib/AutomaticPrefetchPlugin.js +1 -1
  4. package/lib/Cache.js +8 -3
  5. package/lib/CacheFacade.js +1 -1
  6. package/lib/ChunkGraph.js +20 -18
  7. package/lib/CircularModulesPlugin.js +157 -55
  8. package/lib/CleanPlugin.js +2 -2
  9. package/lib/Compilation.js +321 -303
  10. package/lib/Compiler.js +209 -46
  11. package/lib/ConcatenationScope.js +25 -35
  12. package/lib/ContextModule.js +17 -81
  13. package/lib/ContextModuleFactory.js +1 -1
  14. package/lib/CopyPlugin.js +1054 -0
  15. package/lib/DefinePlugin.js +24 -8
  16. package/lib/DotenvPlugin.js +41 -13
  17. package/lib/ExternalModule.js +41 -14
  18. package/lib/FileSystemInfo.js +17 -14
  19. package/lib/FlagDependencyExportsPlugin.js +45 -21
  20. package/lib/FlagDependencyUsagePlugin.js +8 -2
  21. package/lib/HotModuleReplacementPlugin.js +53 -7
  22. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  23. package/lib/MainTemplate.js +5 -1
  24. package/lib/Module.js +16 -7
  25. package/lib/MultiCompiler.js +1 -1
  26. package/lib/MultiWatching.js +1 -1
  27. package/lib/NormalModule.js +58 -32
  28. package/lib/NormalModuleFactory.js +1 -1
  29. package/lib/RuntimeGlobals.js +21 -7
  30. package/lib/RuntimeModule.js +28 -12
  31. package/lib/RuntimePlugin.js +33 -3
  32. package/lib/RuntimeTemplate.js +794 -477
  33. package/lib/SourceMapDevToolPlugin.js +1 -1
  34. package/lib/Watching.js +9 -0
  35. package/lib/WebpackOptionsApply.js +84 -91
  36. package/lib/asset/AssetGenerator.js +25 -8
  37. package/lib/asset/AssetModule.js +3 -0
  38. package/lib/asset/WebManifestParser.js +7 -5
  39. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  40. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  41. package/lib/cache/IdleFileCachePlugin.js +2 -2
  42. package/lib/cache/PackFileCacheStrategy.js +14 -1
  43. package/lib/config/browserslistTargetHandler.js +19 -0
  44. package/lib/config/defaults.js +110 -64
  45. package/lib/config/normalization.js +100 -20
  46. package/lib/config/target.js +10 -0
  47. package/lib/container/ContainerReferencePlugin.js +6 -0
  48. package/lib/container/RemoteRuntimeModule.js +9 -0
  49. package/lib/container/declaredRemotes.js +39 -0
  50. package/lib/css/CssGenerator.js +8 -0
  51. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  52. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  53. package/lib/css/CssModule.js +1 -1
  54. package/lib/css/CssModulesPlugin.js +7 -6
  55. package/lib/css/CssParser.js +144 -11
  56. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  57. package/lib/css/cssMinify.js +11 -3
  58. package/lib/css/data.js +2814 -678
  59. package/lib/css/syntax.js +4082 -248
  60. package/lib/debug/ProfilingPlugin.js +4 -0
  61. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  62. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  63. package/lib/dependencies/CommonJsExportRequireDependency.js +3 -1
  64. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  65. package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -0
  66. package/lib/dependencies/CommonJsPlugin.js +19 -3
  67. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  68. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  69. package/lib/dependencies/CssIcssExportDependency.js +7 -1
  70. package/lib/dependencies/HarmonyCompatibilityDependency.js +58 -4
  71. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +8 -3
  72. package/lib/dependencies/HarmonyExportExpressionDependency.js +44 -29
  73. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +171 -32
  74. package/lib/dependencies/HarmonyExportInitFragment.js +99 -19
  75. package/lib/dependencies/HarmonyExportSpecifierDependency.js +18 -30
  76. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  77. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  78. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +20 -3
  79. package/lib/dependencies/HarmonyImportSpecifierDependency.js +24 -1
  80. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  81. package/lib/dependencies/HtmlEntryDependency.js +62 -2
  82. package/lib/dependencies/ImportContextDependency.js +43 -3
  83. package/lib/dependencies/ImportDependency.js +8 -29
  84. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  85. package/lib/dependencies/ImportMetaPlugin.js +59 -15
  86. package/lib/dependencies/ImportParserPlugin.js +24 -14
  87. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  88. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  89. package/lib/dependencies/WorkerDependency.js +1 -2
  90. package/lib/dependencies/WorkletDependency.js +1 -2
  91. package/lib/dependencies/importOptionsCheck.js +47 -0
  92. package/lib/dll/DelegatedModule.js +18 -1
  93. package/lib/dll/DllReferencePlugin.js +11 -8
  94. package/lib/dll/LibManifestPlugin.js +1 -1
  95. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  96. package/lib/errors/DotenvFileError.js +29 -0
  97. package/lib/errors/DuplicateModulesWarning.js +12 -7
  98. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  99. package/lib/errors/ExternalStarReexportError.js +44 -0
  100. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  101. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  102. package/lib/errors/ModuleParseError.js +2 -1
  103. package/lib/errors/UnusedAssetsWarning.js +36 -0
  104. package/lib/errors/UnusedFederationWarning.js +35 -0
  105. package/lib/errors/UnusedModulesWarning.js +38 -0
  106. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  107. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  108. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  109. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  110. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  111. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  112. package/lib/html/HtmlGenerator.js +11 -5
  113. package/lib/html/HtmlModulesPlugin.js +360 -84
  114. package/lib/html/HtmlParser.js +13 -6
  115. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  116. package/lib/html/data.js +121 -7
  117. package/lib/html/htmlMinify.js +84 -113
  118. package/lib/html/syntax.js +1067 -569
  119. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  120. package/lib/index.js +3 -0
  121. package/lib/javascript/JavascriptModule.js +1 -0
  122. package/lib/javascript/JavascriptModulesPlugin.js +52 -22
  123. package/lib/javascript/JavascriptParser.js +1255 -728
  124. package/lib/javascript/StartupHelpers.js +27 -3
  125. package/lib/javascript/data.js +172 -0
  126. package/lib/javascript/grammar.js +5546 -0
  127. package/lib/javascript/parser.js +1494 -0
  128. package/lib/javascript/regexp.js +1762 -0
  129. package/lib/javascript/regexpData.js +51 -0
  130. package/lib/javascript/syntax.js +8696 -5225
  131. package/lib/library/ModuleLibraryPlugin.js +116 -5
  132. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  133. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  134. package/lib/optimize/ConcatenatedModule.js +133 -25
  135. package/lib/optimize/ConstExportsPlugin.js +50 -39
  136. package/lib/optimize/InlineExports.js +20 -123
  137. package/lib/optimize/MangleExportsPlugin.js +10 -0
  138. package/lib/optimize/ModuleConcatenationPlugin.js +24 -1
  139. package/lib/optimize/RealContentHashPlugin.js +68 -9
  140. package/lib/optimize/SideEffectsFlagPlugin.js +17 -9
  141. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  142. package/lib/performance/CacheEffectivenessPlugin.js +4 -3
  143. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  144. package/lib/performance/EvalUsagePlugin.js +5 -2
  145. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  146. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  147. package/lib/performance/TopLevelThisPlugin.js +5 -4
  148. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  149. package/lib/performance/UnusedFederationPlugin.js +147 -0
  150. package/lib/performance/UnusedModulesPlugin.js +141 -0
  151. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  152. package/lib/performance/isOnlyReexported.js +65 -0
  153. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  154. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +2 -0
  155. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  156. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  157. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  158. package/lib/prefetch/ResourceHintPlugin.js +7 -3
  159. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  160. package/lib/prefetch/StartupAssetHintRuntimeModule.js +9 -0
  161. package/lib/rules/RuleSetCompiler.js +211 -4
  162. package/lib/runtime/AsyncModuleRuntimeModule.js +105 -67
  163. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  164. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  165. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  166. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  167. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -0
  168. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  169. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  170. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  171. package/lib/runtime/GlobalRuntimeModule.js +9 -0
  172. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  173. package/lib/runtime/HelperRuntimeModule.js +10 -0
  174. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +338 -217
  175. package/lib/runtime/NonceRuntimeModule.js +9 -0
  176. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  177. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  178. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  179. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  180. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  181. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  182. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  183. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  184. package/lib/schemes/HttpUriPlugin.js +22 -5
  185. package/lib/serialization/FileMiddleware.js +15 -2
  186. package/lib/serialization/ObjectMiddleware.js +138 -106
  187. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  188. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  189. package/lib/sharing/ShareRuntimeModule.js +9 -0
  190. package/lib/sharing/declaredShared.js +47 -0
  191. package/lib/stats/DefaultStatsFactoryPlugin.js +3 -1
  192. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  193. package/lib/util/ArrayQueue.js +3 -3
  194. package/lib/util/SourceProcessor.js +76 -69
  195. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  196. package/lib/util/async.js +292 -0
  197. package/lib/util/buildDiagnostics.js +69 -0
  198. package/lib/util/conventions.js +5 -1
  199. package/lib/util/fs.js +27 -1
  200. package/lib/util/handlerKeys.js +40 -0
  201. package/lib/util/identifier.js +20 -0
  202. package/lib/util/internalSerializables.js +6 -0
  203. package/lib/util/registerExternalSerializer.js +6 -45
  204. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  205. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  206. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +9 -0
  207. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  208. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  209. package/package.json +22 -16
  210. package/schemas/WebpackOptions.check.js +1 -1
  211. package/schemas/WebpackOptions.json +388 -76
  212. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  213. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  214. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  215. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  216. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  217. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  218. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  219. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  220. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  221. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  222. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  223. package/types.d.ts +1440 -331
  224. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  225. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  226. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -21,7 +21,11 @@ const getJsonpTemplatePlugin = memoize(() =>
21
21
 
22
22
  /** @import { Tap } from "tapable" */
23
23
  /** @import { Source } from "webpack-sources" */
24
- /** @import { Output as OutputOptions } from "../declarations/WebpackOptions" */
24
+ /**
25
+ * @import {
26
+ * OutputNormalizedWithDefaults as OutputOptions
27
+ * } from "./config/defaults"
28
+ */
25
29
  /** @import ModuleTemplate from "./ModuleTemplate" */
26
30
  /** @import Chunk from "./Chunk" */
27
31
  /**
package/lib/Module.js CHANGED
@@ -128,6 +128,7 @@ const makeSerializable = require("./util/makeSerializable");
128
128
  * @property {Set<string>} topLevelDeclarations top level declarations for javascript modules
129
129
  * @property {Set<string>} freeNames free identifier names in the rendered source for javascript modules
130
130
  * @property {InitFragment<EXPECTED_ANY>[]} chunkInitFragments chunk init fragments for javascript modules
131
+ * @property {string} externalReexport native external reexport source and attributes
131
132
  * @property {{ javascript?: string, ["asset-url"]?: string }} url url for asset modules
132
133
  * @property {string} filename a filename for asset modules
133
134
  * @property {AssetInfo} assetInfo an asset info for asset modules
@@ -186,23 +187,33 @@ const makeSerializable = require("./util/makeSerializable");
186
187
  * @property {Map<string, string>=} exportsBindingSourceByRuntime export definitions `ModuleLibraryPlugin` took over, re-emitted only where the module is wrapped
187
188
  */
188
189
 
190
+ /**
191
+ * What a build recorded for stats and the performance hints to report, kept on the build info so a module restored from the cache still has it.
192
+ * @typedef {object} BuildDiagnostics
193
+ * @property {string[]=} optimizationBailouts what parser plugins reported as optimization bailouts, replayed into the module graph of every compilation that reuses the module
194
+ * @property {string=} sideEffectStatement the statement whose side effect keeps the module in the bundle, as `type at location`
195
+ * @property {number=} ineffectivePureAnnotations how many `#__PURE__` annotations sit where the parser does not read them
196
+ * @property {number=} topLevelThis how many times the module reads `this` at its top level
197
+ * @property {boolean=} usesEval true when the module calls `eval` directly
198
+ * @property {string[]=} notCacheableReasons reasons why the module is not cacheable (e.g. paths of loaders that marked it)
199
+ */
200
+
189
201
  /**
190
202
  * Defines the build info properties common to all module types.
191
203
  * Module type specific properties live in the `Known*BuildInfo` typedef of the dedicated module class.
192
204
  * @typedef {object} KnownBuildInfo
205
+ * @property {boolean=} specNamespaceObject the module hands out a spec Module Namespace Exotic Object
193
206
  * @property {boolean=} cacheable
194
- * @property {string[]=} notCacheableReasons reasons why the module is not cacheable (e.g. paths of loaders that marked it)
195
207
  * @property {boolean=} strict
196
208
  * @property {string=} moduleArgument
197
209
  * @property {string=} exportsArgument
198
210
  * @property {Record<string, Source>=} assets assets added by loaders or plugins
199
211
  * @property {Map<string, AssetInfo | undefined>=} assetsInfo
200
212
  * @property {Set<string>=} topLevelDeclarations top level declaration names
201
- * @property {boolean=} isCircular true when the module is part of a circular dependency chain
202
- * @property {boolean=} usesEval true when the module calls `eval` directly
203
- * @property {number=} ineffectivePureAnnotations how many `#__PURE__` annotations sit where the parser does not read them
204
- * @property {number=} topLevelThis how many times the module reads `this` at its top level
213
+ * @property {boolean=} isCircular true when the module is in a synchronous circular dependency chain
214
+ * @property {number=} circularKind CircularKind bit flags from CircularModulesPlugin; unset when the plugin did not run
205
215
  * @property {boolean=} usesTopLevelAwaitForOf module uses top-level `for await…of` or `await using`, which can't be lowered to a generator
216
+ * @property {BuildDiagnostics=} diagnostics what the build recorded for stats and the performance hints to report
206
217
  */
207
218
 
208
219
  /** @typedef {string | Set<string>} ValueCacheVersion */
@@ -1310,7 +1321,6 @@ class Module extends DependenciesBlock {
1310
1321
  write(this.type);
1311
1322
  write(this.layer);
1312
1323
  write(this.context);
1313
- write(this.resolveOptions);
1314
1324
  write(this.factoryMeta);
1315
1325
  write(this.useSourceMap);
1316
1326
  write(this.useSimpleSourceMap);
@@ -1340,7 +1350,6 @@ class Module extends DependenciesBlock {
1340
1350
  this.type = read();
1341
1351
  this.layer = read();
1342
1352
  this.context = read();
1343
- this.resolveOptions = read();
1344
1353
  this.factoryMeta = read();
1345
1354
  this.useSourceMap = read();
1346
1355
  this.useSimpleSourceMap = read();
@@ -5,13 +5,13 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const asyncLib = require("neo-async");
9
8
  const { MultiHook, SyncHook } = require("tapable");
10
9
 
11
10
  const MultiStats = require("./MultiStats");
12
11
  const MultiWatching = require("./MultiWatching");
13
12
  const WebpackError = require("./errors/WebpackError");
14
13
  const ArrayQueue = require("./util/ArrayQueue");
14
+ const asyncLib = require("./util/async");
15
15
  const memoize = require("./util/memoize");
16
16
 
17
17
  const getConcurrentCompilationError = memoize(() =>
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const asyncLib = require("neo-async");
8
+ const asyncLib = require("./util/async");
9
9
 
10
10
  /** @import MultiCompiler from "./MultiCompiler" */
11
11
  /** @import Watching from "./Watching" */
@@ -8,9 +8,9 @@
8
8
  const querystring = require("querystring");
9
9
  const {
10
10
  AsyncSeriesBailHook,
11
+ AsyncSeriesWaterfallHook,
11
12
  HookMap,
12
- SyncHook,
13
- SyncWaterfallHook
13
+ SyncHook
14
14
  } = require("tapable");
15
15
  const {
16
16
  CachedSource,
@@ -33,6 +33,7 @@ const {
33
33
  const LazySet = require("./util/LazySet");
34
34
  const { isSubset } = require("./util/SetHelpers");
35
35
  const { getScheme } = require("./util/URLAbsoluteSpecifier");
36
+ const { getBuildDiagnostics } = require("./util/buildDiagnostics");
36
37
  const {
37
38
  concatComparators,
38
39
  keepOriginalOrder,
@@ -109,7 +110,6 @@ const getModuleBuildError = memoize(() => require("./errors/ModuleBuildError"));
109
110
  * BuildMeta,
110
111
  * CodeGenerationContext,
111
112
  * CodeGenerationResult,
112
- * CodeGenerationResultData,
113
113
  * ConcatenationBailoutReasonContext,
114
114
  * KnownBuildInfo,
115
115
  * LibIdentOptions,
@@ -119,7 +119,6 @@ const getModuleBuildError = memoize(() => require("./errors/ModuleBuildError"));
119
119
  * NeedBuildCallback,
120
120
  * BuildCallback,
121
121
  * RuntimeRequirements,
122
- * Sources,
123
122
  * SourceType,
124
123
  * SourceTypes
125
124
  * } from "./Module"
@@ -184,7 +183,9 @@ const recordSideEffectsBailout = (mod, moduleGraph, dep) => {
184
183
  .getOptimizationBailout(mod)
185
184
  .push(
186
185
  () =>
187
- `Dependency (${dep.type}) with side effects at ${formatLocation(dep.loc)}`
186
+ `Dependency (${dep.type}) with side effects at ${formatLocation(
187
+ dep.loc
188
+ )}`
188
189
  );
189
190
  };
190
191
 
@@ -542,10 +543,12 @@ const createCompilationHooks = () => {
542
543
  */
543
544
  beforeSnapshot: new SyncHook(["module"]),
544
545
  /**
545
- * @type {SyncWaterfallHook<[Result, NormalModule]>}
546
+ * Async since 5.111.0, so a tap can await work of its own — minifying an
547
+ * asset, say, which before only a loader could do. `tap` keeps working.
548
+ * @type {AsyncSeriesWaterfallHook<[Result, NormalModule]>}
546
549
  * @since 5.99.0
547
550
  */
548
- processResult: new SyncWaterfallHook(["result", "module"]),
551
+ processResult: new AsyncSeriesWaterfallHook(["result", "module"]),
549
552
  /**
550
553
  * @type {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>}
551
554
  * @since 5.49.0
@@ -728,11 +731,6 @@ class NormalModule extends Module {
728
731
  this._sideEffectsStateGraph = undefined;
729
732
  /** @type {ConnectionState | undefined} */
730
733
  this._sideEffectsStateValue = undefined;
731
- /**
732
- * @private
733
- * @type {CodeGenerationResultData}
734
- */
735
- this._codeGeneratorData = new Map();
736
734
  }
737
735
 
738
736
  /**
@@ -1052,7 +1050,9 @@ class NormalModule extends Module {
1052
1050
  (parseJson(options));
1053
1051
  } catch (err) {
1054
1052
  throw new Error(
1055
- `Cannot parse string options: ${/** @type {Error} */ (err).message}`,
1053
+ `Cannot parse string options: ${
1054
+ /** @type {Error} */ (err).message
1055
+ }`,
1056
1056
  { cause: err }
1057
1057
  );
1058
1058
  }
@@ -1305,11 +1305,33 @@ class NormalModule extends Module {
1305
1305
  });
1306
1306
  return callback(error);
1307
1307
  }
1308
- const result = hooks.processResult.call(
1308
+ hooks.processResult.callAsync(
1309
1309
  /** @type {Result} */
1310
1310
  (result_),
1311
- this
1311
+ this,
1312
+ (hookErr, hookResult) => {
1313
+ if (hookErr) {
1314
+ // Named, so a tap's failure is not read as a loader's.
1315
+ return callback(
1316
+ new (getModuleBuildError())(
1317
+ hookErr instanceof Error
1318
+ ? hookErr
1319
+ : new (getNonErrorEmittedError())(hookErr),
1320
+ { from: "processResult hook" }
1321
+ )
1322
+ );
1323
+ }
1324
+
1325
+ finishResult(/** @type {Result} */ (hookResult));
1326
+ }
1312
1327
  );
1328
+ };
1329
+
1330
+ /**
1331
+ * @param {Result} result the result the hook settled on
1332
+ * @returns {void}
1333
+ */
1334
+ const finishResult = (result) => {
1313
1335
  const source = result[0];
1314
1336
  const sourceMap = result.length >= 1 ? result[1] : null;
1315
1337
  const extraInfo = result.length >= 2 ? result[2] : null;
@@ -1441,7 +1463,9 @@ class NormalModule extends Module {
1441
1463
  })
1442
1464
  ).catch((err) => {
1443
1465
  throw new Error(
1444
- `Failed to parse source map. ${/** @type {Error} */ (err).message}`
1466
+ `Failed to parse source map. ${
1467
+ /** @type {Error} */ (err).message
1468
+ }`
1445
1469
  );
1446
1470
  })
1447
1471
  );
@@ -1501,7 +1525,8 @@ class NormalModule extends Module {
1501
1525
  }
1502
1526
  buildInfo.cacheable = buildInfo.cacheable && result.cacheable;
1503
1527
  if (result.notCacheableReasons.length > 0) {
1504
- buildInfo.notCacheableReasons = result.notCacheableReasons;
1528
+ getBuildDiagnostics(buildInfo).notCacheableReasons =
1529
+ result.notCacheableReasons;
1505
1530
  }
1506
1531
  processResult(err, result.result);
1507
1532
  }
@@ -1609,7 +1634,6 @@ class NormalModule extends Module {
1609
1634
  };
1610
1635
  this.buildInfo = {
1611
1636
  cacheable: false,
1612
- notCacheableReasons: undefined,
1613
1637
  parsed: true,
1614
1638
  fileDependencies: undefined,
1615
1639
  contextDependencies: undefined,
@@ -1627,6 +1651,8 @@ class NormalModule extends Module {
1627
1651
  pureFunctions: undefined,
1628
1652
  inlineExports: undefined,
1629
1653
  moduleConcatenationBailout: undefined,
1654
+ moduleConcatenationRootBailout: undefined,
1655
+ diagnostics: undefined,
1630
1656
  needCreateRequire: undefined,
1631
1657
  usesTopLevelUsingDeclaration: undefined
1632
1658
  };
@@ -1892,10 +1918,19 @@ class NormalModule extends Module {
1892
1918
  runtimeRequirements.add(RuntimeGlobals.thisAsExports);
1893
1919
  }
1894
1920
 
1895
- const getData = () => this._codeGeneratorData;
1921
+ /** @type {CodeGenerationResult} */
1922
+ const resultEntry = {
1923
+ sources: new Map(),
1924
+ runtimeRequirements,
1925
+ data: undefined,
1926
+ hash: undefined
1927
+ };
1928
+
1929
+ const getData = () => {
1930
+ if (resultEntry.data === undefined) resultEntry.data = new Map();
1931
+ return resultEntry.data;
1932
+ };
1896
1933
 
1897
- /** @type {Sources} */
1898
- const sources = new Map();
1899
1934
  for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
1900
1935
  // TODO webpack@6 make generateError required
1901
1936
  const generator =
@@ -1930,17 +1965,10 @@ class NormalModule extends Module {
1930
1965
  });
1931
1966
 
1932
1967
  if (source) {
1933
- sources.set(type, new CachedSource(source));
1968
+ resultEntry.sources.set(type, new CachedSource(source));
1934
1969
  }
1935
1970
  }
1936
1971
 
1937
- /** @type {CodeGenerationResult} */
1938
- const resultEntry = {
1939
- sources,
1940
- runtimeRequirements,
1941
- data: this._codeGeneratorData,
1942
- hash: undefined
1943
- };
1944
1972
  return resultEntry;
1945
1973
  }
1946
1974
 
@@ -2116,7 +2144,6 @@ class NormalModule extends Module {
2116
2144
  write(this.error);
2117
2145
  write(this._lastSuccessfulBuildMeta);
2118
2146
  write(this._forceBuild);
2119
- write(this._codeGeneratorData);
2120
2147
  write(this.hot);
2121
2148
  super.serialize(context);
2122
2149
  }
@@ -2143,7 +2170,7 @@ class NormalModule extends Module {
2143
2170
  parserOptions: /** @type {EXPECTED_ANY} */ (null),
2144
2171
  generator: /** @type {EXPECTED_ANY} */ (null),
2145
2172
  generatorOptions: /** @type {EXPECTED_ANY} */ (null),
2146
- resolveOptions: /** @type {EXPECTED_ANY} */ (null),
2173
+ resolveOptions: undefined,
2147
2174
  extractSourceMap: /** @type {EXPECTED_ANY} */ (null)
2148
2175
  });
2149
2176
  obj.deserialize(context);
@@ -2160,7 +2187,6 @@ class NormalModule extends Module {
2160
2187
  this.error = read();
2161
2188
  this._lastSuccessfulBuildMeta = read();
2162
2189
  this._forceBuild = read();
2163
- this._codeGeneratorData = read();
2164
2190
  this.hot = read();
2165
2191
  super.deserialize(context);
2166
2192
  }
@@ -5,7 +5,6 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const asyncLib = require("neo-async");
9
8
  const {
10
9
  AsyncSeriesBailHook,
11
10
  AsyncSeriesHook,
@@ -30,6 +29,7 @@ const RuleSetCompiler = require("./rules/RuleSetCompiler");
30
29
  const UseEffectRulePlugin = require("./rules/UseEffectRulePlugin");
31
30
  const LazySet = require("./util/LazySet");
32
31
  const { getScheme } = require("./util/URLAbsoluteSpecifier");
32
+ const asyncLib = require("./util/async");
33
33
  const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge");
34
34
  const {
35
35
  applyCaseCorrections,
@@ -15,13 +15,6 @@ module.exports.amdDefine = "__webpack_require__.amdD";
15
15
  */
16
16
  module.exports.amdOptions = "__webpack_require__.amdO";
17
17
 
18
- /**
19
- * analyzable single-chunk `import()` that keeps `ensureChunk` timing and deduplication:
20
- * resolves immediately for an installed chunk, else runs the literal import and installs it
21
- * Signature: (chunkId, () => Promise) => Promise
22
- */
23
- module.exports.analyzableChunkImport = "__webpack_require__.ei";
24
-
25
18
  /**
26
19
  * Creates an async module. The body function must be a async function.
27
20
  * "module.exports" will be decorated with an AsyncModulePromise.
@@ -254,12 +247,28 @@ module.exports.hasCssModules = "has css modules";
254
247
  */
255
248
  module.exports.hasFetchPriority = "has fetch priority";
256
249
 
250
+ /**
251
+ * a flag when a deferred startup callback carries a priority
252
+ */
253
+ module.exports.hasChunkPriority = "has chunk priority";
254
+
257
255
  /**
258
256
  * the shorthand for Object.prototype.hasOwnProperty
259
257
  * using of it decreases the compiled bundle size
260
258
  */
261
259
  module.exports.hasOwnProperty = "__webpack_require__.o";
262
260
 
261
+ /**
262
+ * a flag when a deferred namespace is built from a known export list
263
+ */
264
+ module.exports.hasSealedDeferredNamespace = "has sealed deferred namespace";
265
+
266
+ /**
267
+ * a flag when a deferred namespace is synthesized from the module's exports
268
+ */
269
+ module.exports.hasSynthesizedDeferredNamespace =
270
+ "has synthesized deferred namespace";
271
+
263
272
  /**
264
273
  * function downloading the update manifest
265
274
  */
@@ -447,6 +456,11 @@ module.exports.setAnonymousDefaultName = "__webpack_require__.dn";
447
456
  */
448
457
  module.exports.shareScopeMap = "__webpack_require__.S";
449
458
 
459
+ /**
460
+ * wrap an exports object in a spec Module Namespace Exotic Object
461
+ */
462
+ module.exports.specNamespaceObject = "__webpack_require__.ns";
463
+
450
464
  /**
451
465
  * startup signal from runtime
452
466
  * This will be called when the runtime chunk has been loaded.
@@ -136,22 +136,31 @@ class RuntimeModule extends Module {
136
136
  updateHash(hash, context) {
137
137
  hash.update(this.name);
138
138
  hash.update(`${this.stage}`);
139
- try {
140
- const code =
141
- this.fullHash || this.dependentHash
142
- ? // Do not use getGeneratedCode here, because i. e. compilation hash might be not
143
- // ready at this point. We will cache it later instead.
144
- this.generate()
145
- : this.getGeneratedCode();
146
- if (code !== null && code !== undefined) {
147
- hash.update(code);
148
- }
149
- } catch (err) {
150
- hash.update(/** @type {Error} */ (err).message);
139
+ // A failing `generate()` propagates: hashing its message instead pins the etag
140
+ // of the code generation cache to a constant, which then serves stale code.
141
+ const code =
142
+ this.fullHash || this.dependentHash
143
+ ? // Do not use getGeneratedCode here, because i. e. compilation hash might be not
144
+ // ready at this point. We will cache it later instead.
145
+ this.generate()
146
+ : this.getGeneratedCode();
147
+ if (code !== null && code !== undefined) {
148
+ hash.update(code);
151
149
  }
152
150
  super.updateHash(hash, context);
153
151
  }
154
152
 
153
+ /**
154
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
155
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
156
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
157
+ */
158
+ getInstalledChunkHandlers() {
159
+ // Answering `null` rather than "none" keeps a module that never heard of this
160
+ // out of a dispatch that would skip the handler it installs.
161
+ return null;
162
+ }
163
+
155
164
  /**
156
165
  * Returns the source types this module can generate.
157
166
  * @returns {SourceTypes} types available (do not mutate)
@@ -244,6 +253,13 @@ class RuntimeModule extends Module {
244
253
  }
245
254
  }
246
255
 
256
+ /**
257
+ * The answer a runtime module gives when it installs no chunk handler at all
258
+ */
259
+ RuntimeModule.NO_CHUNK_HANDLERS =
260
+ /** @type {[string, string][]} */
261
+ ([]);
262
+
247
263
  /**
248
264
  * Runtime modules without any dependencies to other runtime modules
249
265
  */
@@ -81,6 +81,9 @@ const getGetWorkletBootstrapRuntimeModule = lazyModule(() =>
81
81
  const getGlobalRuntimeModule = lazyModule(() =>
82
82
  require("./runtime/GlobalRuntimeModule")
83
83
  );
84
+ const getSpecNamespaceObjectRuntimeModule = lazyModule(() =>
85
+ require("./runtime/SpecNamespaceObjectRuntimeModule")
86
+ );
84
87
  const getHasOwnPropertyRuntimeModule = lazyModule(() =>
85
88
  require("./runtime/HasOwnPropertyRuntimeModule")
86
89
  );
@@ -189,6 +192,9 @@ const TREE_DEPENDENCIES = {
189
192
  RuntimeGlobals.makeNamespaceObject,
190
193
  RuntimeGlobals.require
191
194
  ],
195
+ [RuntimeGlobals.deferredModuleAsyncTransitiveDependencies]: [
196
+ RuntimeGlobals.asyncModule
197
+ ],
192
198
  [RuntimeGlobals.makeOptimizedDeferredNamespaceObject]: [
193
199
  RuntimeGlobals.require
194
200
  ],
@@ -211,6 +217,7 @@ const SIMPLE_TREE_RUNTIME_MODULES = [
211
217
  getCreateFakeNamespaceObjectRuntimeModule
212
218
  ],
213
219
  [RuntimeGlobals.hasOwnProperty, getHasOwnPropertyRuntimeModule],
220
+ [RuntimeGlobals.specNamespaceObject, getSpecNamespaceObjectRuntimeModule],
214
221
  [
215
222
  RuntimeGlobals.compatGetDefaultExport,
216
223
  getCompatGetDefaultExportRuntimeModule
@@ -226,7 +233,6 @@ const SIMPLE_TREE_RUNTIME_MODULES = [
226
233
  [RuntimeGlobals.shareScopeMap, getShareRuntimeModule],
227
234
  [RuntimeGlobals.relativeUrl, getRelativeUrlRuntimeModule],
228
235
  [RuntimeGlobals.worker, getWorkerRuntimeModule],
229
- [RuntimeGlobals.onChunksLoaded, getOnChunksLoadedRuntimeModule],
230
236
  [RuntimeGlobals.scriptNonce, getNonceRuntimeModule],
231
237
  [RuntimeGlobals.toBinary, getToBinaryRuntimeModule]
232
238
  ];
@@ -313,6 +319,16 @@ class RuntimePlugin {
313
319
  return true;
314
320
  });
315
321
  }
322
+ compilation.hooks.runtimeRequirementInTree
323
+ .for(RuntimeGlobals.onChunksLoaded)
324
+ .tap(PLUGIN_NAME, (chunk, runtimeRequirement) => {
325
+ compilation.addLazyRuntimeModule(
326
+ chunk,
327
+ getOnChunksLoadedRuntimeModule,
328
+ (Ctor) => new Ctor(runtimeRequirement)
329
+ );
330
+ return true;
331
+ });
316
332
  compilation.hooks.runtimeRequirementInTree
317
333
  .for(RuntimeGlobals.definePropertyGetters)
318
334
  .tap(PLUGIN_NAME, (chunk, runtimeRequirement) => {
@@ -342,10 +358,20 @@ class RuntimePlugin {
342
358
  const asyncModule = runtimeRequirement.has(
343
359
  RuntimeGlobals.asyncModule
344
360
  );
361
+ const sealed = runtimeRequirement.has(
362
+ RuntimeGlobals.hasSealedDeferredNamespace
363
+ );
364
+ // An unmarked build keeps both shapes, so a call site that
365
+ // predates the markers still gets the permissive runtime.
366
+ const synthesized =
367
+ !sealed ||
368
+ runtimeRequirement.has(
369
+ RuntimeGlobals.hasSynthesizedDeferredNamespace
370
+ );
345
371
  compilation.addLazyRuntimeModule(
346
372
  chunk,
347
373
  getMakeDeferredNamespaceObjectRuntimeModule,
348
- (Ctor) => new Ctor(asyncModule)
374
+ (Ctor) => new Ctor(asyncModule, sealed, synthesized)
349
375
  );
350
376
  return true;
351
377
  });
@@ -399,7 +425,11 @@ class RuntimePlugin {
399
425
  compilation.addLazyRuntimeModule(
400
426
  chunk,
401
427
  getAsyncModuleRuntimeModule,
402
- (Ctor) => new Ctor(experiments.deferImport)
428
+ (Ctor) =>
429
+ new Ctor(
430
+ experiments.deferImport,
431
+ compilation.outputOptions.strictModuleErrorHandling
432
+ )
403
433
  );
404
434
  return true;
405
435
  });