webpack 5.76.1 → 5.88.2

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 (442) 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 +6 -1
  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 +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  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/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -8,16 +8,18 @@ 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 CreateScriptRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("trusted types script");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { compilation } = this;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
21
23
  const { runtimeTemplate, outputOptions } = compilation;
22
24
  const { trustedTypes } = outputOptions;
23
25
  const fn = RuntimeGlobals.createScript;
@@ -8,16 +8,18 @@ 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 CreateScriptUrlRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("trusted types script url");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { compilation } = this;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
21
23
  const { runtimeTemplate, outputOptions } = compilation;
22
24
  const { trustedTypes } = outputOptions;
23
25
  const fn = RuntimeGlobals.createScriptUrl;
@@ -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 DefinePropertyGettersRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("define property getters");
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.definePropertyGetters;
22
25
  return Template.asString([
23
26
  "// define getter functions for harmony exports",
@@ -8,30 +8,44 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class EnsureChunkRuntimeModule extends RuntimeModule {
14
+ /**
15
+ * @param {ReadonlySet<string>} runtimeRequirements runtime requirements
16
+ */
12
17
  constructor(runtimeRequirements) {
13
18
  super("ensure chunk");
14
19
  this.runtimeRequirements = runtimeRequirements;
15
20
  }
16
21
 
17
22
  /**
18
- * @returns {string} runtime code
23
+ * @returns {string | null} runtime code
19
24
  */
20
25
  generate() {
21
- const { runtimeTemplate } = this.compilation;
26
+ const compilation = /** @type {Compilation} */ (this.compilation);
27
+ const { runtimeTemplate } = compilation;
22
28
  // Check if there are non initial chunks which need to be imported using require-ensure
23
29
  if (this.runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)) {
30
+ const withFetchPriority = this.runtimeRequirements.has(
31
+ RuntimeGlobals.hasFetchPriority
32
+ );
24
33
  const handlers = RuntimeGlobals.ensureChunkHandlers;
25
34
  return Template.asString([
26
35
  `${handlers} = {};`,
27
36
  "// This file contains only the entry chunk.",
28
37
  "// The chunk loading function for additional chunks",
29
38
  `${RuntimeGlobals.ensureChunk} = ${runtimeTemplate.basicFunction(
30
- "chunkId",
39
+ `chunkId${withFetchPriority ? ", fetchPriority" : ""}`,
31
40
  [
32
41
  `return Promise.all(Object.keys(${handlers}).reduce(${runtimeTemplate.basicFunction(
33
42
  "promises, key",
34
- [`${handlers}[key](chunkId, promises);`, "return promises;"]
43
+ [
44
+ `${handlers}[key](chunkId, promises${
45
+ withFetchPriority ? ", fetchPriority" : ""
46
+ });`,
47
+ "return promises;"
48
+ ]
35
49
  )}, []));`
36
50
  ]
37
51
  )};`
@@ -10,6 +10,7 @@ const Template = require("../Template");
10
10
  const { first } = require("../util/SetHelpers");
11
11
 
12
12
  /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
14
  /** @typedef {import("../Compilation")} Compilation */
14
15
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
15
16
  /** @typedef {import("../Compilation").PathData} PathData */
@@ -34,24 +35,19 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
34
35
  }
35
36
 
36
37
  /**
37
- * @returns {string} runtime code
38
+ * @returns {string | null} runtime code
38
39
  */
39
40
  generate() {
40
- const {
41
- global,
42
- chunk,
43
- chunkGraph,
44
- contentType,
45
- getFilenameForChunk,
46
- allChunks,
47
- compilation
48
- } = this;
41
+ const { global, contentType, getFilenameForChunk, allChunks } = this;
42
+ const compilation = /** @type {Compilation} */ (this.compilation);
43
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
44
+ const chunk = /** @type {Chunk} */ (this.chunk);
49
45
  const { runtimeTemplate } = compilation;
50
46
 
51
47
  /** @type {Map<string | FilenameFunction, Set<Chunk>>} */
52
48
  const chunkFilenames = new Map();
53
49
  let maxChunks = 0;
54
- /** @type {string} */
50
+ /** @type {string | undefined} */
55
51
  let dynamicFilename;
56
52
 
57
53
  /**
@@ -69,9 +65,20 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
69
65
  if (typeof chunkFilename === "string") {
70
66
  if (set.size < maxChunks) return;
71
67
  if (set.size === maxChunks) {
72
- if (chunkFilename.length < dynamicFilename.length) return;
73
- if (chunkFilename.length === dynamicFilename.length) {
74
- if (chunkFilename < dynamicFilename) return;
68
+ if (
69
+ chunkFilename.length <
70
+ /** @type {string} */ (dynamicFilename).length
71
+ ) {
72
+ return;
73
+ }
74
+
75
+ if (
76
+ chunkFilename.length ===
77
+ /** @type {string} */ (dynamicFilename).length
78
+ ) {
79
+ if (chunkFilename < /** @type {string} */ (dynamicFilename)) {
80
+ return;
81
+ }
75
82
  }
76
83
  }
77
84
  maxChunks = set.size;
@@ -108,7 +115,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
108
115
  addChunk(entrypoint.chunks[entrypoint.chunks.length - 1]);
109
116
  }
110
117
 
111
- /** @type {Map<string, Set<string | number>>} */
118
+ /** @type {Map<string, Set<string | number | null>>} */
112
119
  const staticUrls = new Map();
113
120
  /** @type {Set<Chunk>} */
114
121
  const dynamicUrlChunks = new Set();
@@ -132,6 +139,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
132
139
  const s = JSON.stringify(str);
133
140
  return s.slice(1, s.length - 1);
134
141
  };
142
+ /**
143
+ * @param {string} value string
144
+ * @returns {function(number): string} string to put in quotes with length
145
+ */
135
146
  const unquotedStringifyWithLength = value => length =>
136
147
  unquotedStringify(`${value}`.slice(0, length));
137
148
  const chunkFilenameValue =
@@ -148,10 +159,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
148
159
  hashWithLength: length =>
149
160
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
150
161
  chunk: {
151
- id: unquotedStringify(c.id),
152
- hash: unquotedStringify(c.renderedHash),
153
- hashWithLength: unquotedStringifyWithLength(c.renderedHash),
154
- name: unquotedStringify(c.name || c.id),
162
+ id: unquotedStringify(/** @type {number | string} */ (c.id)),
163
+ hash: unquotedStringify(/** @type {string} */ (c.renderedHash)),
164
+ hashWithLength: unquotedStringifyWithLength(
165
+ /** @type {string} */ (c.renderedHash)
166
+ ),
167
+ name: unquotedStringify(
168
+ c.name || /** @type {number | string} */ (c.id)
169
+ ),
155
170
  contentHash: {
156
171
  [contentType]: unquotedStringify(c.contentHash[contentType])
157
172
  },
@@ -183,8 +198,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
183
198
  * @returns {string} code with static mapping of results of fn
184
199
  */
185
200
  const createMap = fn => {
201
+ /** @type {Record<number | string, number | string>} */
186
202
  const obj = {};
187
203
  let useId = false;
204
+ /** @type {number | string | undefined} */
188
205
  let lastKey;
189
206
  let entries = 0;
190
207
  for (const c of dynamicUrlChunks) {
@@ -192,8 +209,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
192
209
  if (value === c.id) {
193
210
  useId = true;
194
211
  } else {
195
- obj[c.id] = value;
196
- lastKey = c.id;
212
+ obj[/** @type {number | string} */ (c.id)] = value;
213
+ lastKey = /** @type {number | string} */ (c.id);
197
214
  entries++;
198
215
  }
199
216
  }
@@ -201,9 +218,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
201
218
  if (entries === 1) {
202
219
  return useId
203
220
  ? `(chunkId === ${JSON.stringify(lastKey)} ? ${JSON.stringify(
204
- obj[lastKey]
221
+ obj[/** @type {number | string} */ (lastKey)]
205
222
  )} : chunkId)`
206
- : JSON.stringify(obj[lastKey]);
223
+ : JSON.stringify(obj[/** @type {number | string} */ (lastKey)]);
207
224
  }
208
225
  return useId
209
226
  ? `(${JSON.stringify(obj)}[chunkId] || chunkId)`
@@ -234,9 +251,11 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
234
251
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
235
252
  chunk: {
236
253
  id: `" + chunkId + "`,
237
- hash: mapExpr(c => c.renderedHash),
238
- hashWithLength: mapExprWithLength(c => c.renderedHash),
239
- name: mapExpr(c => c.name || c.id),
254
+ hash: mapExpr(c => /** @type {string} */ (c.renderedHash)),
255
+ hashWithLength: mapExprWithLength(
256
+ c => /** @type {string} */ (c.renderedHash)
257
+ ),
258
+ name: mapExpr(c => c.name || /** @type {number | string} */ (c.id)),
240
259
  contentHash: {
241
260
  [contentType]: mapExpr(c => c.contentHash[contentType])
242
261
  },
@@ -16,12 +16,13 @@ class GetFullHashRuntimeModule extends RuntimeModule {
16
16
  }
17
17
 
18
18
  /**
19
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
20
20
  */
21
21
  generate() {
22
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
23
24
  return `${RuntimeGlobals.getFullHash} = ${runtimeTemplate.returningFunction(
24
- JSON.stringify(this.compilation.hash || "XXXX")
25
+ JSON.stringify(compilation.hash || "XXXX")
25
26
  )}`;
26
27
  }
27
28
  }
@@ -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("../Chunk")} Chunk */
11
12
  /** @typedef {import("../Compilation")} Compilation */
12
13
 
13
14
  class GetMainFilenameRuntimeModule extends RuntimeModule {
@@ -23,10 +24,12 @@ class GetMainFilenameRuntimeModule 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
- const { global, filename, compilation, chunk } = this;
30
+ const { global, filename } = this;
31
+ const compilation = /** @type {Compilation} */ (this.compilation);
32
+ const chunk = /** @type {Chunk} */ (this.chunk);
30
33
  const { runtimeTemplate } = compilation;
31
34
  const url = compilation.getPath(JSON.stringify(filename), {
32
35
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
@@ -8,9 +8,11 @@ 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 GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
12
14
  /**
13
- * @param {Set<string>} runtimeRequirements runtime requirements
15
+ * @param {ReadonlySet<string>} runtimeRequirements runtime requirements
14
16
  */
15
17
  constructor(runtimeRequirements) {
16
18
  super("trusted types policy");
@@ -18,13 +20,16 @@ class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
18
20
  }
19
21
 
20
22
  /**
21
- * @returns {string} runtime code
23
+ * @returns {string | null} runtime code
22
24
  */
23
25
  generate() {
24
- const { compilation } = this;
26
+ const compilation = /** @type {Compilation} */ (this.compilation);
25
27
  const { runtimeTemplate, outputOptions } = compilation;
26
28
  const { trustedTypes } = outputOptions;
27
29
  const fn = RuntimeGlobals.getTrustedTypesPolicy;
30
+ const wrapPolicyCreationInTryCatch = trustedTypes
31
+ ? trustedTypes.onPolicyCreationFailure === "continue"
32
+ : false;
28
33
 
29
34
  return Template.asString([
30
35
  "var policy;",
@@ -58,9 +63,25 @@ class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
58
63
  ? [
59
64
  'if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {',
60
65
  Template.indent([
61
- `policy = trustedTypes.createPolicy(${JSON.stringify(
62
- trustedTypes.policyName
63
- )}, policy);`
66
+ ...(wrapPolicyCreationInTryCatch ? ["try {"] : []),
67
+ ...[
68
+ `policy = trustedTypes.createPolicy(${JSON.stringify(
69
+ trustedTypes.policyName
70
+ )}, policy);`
71
+ ].map(line =>
72
+ wrapPolicyCreationInTryCatch ? Template.indent(line) : line
73
+ ),
74
+ ...(wrapPolicyCreationInTryCatch
75
+ ? [
76
+ "} catch (e) {",
77
+ Template.indent([
78
+ `console.warn('Could not create trusted-types policy ${JSON.stringify(
79
+ trustedTypes.policyName
80
+ )}');`
81
+ ]),
82
+ "}"
83
+ ]
84
+ : [])
64
85
  ]),
65
86
  "}"
66
87
  ]
@@ -14,7 +14,7 @@ class GlobalRuntimeModule extends RuntimeModule {
14
14
  }
15
15
 
16
16
  /**
17
- * @returns {string} runtime code
17
+ * @returns {string | null} runtime code
18
18
  */
19
19
  generate() {
20
20
  return Template.asString([
@@ -9,16 +9,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
+ /** @typedef {import("../Compilation")} Compilation */
13
+
12
14
  class HasOwnPropertyRuntimeModule extends RuntimeModule {
13
15
  constructor() {
14
16
  super("hasOwnProperty shorthand");
15
17
  }
16
18
 
17
19
  /**
18
- * @returns {string} runtime code
20
+ * @returns {string | null} runtime code
19
21
  */
20
22
  generate() {
21
- const { runtimeTemplate } = this.compilation;
23
+ const compilation = /** @type {Compilation} */ (this.compilation);
24
+ const { runtimeTemplate } = compilation;
22
25
 
23
26
  return Template.asString([
24
27
  `${RuntimeGlobals.hasOwnProperty} = ${runtimeTemplate.returningFunction(
@@ -44,17 +44,19 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
44
44
 
45
45
  /**
46
46
  * @param {boolean=} withCreateScriptUrl use create script url for trusted types
47
+ * @param {boolean=} withFetchPriority use `fetchPriority` attribute
47
48
  */
48
- constructor(withCreateScriptUrl) {
49
+ constructor(withCreateScriptUrl, withFetchPriority) {
49
50
  super("load script");
50
51
  this._withCreateScriptUrl = withCreateScriptUrl;
52
+ this._withFetchPriority = withFetchPriority;
51
53
  }
52
54
 
53
55
  /**
54
- * @returns {string} runtime code
56
+ * @returns {string | null} runtime code
55
57
  */
56
58
  generate() {
57
- const { compilation } = this;
59
+ const compilation = /** @type {Compilation} */ (this.compilation);
58
60
  const { runtimeTemplate, outputOptions } = compilation;
59
61
  const {
60
62
  scriptType,
@@ -72,7 +74,7 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
72
74
  "script = document.createElement('script');",
73
75
  scriptType ? `script.type = ${JSON.stringify(scriptType)};` : "",
74
76
  charset ? "script.charset = 'utf-8';" : "",
75
- `script.timeout = ${loadTimeout / 1000};`,
77
+ `script.timeout = ${/** @type {number} */ (loadTimeout) / 1000};`,
76
78
  `if (${RuntimeGlobals.scriptNonce}) {`,
77
79
  Template.indent(
78
80
  `script.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
@@ -81,6 +83,15 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
81
83
  uniqueName
82
84
  ? 'script.setAttribute("data-webpack", dataWebpackPrefix + key);'
83
85
  : "",
86
+ this._withFetchPriority
87
+ ? Template.asString([
88
+ "if(fetchPriority) {",
89
+ Template.indent(
90
+ 'script.setAttribute("fetchpriority", fetchPriority);'
91
+ ),
92
+ "}"
93
+ ])
94
+ : "",
84
95
  `script.src = ${
85
96
  this._withCreateScriptUrl
86
97
  ? `${RuntimeGlobals.createScriptUrl}(url)`
@@ -105,54 +116,58 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
105
116
  ? `var dataWebpackPrefix = ${JSON.stringify(uniqueName + ":")};`
106
117
  : "// data-webpack is not used as build has no uniqueName",
107
118
  "// loadScript function to load a script via script tag",
108
- `${fn} = ${runtimeTemplate.basicFunction("url, done, key, chunkId", [
109
- "if(inProgress[url]) { inProgress[url].push(done); return; }",
110
- "var script, needAttach;",
111
- "if(key !== undefined) {",
112
- Template.indent([
113
- 'var scripts = document.getElementsByTagName("script");',
114
- "for(var i = 0; i < scripts.length; i++) {",
119
+ `${fn} = ${runtimeTemplate.basicFunction(
120
+ `url, done, key, chunkId${
121
+ this._withFetchPriority ? ", fetchPriority" : ""
122
+ }`,
123
+ [
124
+ "if(inProgress[url]) { inProgress[url].push(done); return; }",
125
+ "var script, needAttach;",
126
+ "if(key !== undefined) {",
127
+ Template.indent([
128
+ 'var scripts = document.getElementsByTagName("script");',
129
+ "for(var i = 0; i < scripts.length; i++) {",
130
+ Template.indent([
131
+ "var s = scripts[i];",
132
+ `if(s.getAttribute("src") == url${
133
+ uniqueName
134
+ ? ' || s.getAttribute("data-webpack") == dataWebpackPrefix + key'
135
+ : ""
136
+ }) { script = s; break; }`
137
+ ]),
138
+ "}"
139
+ ]),
140
+ "}",
141
+ "if(!script) {",
115
142
  Template.indent([
116
- "var s = scripts[i];",
117
- `if(s.getAttribute("src") == url${
118
- uniqueName
119
- ? ' || s.getAttribute("data-webpack") == dataWebpackPrefix + key'
120
- : ""
121
- }) { script = s; break; }`
143
+ "needAttach = true;",
144
+ createScript.call(code, /** @type {Chunk} */ (this.chunk))
122
145
  ]),
123
- "}"
124
- ]),
125
- "}",
126
- "if(!script) {",
127
- Template.indent([
128
- "needAttach = true;",
129
- createScript.call(code, this.chunk)
130
- ]),
131
- "}",
132
- "inProgress[url] = [done];",
133
- "var onScriptComplete = " +
134
- runtimeTemplate.basicFunction(
135
- "prev, event",
136
- Template.asString([
137
- "// avoid mem leaks in IE.",
138
- "script.onerror = script.onload = null;",
139
- "clearTimeout(timeout);",
140
- "var doneFns = inProgress[url];",
141
- "delete inProgress[url];",
142
- "script.parentNode && script.parentNode.removeChild(script);",
143
- `doneFns && doneFns.forEach(${runtimeTemplate.returningFunction(
144
- "fn(event)",
145
- "fn"
146
- )});`,
147
- "if(prev) return prev(event);"
148
- ])
149
- ) +
150
- ";",
151
- `var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), ${loadTimeout});`,
152
- "script.onerror = onScriptComplete.bind(null, script.onerror);",
153
- "script.onload = onScriptComplete.bind(null, script.onload);",
154
- "needAttach && document.head.appendChild(script);"
155
- ])};`
146
+ "}",
147
+ "inProgress[url] = [done];",
148
+ "var onScriptComplete = " +
149
+ runtimeTemplate.basicFunction(
150
+ "prev, event",
151
+ Template.asString([
152
+ "// avoid mem leaks in IE.",
153
+ "script.onerror = script.onload = null;",
154
+ "clearTimeout(timeout);",
155
+ "var doneFns = inProgress[url];",
156
+ "delete inProgress[url];",
157
+ "script.parentNode && script.parentNode.removeChild(script);",
158
+ `doneFns && doneFns.forEach(${runtimeTemplate.returningFunction(
159
+ "fn(event)",
160
+ "fn"
161
+ )});`,
162
+ "if(prev) return prev(event);"
163
+ ])
164
+ ),
165
+ `var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), ${loadTimeout});`,
166
+ "script.onerror = onScriptComplete.bind(null, script.onerror);",
167
+ "script.onload = onScriptComplete.bind(null, script.onload);",
168
+ "needAttach && document.head.appendChild(script);"
169
+ ]
170
+ )};`
156
171
  ]);
157
172
  }
158
173
  }
@@ -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 MakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("make 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.makeNamespaceObject;
22
25
  return Template.asString([
23
26
  "// define __esModule on exports",
@@ -14,7 +14,7 @@ class NonceRuntimeModule extends RuntimeModule {
14
14
  }
15
15
 
16
16
  /**
17
- * @returns {string} runtime code
17
+ * @returns {string | null} runtime code
18
18
  */
19
19
  generate() {
20
20
  return `${RuntimeGlobals.scriptNonce} = undefined;`;
@@ -8,16 +8,18 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class OnChunksLoadedRuntimeModule extends RuntimeModule {
12
14
  constructor() {
13
15
  super("chunk loaded");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { compilation } = this;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
21
23
  const { runtimeTemplate } = compilation;
22
24
  return Template.asString([
23
25
  "var deferred = [];",
@@ -7,17 +7,24 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
10
13
  class PublicPathRuntimeModule extends RuntimeModule {
14
+ /**
15
+ * @param {OutputOptions["publicPath"]} publicPath public path
16
+ */
11
17
  constructor(publicPath) {
12
18
  super("publicPath", RuntimeModule.STAGE_BASIC);
13
19
  this.publicPath = publicPath;
14
20
  }
15
21
 
16
22
  /**
17
- * @returns {string} runtime code
23
+ * @returns {string | null} runtime code
18
24
  */
19
25
  generate() {
20
- const { compilation, publicPath } = this;
26
+ const { publicPath } = this;
27
+ const compilation = /** @type {Compilation} */ (this.compilation);
21
28
 
22
29
  return `${RuntimeGlobals.publicPath} = ${JSON.stringify(
23
30
  compilation.getPath(publicPath || "", {
@@ -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 RelativeUrlRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("relative url");
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
  return Template.asString([
22
25
  `${RuntimeGlobals.relativeUrl} = function RelativeURL(url) {`,
23
26
  Template.indent([