webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -10,18 +10,17 @@ 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
- /** @typedef {import("../Compilation").PathData} PathData */
16
-
17
- /** @typedef {function(PathData, AssetInfo=): string} FilenameFunction */
16
+ /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
18
17
 
19
18
  class GetChunkFilenameRuntimeModule extends RuntimeModule {
20
19
  /**
21
20
  * @param {string} contentType the contentType to use the content hash for
22
21
  * @param {string} name kind of filename
23
22
  * @param {string} global function name to be assigned
24
- * @param {function(Chunk): string | FilenameFunction} getFilenameForChunk functor to get the filename or function
23
+ * @param {function(Chunk): TemplatePath} getFilenameForChunk functor to get the filename or function
25
24
  * @param {boolean} allChunks when false, only async chunks are included
26
25
  */
27
26
  constructor(contentType, name, global, getFilenameForChunk, allChunks) {
@@ -34,24 +33,19 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
34
33
  }
35
34
 
36
35
  /**
37
- * @returns {string} runtime code
36
+ * @returns {string | null} runtime code
38
37
  */
39
38
  generate() {
40
- const {
41
- global,
42
- chunk,
43
- chunkGraph,
44
- contentType,
45
- getFilenameForChunk,
46
- allChunks,
47
- compilation
48
- } = this;
39
+ const { global, contentType, getFilenameForChunk, allChunks } = this;
40
+ const compilation = /** @type {Compilation} */ (this.compilation);
41
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
42
+ const chunk = /** @type {Chunk} */ (this.chunk);
49
43
  const { runtimeTemplate } = compilation;
50
44
 
51
- /** @type {Map<string | FilenameFunction, Set<Chunk>>} */
45
+ /** @type {Map<string | TemplatePath, Set<Chunk>>} */
52
46
  const chunkFilenames = new Map();
53
47
  let maxChunks = 0;
54
- /** @type {string} */
48
+ /** @type {string | undefined} */
55
49
  let dynamicFilename;
56
50
 
57
51
  /**
@@ -69,9 +63,19 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
69
63
  if (typeof chunkFilename === "string") {
70
64
  if (set.size < maxChunks) return;
71
65
  if (set.size === maxChunks) {
72
- if (chunkFilename.length < dynamicFilename.length) return;
73
- if (chunkFilename.length === dynamicFilename.length) {
74
- if (chunkFilename < dynamicFilename) return;
66
+ if (
67
+ chunkFilename.length <
68
+ /** @type {string} */ (dynamicFilename).length
69
+ ) {
70
+ return;
71
+ }
72
+
73
+ if (
74
+ chunkFilename.length ===
75
+ /** @type {string} */ (dynamicFilename).length &&
76
+ chunkFilename < /** @type {string} */ (dynamicFilename)
77
+ ) {
78
+ return;
75
79
  }
76
80
  }
77
81
  maxChunks = set.size;
@@ -108,14 +112,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
108
112
  addChunk(entrypoint.chunks[entrypoint.chunks.length - 1]);
109
113
  }
110
114
 
111
- /** @type {Map<string, Set<string | number>>} */
115
+ /** @type {Map<string, Set<string | number | null>>} */
112
116
  const staticUrls = new Map();
113
117
  /** @type {Set<Chunk>} */
114
118
  const dynamicUrlChunks = new Set();
115
119
 
116
120
  /**
117
121
  * @param {Chunk} c the chunk
118
- * @param {string | FilenameFunction} chunkFilename the filename template for the chunk
122
+ * @param {string | TemplatePath} chunkFilename the filename template for the chunk
119
123
  * @returns {void}
120
124
  */
121
125
  const addStaticUrl = (c, chunkFilename) => {
@@ -130,8 +134,12 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
130
134
  return '" + chunkId + "';
131
135
  }
132
136
  const s = JSON.stringify(str);
133
- return s.slice(1, s.length - 1);
137
+ return s.slice(1, -1);
134
138
  };
139
+ /**
140
+ * @param {string} value string
141
+ * @returns {function(number): string} string to put in quotes with length
142
+ */
135
143
  const unquotedStringifyWithLength = value => length =>
136
144
  unquotedStringify(`${value}`.slice(0, length));
137
145
  const chunkFilenameValue =
