webpack 5.76.1 → 5.88.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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -41,7 +41,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
41
41
  /**
42
42
  * @callback ChunkFilterFunction
43
43
  * @param {Chunk} chunk
44
- * @returns {boolean}
44
+ * @returns {boolean | undefined}
45
45
  */
46
46
 
47
47
  /**
@@ -69,7 +69,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
69
69
  * @property {number=} maxInitialRequests
70
70
  * @property {(string | function(PathData, AssetInfo=): string)=} filename
71
71
  * @property {string=} idHint
72
- * @property {string} automaticNameDelimiter
72
+ * @property {string=} automaticNameDelimiter
73
73
  * @property {boolean=} reuseExistingChunk
74
74
  * @property {boolean=} usedExports
75
75
  */
@@ -254,12 +254,24 @@ const compareEntries = (a, b) => {
254
254
  return compareModuleIterables(modulesA, modulesB);
255
255
  };
256
256
 
257
+ /**
258
+ * @param {Chunk} chunk the chunk
259
+ * @returns {boolean} true, if the chunk is an entry chunk
260
+ */
257
261
  const INITIAL_CHUNK_FILTER = chunk => chunk.canBeInitial();
262
+ /**
263
+ * @param {Chunk} chunk the chunk
264
+ * @returns {boolean} true, if the chunk is an async chunk
265
+ */
258
266
  const ASYNC_CHUNK_FILTER = chunk => !chunk.canBeInitial();
267
+ /**
268
+ * @param {Chunk} chunk the chunk
269
+ * @returns {boolean} always true
270
+ */
259
271
  const ALL_CHUNK_FILTER = chunk => true;
260
272
 
261
273
  /**
262
- * @param {OptimizationSplitChunksSizes} value the sizes
274
+ * @param {OptimizationSplitChunksSizes | undefined} value the sizes
263
275
  * @param {string[]} defaultSizeTypes the default size types
264
276
  * @returns {SplitChunksSizes} normalized representation
265
277
  */
@@ -386,8 +398,8 @@ const totalSize = sizes => {
386
398
  };
387
399
 
388
400
  /**
389
- * @param {false|string|Function} name the chunk name
390
- * @returns {GetName} a function to get the name of the chunk
401
+ * @param {false|string|Function|undefined} name the chunk name
402
+ * @returns {GetName | undefined} a function to get the name of the chunk
391
403
  */