@@ -141,17 +149,21 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
141
149
  chunk: c,
142
150
  contentHashType: contentType
143
151
  })
144
- )
152
+ )
145
153
  : JSON.stringify(chunkFilename);
146
154
  const staticChunkFilename = compilation.getPath(chunkFilenameValue, {
147
155
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
148
156
  hashWithLength: length =>
149
157
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
150
158
  chunk: {
151
- id: unquotedStringify(c.id),
152
- hash: unquotedStringify(c.renderedHash),
153
- hashWithLength: unquotedStringifyWithLength(c.renderedHash),
154
- name: unquotedStringify(c.name || c.id),
159
+ id: unquotedStringify(/** @type {number | string} */ (c.id)),
160
+ hash: unquotedStringify(/** @type {string} */ (c.renderedHash)),
161
+ hashWithLength: unquotedStringifyWithLength(
162
+ /** @type {string} */ (c.renderedHash)
163
+ ),
164
+ name: unquotedStringify(
165
+ c.name || /** @type {number | string} */ (c.id)
166
+ ),
155
167
  contentHash: {
156
168
  [contentType]: unquotedStringify(c.contentHash[contentType])
157
169
  },
@@ -183,8 +195,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
183
195
  * @returns {string} code with static mapping of results of fn
184
196
  */
185
197
  const createMap = fn => {
198
+ /** @type {Record<number | string, number | string>} */
186
199
  const obj = {};
187
200
  let useId = false;
201
+ /** @type {number | string | undefined} */
188
202
  let lastKey;
189
203
  let entries = 0;
190
204
  for (const c of dynamicUrlChunks) {
@@ -192,8 +206,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
192
206
  if (value === c.id) {
193
207
  useId = true;
194
208
  } else {
195
- obj[c.id] = value;
196
- lastKey = c.id;
209
+ obj[/** @type {number | string} */ (c.id)] = value;
210
+ lastKey = /** @type {number | string} */ (c.id);
197
211
  entries++;
198
212
  }
199
213
  }
@@ -201,9 +215,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
201
215
  if (entries === 1) {
202
216
  return useId
203
217
  ? `(chunkId === ${JSON.stringify(lastKey)} ? ${JSON.stringify(
204
- obj[lastKey]
205
- )} : chunkId)`
206
- : JSON.stringify(obj[lastKey]);
218
+ obj[/** @type {number | string} */ (lastKey)]
219
+ )} : chunkId)`
220
+ : JSON.stringify(obj[/** @type {number | string} */ (lastKey)]);
207
221
  }
208
222
  return useId
209
223
  ? `(${JSON.stringify(obj)}[chunkId] || chunkId)`
@@ -214,17 +228,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
214
228
  * @param {function(Chunk): string | number} fn function from chunk to value
215
229
  * @returns {string} code with static mapping of results of fn for including in quoted string
216
230
  */
217
- const mapExpr = fn => {
218
- return `" + ${createMap(fn)} + "`;
219
- };
231
+ const mapExpr = fn => `" + ${createMap(fn)} + "`;
220
232
 
221
233
  /**
222
234
  * @param {function(Chunk): string | number} fn function from chunk to value
223
235
  * @returns {function(number): string} function which generates code with static mapping of results of fn for including in quoted string for specific length
224
236
  */
225
- const mapExprWithLength = fn => length => {
226
- return `" + ${createMap(c => `${fn(c)}`.slice(0, length))} + "`;
227
- };
237
+ const mapExprWithLength = fn => length =>
238
+ `" + ${createMap(c => `${fn(c)}`.slice(0, length))} + "`;
228
239
 
229
240
  const url =
230
241
  dynamicFilename &&
@@ -234,9 +245,11 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
234
245
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
235
246
  chunk: {
236
247
  id: `" + chunkId + "`,
237
- hash: mapExpr(c => c.renderedHash),
238
- hashWithLength: mapExprWithLength(c => c.renderedHash),
239
- name: mapExpr(c => c.name || c.id),
248
+ hash: mapExpr(c => /** @type {string} */ (c.renderedHash)),
249
+ hashWithLength: mapExprWithLength(
250
+ c => /** @type {string} */ (c.renderedHash)
251
+ ),
252
+ name: mapExpr(c => c.name || /** @type {number | string} */ (c.id)),
240
253
  contentHash: {
241
254
  [contentType]: mapExpr(c => c.contentHash[contentType])
242
255
  },
@@ -266,13 +279,13 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
266
279
  : `{${Array.from(
267
280
  ids,
268
281
  id => `${JSON.stringify(id)}:1`
269
- ).join(",")}}[chunkId]`;
282
+ ).join(",")}}[chunkId]`;
270
283
  return `if (${condition}) return ${url};`;
271
284
  })
272
285
  ),
273
286
  "// return url for filenames based on template",
274
287
  `return ${url};`
275
- ]
288
+ ]
276
289
  : ["// return url for filenames based on template", `return ${url};`]
277
290
  )};`
278
291
  ]);
@@ -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}() + "`,
@@ -0,0 +1,98 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const RuntimeGlobals = require("../RuntimeGlobals");
8
+ const Template = require("../Template");
9
+ const HelperRuntimeModule = require("./HelperRuntimeModule");
10
+
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
13
+
14
+ class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
15
+ /**
16
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
17
+ */
18
+ constructor(runtimeRequirements) {
19
+ super("trusted types policy");
20
+ this.runtimeRequirements = runtimeRequirements;
21
+ }
22
+
23
+ /**
24
+ * @returns {string | null} runtime code
25
+ */
26
+ generate() {
27
+ const compilation = /** @type {Compilation} */ (this.compilation);
28
+ const { runtimeTemplate, outputOptions } = compilation;
29
+ const { trustedTypes } = outputOptions;
30
+ const fn = RuntimeGlobals.getTrustedTypesPolicy;
31
+ const wrapPolicyCreationInTryCatch = trustedTypes
32
+ ? trustedTypes.onPolicyCreationFailure === "continue"
33
+ : false;
34
+
35
+ return Template.asString([
36
+ "var policy;",
37
+ `${fn} = ${runtimeTemplate.basicFunction("", [
38
+ "// Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.",
39
+ "if (policy === undefined) {",
40
+ Template.indent([
41
+ "policy = {",
42
+ Template.indent(
43
+ [
44
+ ...(this.runtimeRequirements.has(RuntimeGlobals.createScript)
45
+ ? [
46
+ `createScript: ${runtimeTemplate.returningFunction(
47
+ "script",
48
+ "script"
49
+ )}`
50
+ ]
51
+ : []),
52
+ ...(this.runtimeRequirements.has(RuntimeGlobals.createScriptUrl)
53
+ ? [
54
+ `createScriptURL: ${runtimeTemplate.returningFunction(
55
+ "url",
56
+ "url"
57
+ )}`
58
+ ]
59
+ : [])
60
+ ].join(",\n")
61
+ ),
62
+ "};",
63
+ ...(trustedTypes
64
+ ? [
65
+ 'if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {',
66
+ Template.indent([
67
+ ...(wrapPolicyCreationInTryCatch ? ["try {"] : []),
68
+ ...[
69
+ `policy = trustedTypes.createPolicy(${JSON.stringify(
70
+ trustedTypes.policyName
71
+ )}, policy);`
72
+ ].map(line =>
73
+ wrapPolicyCreationInTryCatch ? Template.indent(line) : line
74
+ ),
75
+ ...(wrapPolicyCreationInTryCatch
76
+ ? [
77
+ "} catch (e) {",
78
+ Template.indent([
79
+ `console.warn('Could not create trusted-types policy ${JSON.stringify(
80
+ trustedTypes.policyName
81
+ )}');`
82
+ ]),
83
+ "}"
84
+ ]
85
+ : [])
86
+ ]),
87
+ "}"
88
+ ]
89
+ : [])
90
+ ]),
91
+ "}",
92
+ "return policy;"
93
+ ])};`
94
+ ]);
95
+ }
96
+ }
97
+
98
+ module.exports = GetTrustedTypesPolicyRuntimeModule;
@@ -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(
@@ -14,7 +14,7 @@ const HelperRuntimeModule = require("./HelperRuntimeModule");
14
14
  /** @typedef {import("../Compiler")} Compiler */
15
15
 
16
16
  /**
17
- * @typedef {Object} LoadScriptCompilationHooks
17
+ * @typedef {object} LoadScriptCompilationHooks
18
18
  * @property {SyncWaterfallHook<[string, Chunk]>} createScript
19
19
  */
20
20
 
@@ -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,55 +83,69 @@ 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)`
87
98
  : "url"