392
404
  const normalizeName = name => {
393
405
  if (typeof name === "string") {
@@ -412,6 +424,11 @@ const normalizeChunksFilter = chunks => {
412
424
  if (chunks === "all") {
413
425
  return ALL_CHUNK_FILTER;
414
426
  }
427
+ if (chunks instanceof RegExp) {
428
+ return chunk => {
429
+ return chunk.name ? chunks.test(chunk.name) : false;
430
+ };
431
+ }
415
432
  if (typeof chunks === "function") {
416
433
  return chunks;
417
434
  }
@@ -839,6 +856,10 @@ module.exports = class SplitChunksPlugin {
839
856
  }
840
857
  return key;
841
858
  };
859
+ /**
860
+ * @param {bigint | Chunk} key key of the chunks
861
+ * @returns {string} stringified key
862
+ */
842
863
  const keyToString = key => {
843
864
  if (typeof key === "bigint") return key.toString(16);
844
865
  return chunkIndexMap.get(key).toString(16);
@@ -910,6 +931,10 @@ module.exports = class SplitChunksPlugin {
910
931
  // group these set of chunks by count
911
932
  // to allow to check less sets via isSubset
912
933
  // (only smaller sets can be subset)
934
+ /**
935
+ * @param {IterableIterator<Set<Chunk>>} chunkSets set of sets of chunks
936
+ * @returns {Map<number, Array<Set<Chunk>>>} map of sets of chunks by count
937
+ */
913
938
  const groupChunkSetsByCount = chunkSets => {
914
939
  /** @type {Map<number, Array<Set<Chunk>>>} */
915
940
  const chunkSetsByCount = new Map();
@@ -1019,8 +1044,9 @@ module.exports = class SplitChunksPlugin {
1019
1044
  entry = new WeakMap();
1020
1045
  selectedChunksCacheByChunksSet.set(chunks, entry);
1021
1046
  }
1022
- /** @type {SelectedChunksResult} */
1023
- let entry2 = entry.get(chunkFilter);
1047
+ let entry2 =
1048
+ /** @type {SelectedChunksResult} */
1049
+ (entry.get(chunkFilter));
1024
1050
  if (entry2 === undefined) {
1025
1051
  /** @type {Chunk[]} */
1026
1052
  const selectedChunks = [];
@@ -1068,11 +1094,9 @@ module.exports = class SplitChunksPlugin {
1068
1094
  // Break if minimum number of chunks is not reached
1069
1095
  if (selectedChunks.length < cacheGroup.minChunks) return;
1070
1096
  // Determine name for split chunk
1071
- const name = cacheGroup.getName(
1072
- module,
1073
- selectedChunks,
1074
- cacheGroup.key
1075
- );
1097
+ const name =
1098
+ /** @type {string} */
1099
+ (cacheGroup.getName(module, selectedChunks, cacheGroup.key));
1076
1100
  // Check if the name is ok
1077
1101
  const existingChunk = compilation.namedChunks.get(name);
1078
1102
  if (existingChunk) {
@@ -1139,7 +1163,7 @@ module.exports = class SplitChunksPlugin {
1139
1163
  ? ` name:${name}`
1140
1164
  : ` chunks:${keyToString(selectedChunksKey)}`);
1141
1165
  // Add module to maps
1142
- let info = chunksInfoMap.get(key);
1166
+ let info = /** @type {ChunksInfoItem} */ (chunksInfoMap.get(key));
1143
1167
  if (info === undefined) {
1144
1168
  chunksInfoMap.set(
1145
1169
  key,
@@ -1204,7 +1228,9 @@ module.exports = class SplitChunksPlugin {
1204
1228
  getExportsChunkSetsInGraph();
1205
1229
  /** @type {Set<Set<Chunk> | Chunk>} */
1206
1230
  const set = new Set();
1207
- const groupedByUsedExports = groupedByExportsMap.get(module);
1231
+ const groupedByUsedExports =
1232
+ /** @type {Iterable<Chunk[]>} */
1233
+ (groupedByExportsMap.get(module));
1208
1234
  for (const chunks of groupedByUsedExports) {
1209
1235
  const chunksKey = getKey(chunks);
1210
1236
  for (const comb of getExportsCombinations(chunksKey))
@@ -1228,7 +1254,10 @@ module.exports = class SplitChunksPlugin {
1228
1254
  if (count < cacheGroup.minChunks) continue;
1229
1255
  // Select chunks by configuration
1230
1256
  const { chunks: selectedChunks, key: selectedChunksKey } =
1231
- getSelectedChunks(chunkCombination, cacheGroup.chunksFilter);
1257
+ getSelectedChunks(
1258
+ chunkCombination,
1259
+ /** @type {ChunkFilterFunction} */ (cacheGroup.chunksFilter)
1260
+ );
1232
1261
 
1233
1262
  addModuleToChunksInfoMap(
1234
1263
  cacheGroup,
@@ -1320,12 +1349,13 @@ module.exports = class SplitChunksPlugin {
1320
1349
  }
1321
1350
  }
1322
1351
 
1323
- const item = bestEntry;
1324
- chunksInfoMap.delete(bestEntryKey);
1352
+ const item = /** @type {ChunksInfoItem} */ (bestEntry);
1353
+ chunksInfoMap.delete(/** @type {string} */ (bestEntryKey));
1325
1354
 
1355
+ /** @type {Chunk["name"] | undefined} */
1326
1356
  let chunkName = item.name;
1327
1357
  // Variable for the new chunk (lazy created)
1328
- /** @type {Chunk} */
1358
+ /** @type {Chunk | undefined} */
1329
1359
  let newChunk;
1330
1360
  // When no chunk name, check if we can reuse a chunk instead of creating a new one
1331
1361
  let isExistingChunk = false;
@@ -1394,14 +1424,18 @@ module.exports = class SplitChunksPlugin {
1394
1424
  ) {
1395
1425
  for (const chunk of usedChunks) {
1396
1426
  // respect max requests
1397
- const maxRequests = chunk.isOnlyInitial()
1398
- ? item.cacheGroup.maxInitialRequests
1399
- : chunk.canBeInitial()
1400
- ? Math.min(
1401
- item.cacheGroup.maxInitialRequests,
1402
- item.cacheGroup.maxAsyncRequests
1403
- )
1404
- : item.cacheGroup.maxAsyncRequests;
1427
+ const maxRequests = /** @type {number} */ (
1428
+ chunk.isOnlyInitial()
1429
+ ? item.cacheGroup.maxInitialRequests
1430
+ : chunk.canBeInitial()
1431
+ ? Math.min(
1432
+ /** @type {number} */
1433
+ (item.cacheGroup.maxInitialRequests),
1434
+ /** @type {number} */
1435
+ (item.cacheGroup.maxAsyncRequests)
1436
+ )
1437
+ : item.cacheGroup.maxAsyncRequests
1438
+ );
1405
1439
  if (
1406
1440
  isFinite(maxRequests) &&
1407
1441
  getRequests(chunk) >= maxRequests
@@ -1421,8 +1455,12 @@ module.exports = class SplitChunksPlugin {
1421
1455
  // Were some (invalid) chunks removed from usedChunks?
1422
1456
  // => readd all modules to the queue, as things could have been changed
1423
1457
  if (usedChunks.size < item.chunks.size) {
1424
- if (isExistingChunk) usedChunks.add(newChunk);
1425
- if (usedChunks.size >= item.cacheGroup.minChunks) {
1458
+ if (isExistingChunk)
1459
+ usedChunks.add(/** @type {Chunk} */ (newChunk));
1460
+ if (
1461
+ /** @type {number} */ (usedChunks.size) >=
1462
+ /** @type {number} */ (item.cacheGroup.minChunks)
1463
+ ) {
1426
1464
  const chunksArr = Array.from(usedChunks);
1427
1465
  for (const module of item.modules) {
1428
1466
  addModuleToChunksInfoMap(
@@ -1466,7 +1504,7 @@ module.exports = class SplitChunksPlugin {
1466
1504
  ) {
1467
1505
  // queue this item again to be processed again
1468
1506
  // without violating modules
1469
- chunksInfoMap.set(bestEntryKey, item);
1507
+ chunksInfoMap.set(/** @type {string} */ (bestEntryKey), item);
1470
1508
  }
1471
1509
  continue;
1472
1510
  }
@@ -1696,7 +1734,9 @@ module.exports = class SplitChunksPlugin {
1696
1734
  hashFilename(name, outputOptions);
1697
1735
  }
1698
1736
  if (i !== results.length - 1) {
1699
- const newPart = compilation.addChunk(name);
1737
+ const newPart = compilation.addChunk(
1738
+ /** @type {Chunk["name"]} */ (name)
1739
+ );
1700
1740
  chunk.split(newPart);
1701
1741
  newPart.chunkReason = chunk.chunkReason;
1702
1742
  // Add all modules to the new chunk
@@ -1711,7 +1751,7 @@ module.exports = class SplitChunksPlugin {
1711
1751
  }
1712
1752
  } else {
1713
1753
  // change the chunk to be a part
1714
- chunk.name = name;
1754
+ chunk.name = /** @type {Chunk["name"]} */ (name);
1715
1755
  }
1716
1756
  }
1717
1757
  }
@@ -95,7 +95,7 @@ module.exports = class SizeLimitsPlugin {
95
95
  }
96
96
 
97
97
  const size = info.size || source.size();
98
- if (size > assetSizeLimit) {
98
+ if (size > /** @type {number} */ (assetSizeLimit)) {
99
99
  assetsOverSizeLimit.push({
100
100
  name,
101
101
  size
@@ -114,7 +114,7 @@ module.exports = class SizeLimitsPlugin {
114
114
  for (const [name, entry] of compilation.entrypoints) {
115
115
  const size = getEntrypointSize(entry);
116
116
 
117
- if (size > entrypointSizeLimit) {
117
+ if (size > /** @type {number} */ (entrypointSizeLimit)) {
118
118
  entrypointsOverLimit.push({
119
119
  name: name,
120
120
  size: size,
@@ -131,14 +131,17 @@ module.exports = class SizeLimitsPlugin {
131
131
  // if !1, then 2, if !2 return
132
132
  if (assetsOverSizeLimit.length > 0) {
133
133
  warnings.push(
134
- new AssetsOverSizeLimitWarning(assetsOverSizeLimit, assetSizeLimit)
134
+ new AssetsOverSizeLimitWarning(
135
+ assetsOverSizeLimit,
136
+ /** @type {number} */ (assetSizeLimit)
137
+ )
135
138
  );
136
139
  }
137
140
  if (entrypointsOverLimit.length > 0) {
138
141
  warnings.push(
139
142
  new EntrypointsOverSizeLimitWarning(
140
143
  entrypointsOverLimit,
141
- entrypointSizeLimit
144
+ /** @type {number} */ (entrypointSizeLimit)
142
145
  )
143
146
  );
144
147
  }
@@ -7,6 +7,7 @@
7
7
  const RuntimeModule = require("../RuntimeModule");
8
8
  const Template = require("../Template");
9
9
 
10
+ /** @typedef {import("../Compilation")} Compilation */
10
11
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
11
12
 
12
13
  class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
@@ -23,11 +24,12 @@ class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
23
24
  }
24
25
 
25
26
  /**
26
- * @returns {string} runtime code
27
+ * @returns {string | null} runtime code
27
28
  */
28
29
  generate() {
29
30
  const { runtimeFunction, runtimeHandlers } = this;
30
- const { runtimeTemplate } = this.compilation;
31
+ const compilation = /** @type {Compilation} */ (this.compilation);
32
+ const { runtimeTemplate } = compilation;
31
33
  return Template.asString([
32
34
  `${runtimeHandlers} = {};`,
33
35
  `${runtimeFunction} = ${runtimeTemplate.basicFunction("chunkId", [
@@ -11,6 +11,8 @@ const ChunkPrefetchStartupRuntimeModule = require("./ChunkPrefetchStartupRuntime
11
11
  const ChunkPrefetchTriggerRuntimeModule = require("./ChunkPrefetchTriggerRuntimeModule");
12
12
  const ChunkPreloadTriggerRuntimeModule = require("./ChunkPreloadTriggerRuntimeModule");
13
13
 
14
+ /** @typedef {import("../Chunk")} Chunk */
15
+ /** @typedef {import("../ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
14
16
  /** @typedef {import("../Compiler")} Compiler */
15
17
 
16
18
  class ChunkPrefetchPreloadPlugin {
@@ -43,7 +45,7 @@ class ChunkPrefetchPreloadPlugin {
43
45
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
44
46
  "ChunkPrefetchPreloadPlugin",
45
47
  (chunk, set, { chunkGraph }) => {
46
- const chunkMap = chunk.getChildIdsByOrdersMap(chunkGraph, false);
48
+ const chunkMap = chunk.getChildIdsByOrdersMap(chunkGraph);
47
49
 
48
50
  if (chunkMap.prefetch) {
49
51
  set.add(RuntimeGlobals.prefetchChunk);
@@ -9,6 +9,7 @@ const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
11
  /** @typedef {import("../Chunk")} Chunk */
12
+ /** @typedef {import("../Compilation")} Compilation */
12
13
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
13
14
 
14
15
  class ChunkPrefetchStartupRuntimeModule extends RuntimeModule {
@@ -21,11 +22,13 @@ class ChunkPrefetchStartupRuntimeModule extends RuntimeModule {
21
22
  }
22
23
 
23
24
  /**
24
- * @returns {string} runtime code
25
+ * @returns {string | null} runtime code
25
26
  */
26
27
  generate() {
27
- const { startupChunks, chunk } = this;
28
- const { runtimeTemplate } = this.compilation;
28
+ const { startupChunks } = this;
29
+ const compilation = /** @type {Compilation} */ (this.compilation);
30
+ const chunk = /** @type {Chunk} */ (this.chunk);
31
+ const { runtimeTemplate } = compilation;
29
32
  return Template.asString(
30
33
  startupChunks.map(
31
34
  ({ onChunks, chunks }) =>
@@ -8,6 +8,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
11
12
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
12
13
 
13
14
  class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule {
@@ -20,11 +21,12 @@ class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule {
20
21
  }
21
22
 
22
23
  /**
23
- * @returns {string} runtime code
24
+ * @returns {string | null} runtime code
24
25
  */
25
26
  generate() {
26
27
  const { chunkMap } = this;
27
- const { runtimeTemplate } = this.compilation;
28
+ const compilation = /** @type {Compilation} */ (this.compilation);
29
+ const { runtimeTemplate } = compilation;
28
30
  const body = [
29
31
  "var chunks = chunkToChildrenMap[chunkId];",
30
32
  `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.prefetchChunk});`
@@ -8,6 +8,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
11
12
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
12
13
 
13
14
  class ChunkPreloadTriggerRuntimeModule extends RuntimeModule {
@@ -20,11 +21,12 @@ class ChunkPreloadTriggerRuntimeModule extends RuntimeModule {
20
21
  }
21
22
 
22
23
  /**
23
- * @returns {string} runtime code
24
+ * @returns {string | null} runtime code
24
25
  */
25
26
  generate() {
26
27
  const { chunkMap } = this;
27
- const { runtimeTemplate } = this.compilation;
28
+ const compilation = /** @type {Compilation} */ (this.compilation);
29
+ const { runtimeTemplate } = compilation;
28
30
  const body = [
29
31
  "var chunks = chunkToChildrenMap[chunkId];",
30
32
  `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.preloadChunk});`
@@ -8,6 +8,10 @@
8
8
  /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
9
9
 
10
10
  class BasicEffectRulePlugin {
11
+ /**
12
+ * @param {string} ruleProperty the rule property
13
+ * @param {string=} effectType the effect type
14
+ */
11
15
  constructor(ruleProperty, effectType) {
12
16
  this.ruleProperty = ruleProperty;
13
17
  this.effectType = effectType || ruleProperty;
@@ -9,6 +9,11 @@
9
9
  /** @typedef {import("./RuleSetCompiler").RuleCondition} RuleCondition */
10
10
 
11
11
  class BasicMatcherRulePlugin {
12
+ /**
13
+ * @param {string} ruleProperty the rule property
14
+ * @param {string=} dataProperty the data property
15
+ * @param {boolean=} invert if true, inverts the condition
16
+ */
12
17
  constructor(ruleProperty, dataProperty, invert) {
13
18
  this.ruleProperty = ruleProperty;
14
19
  this.dataProperty = dataProperty || ruleProperty;
@@ -150,9 +150,9 @@ class RuleSetCompiler {
150
150
  * @returns {CompiledRule[]} rules
151
151
  */
152
152
  compileRules(path, rules, refs) {
153
- return rules.map((rule, i) =>
154
- this.compileRule(`${path}[${i}]`, rule, refs)
155
- );
153
+ return rules
154
+ .filter(Boolean)
155
+ .map((rule, i) => this.compileRule(`${path}[${i}]`, rule, refs));
156
156
  }
157
157
 
158
158
  /**
@@ -106,9 +106,11 @@ class UseEffectRulePlugin {
106
106
  */
107
107
  const useToEffectsWithoutIdent = (path, items) => {
108
108
  if (Array.isArray(items)) {
109
- return items.map((item, idx) =>
110
- useToEffectRaw(`${path}[${idx}]`, "[[missing ident]]", item)
111
- );
109
+ return items
110
+ .filter(Boolean)
111
+ .map((item, idx) =>
112
+ useToEffectRaw(`${path}[${idx}]`, "[[missing ident]]", item)
113
+ );
112
114
  }
113
115
  return [useToEffectRaw(path, "[[missing ident]]", items)];
114
116
  };
@@ -120,7 +122,7 @@ class UseEffectRulePlugin {
120
122
  */
121
123
  const useToEffects = (path, items) => {
122
124
  if (Array.isArray(items)) {
123
- return items.map((item, idx) => {
125
+ return items.filter(Boolean).map((item, idx) => {
124
126
  const subPath = `${path}[${idx}]`;
125
127
  return useToEffect(subPath, subPath, item);
126
128
  });
@@ -8,23 +8,26 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class AsyncModuleRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("async module");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.asyncModule;
22
25
  return Template.asString([
23
26
  'var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";',
24
- 'var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__";',
27
+ `var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
25
28
  'var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";',
26
29
  `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
27
- "if(queue && !queue.d) {",
30
+ "if(queue && queue.d < 1) {",
28
31
  Template.indent([
29
32
  "queue.d = 1;",
30
33
  `queue.forEach(${runtimeTemplate.expressionFunction(
@@ -73,7 +76,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
73
76
  )};`,
74
77
  `${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
75
78
  "var queue;",
76
- "hasAwait && ((queue = []).d = 1);",
79
+ "hasAwait && ((queue = []).d = -1);",
77
80
  "var depQueues = new Set();",
78
81
  "var exports = module.exports;",
79
82
  "var currentDeps;",
@@ -121,7 +124,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
121
124
  "(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)",
122
125
  "err"
123
126
  )});`,
124
- "queue && (queue.d = 0);"
127
+ "queue && queue.d < 0 && (queue.d = 0);"
125
128
  ])};`
126
129
  ]);
127
130
  }
@@ -10,16 +10,18 @@ const Template = require("../Template");
10
10
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
11
11
  const { getUndoPath } = require("../util/identifier");
12
12
 
13
+ /** @typedef {import("../Compilation")} Compilation */
14
+
13
15
  class AutoPublicPathRuntimeModule extends RuntimeModule {
14
16
  constructor() {
15
17
  super("publicPath", RuntimeModule.STAGE_BASIC);
16
18
  }
17
19
 
18
20
  /**
19
- * @returns {string} runtime code
21
+ * @returns {string | null} runtime code
20
22
  */
21
23
  generate() {
22
- const { compilation } = this;
24
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
25
  const { scriptType, importMetaName, path } = compilation.outputOptions;
24
26
  const chunkName = compilation.getPath(
25
27
  JavascriptModulesPlugin.getChunkFilenameTemplate(
@@ -31,7 +33,11 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
31
33
  contentHashType: "javascript"
32
34
  }
33
35
  );
34
- const undoPath = getUndoPath(chunkName, path, false);
36
+ const undoPath = getUndoPath(
37
+ chunkName,
38
+ /** @type {string} */ (path),
39
+ false
40
+ );
35
41
 
36
42
  return Template.asString([
37
43
  "var scriptUrl;",
@@ -43,11 +49,16 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
43
49
  "if (!scriptUrl && document) {",
44
50
  Template.indent([
45
51
  `if (document.currentScript)`,
46
- Template.indent(`scriptUrl = document.currentScript.src`),
52
+ Template.indent(`scriptUrl = document.currentScript.src;`),
47
53
  "if (!scriptUrl) {",
48
54
  Template.indent([
49
55
  'var scripts = document.getElementsByTagName("script");',
50
- "if(scripts.length) scriptUrl = scripts[scripts.length - 1].src"
56
+ "if(scripts.length) {",
57
+ Template.indent([
58
+ "var i = scripts.length - 1;",
59
+ "while (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;"
60
+ ]),
61
+ "}"
51
62
  ]),
52
63
  "}"
53
64
  ]),
@@ -8,18 +8,22 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
 
11
+ /** @typedef {import("../../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+
11
14
  class BaseUriRuntimeModule extends RuntimeModule {
12
15
  constructor() {
13
16
  super("base uri", RuntimeModule.STAGE_ATTACH);
14
17
  }
15
18
 
16
19
  /**
17
- * @returns {string} runtime code
20
+ * @returns {string | null} runtime code
18
21
  */
19
22
  generate() {
20
- const { chunk } = this;
21
-
22
- const options = chunk.getEntryOptions();
23
+ const chunk = /** @type {Chunk} */ (this.chunk);
24
+ const options =
25
+ /** @type {EntryDescriptionNormalized} */
26
+ (chunk.getEntryOptions());
23
27
  return `${RuntimeGlobals.baseURI} = ${
24
28
  options.baseUri === undefined
25
29
  ? "undefined"
@@ -17,7 +17,7 @@ class ChunkNameRuntimeModule extends RuntimeModule {
17
17
  }
18
18
 
19
19
  /**
20
- * @returns {string} runtime code
20
+ * @returns {string | null} runtime code
21
21
  */
22
22
  generate() {
23
23
  return `${RuntimeGlobals.chunkName} = ${JSON.stringify(this.chunkName)};`;
@@ -8,16 +8,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class CompatGetDefaultExportRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("compat get default export");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.compatGetDefaultExport;
22
25
  return Template.asString([
23
26
  "// getDefaultExport function for compatibility with non-harmony modules",
@@ -7,6 +7,9 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
+ /** @typedef {import("../Chunk")} Chunk */
11
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
12
+ /** @typedef {import("../Compilation")} Compilation */
10
13
  /** @typedef {import("../MainTemplate")} MainTemplate */
11
14
 
12
15
  class CompatRuntimeModule extends RuntimeModule {
@@ -16,10 +19,12 @@ class CompatRuntimeModule extends RuntimeModule {
16
19
  }
17
20
 
18
21
  /**
19
- * @returns {string} runtime code
22
+ * @returns {string | null} runtime code
20
23
  */
21
24
  generate() {
22
- const { chunkGraph, chunk, compilation } = this;
25
+ const compilation = /** @type {Compilation} */ (this.compilation);
26
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
27
+ const chunk = /** @type {Chunk} */ (this.chunk);
23
28
  const {
24
29
  runtimeTemplate,
25
30
  mainTemplate,
@@ -8,16 +8,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class CreateFakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("create fake namespace object");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.createFakeNamespaceObject;
22
25
  return Template.asString([
23
26
  `var getProto = Object.getPrototypeOf ? ${runtimeTemplate.returningFunction(