88
99
  };`,
89
100
  crossOriginLoading
90
- ? Template.asString([
91
- "if (script.src.indexOf(window.location.origin + '/') !== 0) {",
92
- Template.indent(
93
- `script.crossOrigin = ${JSON.stringify(crossOriginLoading)};`
94
- ),
95
- "}"
96
- ])
101
+ ? crossOriginLoading === "use-credentials"
102
+ ? 'script.crossOrigin = "use-credentials";'
103
+ : Template.asString([
104
+ "if (script.src.indexOf(window.location.origin + '/') !== 0) {",
105
+ Template.indent(
106
+ `script.crossOrigin = ${JSON.stringify(crossOriginLoading)};`
107
+ ),
108
+ "}"
109
+ ])
97
110
  : ""
98
111
  ]);
99
112
 
100
113
  return Template.asString([
101
114
  "var inProgress = {};",
102
115
  uniqueName
103
- ? `var dataWebpackPrefix = ${JSON.stringify(uniqueName + ":")};`
116
+ ? `var dataWebpackPrefix = ${JSON.stringify(`${uniqueName}:`)};`
104
117
  : "// data-webpack is not used as build has no uniqueName",
105
118
  "// loadScript function to load a script via script tag",
106
- `${fn} = ${runtimeTemplate.basicFunction("url, done, key, chunkId", [
107
- "if(inProgress[url]) { inProgress[url].push(done); return; }",
108
- "var script, needAttach;",
109
- "if(key !== undefined) {",
110
- Template.indent([
111
- 'var scripts = document.getElementsByTagName("script");',
112
- "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) {",
113
142
  Template.indent([
114
- "var s = scripts[i];",
115
- `if(s.getAttribute("src") == url${
116
- uniqueName
117
- ? ' || s.getAttribute("data-webpack") == dataWebpackPrefix + key'
118
- : ""
119
- }) { script = s; break; }`
143
+ "needAttach = true;",
144
+ createScript.call(code, /** @type {Chunk} */ (this.chunk))
120
145
  ]),
121
- "}"
122
- ]),
123
- "}",
124
- "if(!script) {",
125
- Template.indent([
126
- "needAttach = true;",
127
- createScript.call(code, this.chunk)
128
- ]),
129
- "}",
130
- "inProgress[url] = [done];",
131
- "var onScriptComplete = " +
132
- runtimeTemplate.basicFunction(
146
+ "}",
147
+ "inProgress[url] = [done];",
148
+ `var onScriptComplete = ${runtimeTemplate.basicFunction(
133
149
  "prev, event",
134
150
  Template.asString([
135
151
  "// avoid mem leaks in IE.",
@@ -144,13 +160,13 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
144
160
  )});`,
145
161
  "if(prev) return prev(event);"
146
162
  ])
147
- ),
148
- ";",
149
- `var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), ${loadTimeout});`,
150
- "script.onerror = onScriptComplete.bind(null, script.onerror);",
151
- "script.onload = onScriptComplete.bind(null, script.onload);",
152
- "needAttach && document.head.appendChild(script);"
153
- ])};`
163
+ )}`,
164
+ `var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), ${loadTimeout});`,
165
+ "script.onerror = onScriptComplete.bind(null, script.onerror);",
166
+ "script.onload = onScriptComplete.bind(null, script.onload);",
167
+ "needAttach && document.head.appendChild(script);"
168
+ ]
169
+ )};`
154
170
  ]);
155
171
  }
156
172
  }
@@ -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",
@@ -0,0 +1,24 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const RuntimeGlobals = require("../RuntimeGlobals");
9
+ const RuntimeModule = require("../RuntimeModule");
10
+
11
+ class NonceRuntimeModule extends RuntimeModule {
12
+ constructor() {
13
+ super("nonce", RuntimeModule.STAGE_ATTACH);
14
+ }
15
+
16
+ /**
17
+ * @returns {string | null} runtime code
18
+ */
19
+ generate() {
20
+ return `${RuntimeGlobals.scriptNonce} = undefined;`;
21
+ }
22
+ }
23
+
24
+ module.exports = NonceRuntimeModule;
@@ -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([