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
@@ -5,16 +5,28 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  // TODO webpack 6 remove
14
16
 
17
+ const PLUGIN_NAME = "FetchCompileWasmPlugin";
18
+
19
+ /**
20
+ * @typedef {object} FetchCompileWasmPluginOptions
21
+ * @property {boolean} [mangleImports] mangle imports
22
+ */
23
+
15
24
  class FetchCompileWasmPlugin {
16
- constructor(options) {
17
- this.options = options || {};
25
+ /**
26
+ * @param {FetchCompileWasmPluginOptions} [options] options
27
+ */
28
+ constructor(options = {}) {
29
+ this.options = options;
18
30
  }
19
31
 
20
32
  /**
@@ -23,48 +35,53 @@ class FetchCompileWasmPlugin {
23
35
  * @returns {void}
24
36
  */
25
37
  apply(compiler) {
26
- compiler.hooks.thisCompilation.tap(
27
- "FetchCompileWasmPlugin",
28
- compilation => {
29
- const globalWasmLoading = compilation.outputOptions.wasmLoading;
30
- const isEnabledForChunk = chunk => {
31
- const options = chunk.getEntryOptions();
32
- const wasmLoading =
33
- options && options.wasmLoading !== undefined
34
- ? options.wasmLoading
35
- : globalWasmLoading;
36
- return wasmLoading === "fetch";
37
- };
38
- const generateLoadBinaryCode = path =>
39
- `fetch(${RuntimeGlobals.publicPath} + ${path})`;
38
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
39
+ const globalWasmLoading = compilation.outputOptions.wasmLoading;
40
+ /**
41
+ * @param {Chunk} chunk chunk
42
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
43
+ */
44
+ const isEnabledForChunk = chunk => {
45
+ const options = chunk.getEntryOptions();
46
+ const wasmLoading =
47
+ options && options.wasmLoading !== undefined
48
+ ? options.wasmLoading
49
+ : globalWasmLoading;
50
+ return wasmLoading === "fetch";
51
+ };
52
+ /**
53
+ * @param {string} path path to the wasm file
54
+ * @returns {string} code to load the wasm file
55
+ */
56
+ const generateLoadBinaryCode = path =>
57
+ `fetch(${RuntimeGlobals.publicPath} + ${path})`;
40
58
 
41
- compilation.hooks.runtimeRequirementInTree
42
- .for(RuntimeGlobals.ensureChunkHandlers)
43
- .tap("FetchCompileWasmPlugin", (chunk, set) => {
44
- if (!isEnabledForChunk(chunk)) return;
45
- const chunkGraph = compilation.chunkGraph;
46
- if (
47
- !chunkGraph.hasModuleInGraph(
48
- chunk,
49
- m => m.type === "webassembly/sync"
50
- )
51
- ) {
52
- return;
53
- }
54
- set.add(RuntimeGlobals.moduleCache);
55
- set.add(RuntimeGlobals.publicPath);
56
- compilation.addRuntimeModule(
59
+ compilation.hooks.runtimeRequirementInTree
60
+ .for(RuntimeGlobals.ensureChunkHandlers)
61
+ .tap(PLUGIN_NAME, (chunk, set) => {
62
+ if (!isEnabledForChunk(chunk)) return;
63
+ const chunkGraph = compilation.chunkGraph;
64
+ if (
65
+ !chunkGraph.hasModuleInGraph(
57
66
  chunk,
58
- new WasmChunkLoadingRuntimeModule({
59
- generateLoadBinaryCode,
60
- supportsStreaming: true,
61
- mangleImports: this.options.mangleImports,
62
- runtimeRequirements: set
63
- })
64
- );
65
- });
66
- }
67
- );
67
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
68
+ )
69
+ ) {
70
+ return;
71
+ }
72
+ set.add(RuntimeGlobals.moduleCache);
73
+ set.add(RuntimeGlobals.publicPath);
74
+ compilation.addRuntimeModule(
75
+ chunk,
76
+ new WasmChunkLoadingRuntimeModule({
77
+ generateLoadBinaryCode,
78
+ supportsStreaming: true,
79
+ mangleImports: this.options.mangleImports,
80
+ runtimeRequirements: set
81
+ })
82
+ );
83
+ });
84
+ });
68
85
  }
69
86
  }
70
87
 
@@ -8,6 +8,7 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Chunk")} Chunk */
11
12
  /** @typedef {import("../Compiler")} Compiler */
12
13
 
13
14
  class JsonpChunkLoadingPlugin {
@@ -21,6 +22,10 @@ class JsonpChunkLoadingPlugin {
21
22
  "JsonpChunkLoadingPlugin",
22
23
  compilation => {
23
24
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
25
+ /**
26
+ * @param {Chunk} chunk chunk
27
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
28
+ */
24
29
  const isEnabledForChunk = chunk => {
25
30
  const options = chunk.getEntryOptions();
26
31
  const chunkLoading =
@@ -30,6 +35,10 @@ class JsonpChunkLoadingPlugin {
30
35
  return chunkLoading === "jsonp";
31
36
  };
32
37
  const onceForChunkSet = new WeakSet();
38
+ /**
39
+ * @param {Chunk} chunk chunk
40
+ * @param {Set<string>} set runtime requirements
41
+ */
33
42
  const handler = (chunk, set) => {
34
43
  if (onceForChunkSet.has(chunk)) return;
35
44
  onceForChunkSet.add(chunk);
@@ -14,9 +14,11 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
14
14
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
15
15
 
16
16
  /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
17
19
 
18
20
  /**
19
- * @typedef {Object} JsonpCompilationPluginHooks
21
+ * @typedef {object} JsonpCompilationPluginHooks
20
22
  * @property {SyncWaterfallHook<[string, Chunk]>} linkPreload
21
23
  * @property {SyncWaterfallHook<[string, Chunk]>} linkPrefetch
22
24
  */
@@ -46,26 +48,42 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
46
48
  return hooks;
47
49
  }
48
50
 
51
+ /**
52
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
53
+ */
49
54
  constructor(runtimeRequirements) {
50
55
  super("jsonp chunk loading", RuntimeModule.STAGE_ATTACH);
51
56
  this._runtimeRequirements = runtimeRequirements;
52
57
  }
53
58
 
54
59
  /**
55
- * @returns {string} runtime code
60
+ * @private
61
+ * @param {Chunk} chunk chunk
62
+ * @returns {string} generated code
63
+ */
64
+ _generateBaseUri(chunk) {
65
+ const options = chunk.getEntryOptions();
66
+ if (options && options.baseUri) {
67
+ return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
68
+ }
69
+ return `${RuntimeGlobals.baseURI} = document.baseURI || self.location.href;`;
70
+ }
71
+
72
+ /**
73
+ * @returns {string | null} runtime code
56
74
  */
57
75
  generate() {
58
- const { chunkGraph, compilation, chunk } = this;
76
+ const compilation = /** @type {Compilation} */ (this.compilation);
59
77
  const {
60
78
  runtimeTemplate,
61
79
  outputOptions: {
62
- globalObject,
63
80
  chunkLoadingGlobal,
64
81
  hotUpdateGlobal,
65
82
  crossOriginLoading,
66
83
  scriptType
67
84
  }
68
85
  } = compilation;
86
+ const globalObject = runtimeTemplate.globalObject;
69
87
  const { linkPreload, linkPrefetch } =
70
88
  JsonpChunkLoadingRuntimeModule.getCompilationHooks(compilation);
71
89
  const fn = RuntimeGlobals.ensureChunkHandlers;
@@ -91,23 +109,24 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
91
109
  const withPreload = this._runtimeRequirements.has(
92
110
  RuntimeGlobals.preloadChunkHandlers
93
111
  );
112
+ const withFetchPriority = this._runtimeRequirements.has(
113
+ RuntimeGlobals.hasFetchPriority
114
+ );
94
115
  const chunkLoadingGlobalExpr = `${globalObject}[${JSON.stringify(
95
116
  chunkLoadingGlobal
96
117
  )}]`;
118
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
119
+ const chunk = /** @type {Chunk} */ (this.chunk);
97
120
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
98
121
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
99
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
122
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
100
123
 
101
124
  const stateExpression = withHmr
102
125
  ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_jsonp`
103
126
  : undefined;
104
127
 
105
128
  return Template.asString([
106
- withBaseURI
107
- ? Template.asString([
108
- `${RuntimeGlobals.baseURI} = document.baseURI || self.location.href;`
109
- ])
110
- : "// no baseURI",
129
+ withBaseURI ? this._generateBaseUri(chunk) : "// no baseURI",
111
130
  "",
112
131
  "// object to store loaded and loading chunks",
113
132
  "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
@@ -125,7 +144,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
125
144
  withLoading
126
145
  ? Template.asString([
127
146
  `${fn}.j = ${runtimeTemplate.basicFunction(
128
- "chunkId, promises",
147
+ `chunkId, promises${withFetchPriority ? ", fetchPriority" : ""}`,
129
148
  hasJsMatcher !== false
130
149
  ? Template.indent([
131
150
  "// JSONP chunk loading for javascript",
@@ -146,7 +165,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
146
165
  Template.indent([
147
166
  "// setup Promise in chunk cache",
148
167
  `var promise = new Promise(${runtimeTemplate.expressionFunction(
149
- `installedChunkData = installedChunks[chunkId] = [resolve, reject]`,
168
+ "installedChunkData = installedChunks[chunkId] = [resolve, reject]",
150
169
  "resolve, reject"
151
170
  )});`,
152
171
  "promises.push(installedChunkData[2] = promise);",
@@ -177,23 +196,29 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
177
196
  "}"
178
197
  ]
179
198
  )};`,
180
- `${RuntimeGlobals.loadScript}(url, loadingEnded, "chunk-" + chunkId, chunkId);`
199
+ `${
200
+ RuntimeGlobals.loadScript
201
+ }(url, loadingEnded, "chunk-" + chunkId, chunkId${
202
+ withFetchPriority ? ", fetchPriority" : ""
203
+ });`
181
204
  ]),
182
- "} else installedChunks[chunkId] = 0;"
205
+ hasJsMatcher === true
206
+ ? "}"
207
+ : "} else installedChunks[chunkId] = 0;"
183
208
  ]),
184
209
  "}"
185
210
  ]),
186
211
  "}"
187
- ])
212
+ ])
188
213
  : Template.indent(["installedChunks[chunkId] = 0;"])
189
214
  )};`
190
- ])
215
+ ])
191
216
  : "// no chunk on demand loading",
192
217
  "",
193
218
  withPrefetch && hasJsMatcher !== false
194
219
  ? `${
195
220
  RuntimeGlobals.prefetchChunkHandlers
196
- }.j = ${runtimeTemplate.basicFunction("chunkId", [
221
+ }.j = ${runtimeTemplate.basicFunction("chunkId", [
197
222
  `if((!${
198
223
  RuntimeGlobals.hasOwnProperty
199
224
  }(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && ${
@@ -207,7 +232,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
207
232
  crossOriginLoading
208
233
  ? `link.crossOrigin = ${JSON.stringify(
209
234
  crossOriginLoading
210
- )};`
235
+ )};`
211
236
  : "",
212
237
  `if (${RuntimeGlobals.scriptNonce}) {`,
213
238
  Template.indent(
@@ -223,13 +248,13 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
223
248
  "document.head.appendChild(link);"
224
249
  ]),
225
250
  "}"
226
- ])};`
251
+ ])};`
227
252
  : "// no prefetching",
228
253
  "",
229
254
  withPreload && hasJsMatcher !== false
230
255
  ? `${
231
256
  RuntimeGlobals.preloadChunkHandlers
232
- }.j = ${runtimeTemplate.basicFunction("chunkId", [
257
+ }.j = ${runtimeTemplate.basicFunction("chunkId", [
233
258
  `if((!${
234
259
  RuntimeGlobals.hasOwnProperty
235
260
  }(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && ${
@@ -240,7 +265,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
240
265
  linkPreload.call(
241
266
  Template.asString([
242
267
  "var link = document.createElement('link');",
243
- scriptType
268
+ scriptType && scriptType !== "module"
244
269
  ? `link.type = ${JSON.stringify(scriptType)};`
245
270
  : "",
246
271
  "link.charset = 'utf-8';",
@@ -249,19 +274,23 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
249
274
  `link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
250
275
  ),
251
276
  "}",
252
- 'link.rel = "preload";',
253
- 'link.as = "script";',
277
+ scriptType === "module"
278
+ ? 'link.rel = "modulepreload";'
279
+ : 'link.rel = "preload";',
280
+ scriptType === "module" ? "" : 'link.as = "script";',
254
281
  `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
255
282
  crossOriginLoading
256
- ? Template.asString([
257
- "if (link.href.indexOf(window.location.origin + '/') !== 0) {",
258
- Template.indent(
259
- `link.crossOrigin = ${JSON.stringify(
260
- crossOriginLoading
261
- )};`
262
- ),
263
- "}"
264
- ])
283
+ ? crossOriginLoading === "use-credentials"
284
+ ? 'link.crossOrigin = "use-credentials";'
285
+ : Template.asString([
286
+ "if (link.href.indexOf(window.location.origin + '/') !== 0) {",
287
+ Template.indent(
288
+ `link.crossOrigin = ${JSON.stringify(
289
+ crossOriginLoading
290
+ )};`
291
+ ),
292
+ "}"
293
+ ])
265
294
  : ""
266
295
  ]),
267
296
  chunk
@@ -269,15 +298,16 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
269
298
  "document.head.appendChild(link);"
270
299
  ]),
271
300
  "}"
272
- ])};`
301
+ ])};`
273
302
  : "// no preloaded",
274
303
  "",
275
304
  withHmr
276
305
  ? Template.asString([
277
306
  "var currentUpdatedModulesList;",
278
307
  "var waitingUpdateResolves = {};",
279
- "function loadUpdateChunk(chunkId) {",
308
+ "function loadUpdateChunk(chunkId, updatedModulesList) {",
280
309
  Template.indent([
310
+ "currentUpdatedModulesList = updatedModulesList;",
281
311
  `return new Promise(${runtimeTemplate.basicFunction(
282
312
  "resolve, reject",
283
313
  [
@@ -353,7 +383,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
353
383
  /\$hmrInvalidateModuleHandlers\$/g,
354
384
  RuntimeGlobals.hmrInvalidateModuleHandlers
355
385
  )
356
- ])
386
+ ])
357
387
  : "// no HMR",
358
388
  "",
359
389
  withHmrManifest
@@ -370,16 +400,16 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
370
400
  "return response.json();"
371
401
  ])});`
372
402
  ])};`
373
- ])
403
+ ])
374
404
  : "// no HMR manifest",
375
405
  "",
376
406
  withOnChunkLoad
377
407
  ? `${
378
408
  RuntimeGlobals.onChunksLoaded
379
- }.j = ${runtimeTemplate.returningFunction(
409
+ }.j = ${runtimeTemplate.returningFunction(
380
410
  "installedChunks[chunkId] === 0",
381
411
  "chunkId"
382
- )};`
412
+ )};`
383
413
  : "// no on chunks loaded",
384
414
  "",
385
415
  withCallback || withLoading
@@ -409,7 +439,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
409
439
  "}"
410
440
  ]),
411
441
  "}",
412
- "if(runtime) var result = runtime(__webpack_require__);"
442
+ `if(runtime) var result = runtime(${RuntimeGlobals.require});`
413
443
  ]),
414
444
  "}",
415
445
  "if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);",
@@ -419,7 +449,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
419
449
  `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) && installedChunks[chunkId]) {`,
420
450
  Template.indent("installedChunks[chunkId][0]();"),
421
451
  "}",
422
- "installedChunks[chunkIds[i]] = 0;"
452
+ "installedChunks[chunkId] = 0;"
423
453
  ]),
424
454
  "}",
425
455
  withOnChunkLoad
@@ -431,7 +461,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
431
461
  `var chunkLoadingGlobal = ${chunkLoadingGlobalExpr} = ${chunkLoadingGlobalExpr} || [];`,
432
462
  "chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));",
433
463
  "chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"
434
- ])
464
+ ])
435
465
  : "// no jsonp function"
436
466
  ]);
437
467
  }
package/lib/webpack.js CHANGED
@@ -20,6 +20,7 @@ const NodeEnvironmentPlugin = require("./node/NodeEnvironmentPlugin");
20
20
  const memoize = require("./util/memoize");
21
21
 
22
22
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
23
+ /** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
23
24
  /** @typedef {import("./Compiler").WatchOptions} WatchOptions */
24
25
  /** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
25
26
  /** @typedef {import("./MultiStats")} MultiStats */
@@ -30,7 +31,7 @@ const getValidateSchema = memoize(() => require("./validateSchema"));
30
31
  /**
31
32
  * @template T
32
33
  * @callback Callback
33
- * @param {Error=} err
34
+ * @param {Error | null} err
34
35
  * @param {T=} stats
35
36
  * @returns {void}
36
37
  */
@@ -41,7 +42,9 @@ const getValidateSchema = memoize(() => require("./validateSchema"));
41
42
  * @returns {MultiCompiler} a multi-compiler
42
43
  */
43
44
  const createMultiCompiler = (childOptions, options) => {
44
- const compilers = childOptions.map(options => createCompiler(options));
45
+ const compilers = childOptions.map((options, index) =>
46
+ createCompiler(options, index)
47
+ );
45
48
  const compiler = new MultiCompiler(compilers, options);
46
49
  for (const childCompiler of compilers) {
47
50
  if (childCompiler.options.dependencies) {
@@ -56,26 +59,36 @@ const createMultiCompiler = (childOptions, options) => {
56
59
 
57
60
  /**
58
61
  * @param {WebpackOptions} rawOptions options object
62
+ * @param {number} [compilerIndex] index of compiler
59
63
  * @returns {Compiler} a compiler
60
64
  */
61
- const createCompiler = rawOptions => {
65
+ const createCompiler = (rawOptions, compilerIndex) => {
62
66
  const options = getNormalizedWebpackOptions(rawOptions);
63
67
  applyWebpackOptionsBaseDefaults(options);
64
- const compiler = new Compiler(options.context);
65
- compiler.options = options;
68
+ const compiler = new Compiler(
69
+ /** @type {string} */ (options.context),
70
+ options
71
+ );
66
72
  new NodeEnvironmentPlugin({
67
73
  infrastructureLogging: options.infrastructureLogging
68
74
  }).apply(compiler);
69
75
  if (Array.isArray(options.plugins)) {
70
76
  for (const plugin of options.plugins) {
71
77
  if (typeof plugin === "function") {
72
- plugin.call(compiler, compiler);
73
- } else {
78
+ /** @type {WebpackPluginFunction} */
79
+ (plugin).call(compiler, compiler);
80
+ } else if (plugin) {
74
81
  plugin.apply(compiler);
75
82
  }
76
83
  }
77
84
  }
78
- applyWebpackOptionsDefaults(options);
85
+ const resolvedDefaultOptions = applyWebpackOptionsDefaults(
86
+ options,
87
+ compilerIndex
88
+ );
89
+ if (resolvedDefaultOptions.platform) {
90
+ compiler.platform = resolvedDefaultOptions.platform;
91
+ }
79
92
  compiler.hooks.environment.call();
80
93
  compiler.hooks.afterEnvironment.call();
81
94
  new WebpackOptionsApply().process(options, compiler);
@@ -97,19 +110,33 @@ const createCompiler = rawOptions => {
97
110
  * @returns {MultiCompiler} the multi compiler object
98
111
  */
99
112
 
113
+ /**
114
+ * @template T
115
+ * @param {Array<T> | T} options options
116
+ * @returns {Array<T>} array of options
117
+ */
118
+ const asArray = options =>
119
+ Array.isArray(options) ? Array.from(options) : [options];
120
+
100
121
  const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
101
122
  /**
102
123
  * @param {WebpackOptions | (ReadonlyArray<WebpackOptions> & MultiCompilerOptions)} options options
103
124
  * @param {Callback<Stats> & Callback<MultiStats>=} callback callback
104
- * @returns {Compiler | MultiCompiler}
125
+ * @returns {Compiler | MultiCompiler | null} Compiler or MultiCompiler
105
126
  */
106
127
  (options, callback) => {
107
128
  const create = () => {
108
- if (!webpackOptionsSchemaCheck(options)) {
129
+ if (!asArray(options).every(webpackOptionsSchemaCheck)) {
109
130
  getValidateSchema()(webpackOptionsSchema, options);
131
+ util.deprecate(
132
+ () => {},
133
+ "webpack bug: Pre-compiled schema reports error while real schema is happy. This has performance drawbacks.",
134
+ "DEP_WEBPACK_PRE_COMPILED_SCHEMA_INVALID"
135
+ )();
110
136
  }
111
137
  /** @type {MultiCompiler|Compiler} */
112
138
  let compiler;
139
+ /** @type {boolean | undefined} */
113
140
  let watch = false;
114
141
  /** @type {WatchOptions|WatchOptions[]} */
115
142
  let watchOptions;
@@ -138,13 +165,17 @@ const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
138
165
  } else {
139
166
  compiler.run((err, stats) => {
140
167
  compiler.close(err2 => {
141
- callback(err || err2, stats);
168
+ callback(
169
+ err || err2,
170
+ /** @type {options extends WebpackOptions ? Stats : MultiStats} */
171
+ (stats)
172
+ );
142
173
  });
143
174
  });
144
175
  }
145
176
  return compiler;
146
177
  } catch (err) {
147
- process.nextTick(() => callback(err));
178
+ process.nextTick(() => callback(/** @type {Error} */ (err)));
148
179
  return null;
149
180
  }
150
181
  } else {
@@ -6,10 +6,10 @@
6
6
  "use strict";
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
- const CreateScriptUrlRuntimeModule = require("../runtime/CreateScriptUrlRuntimeModule");
10
9
  const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
11
10
  const ImportScriptsChunkLoadingRuntimeModule = require("./ImportScriptsChunkLoadingRuntimeModule");
12
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
13
13
  /** @typedef {import("../Compiler")} Compiler */
14
14
 
15
15
  class ImportScriptsChunkLoadingPlugin {
@@ -27,6 +27,10 @@ class ImportScriptsChunkLoadingPlugin {
27
27
  "ImportScriptsChunkLoadingPlugin",
28
28
  compilation => {
29
29
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
30
+ /**
31
+ * @param {Chunk} chunk chunk
32
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
33
+ */
30
34
  const isEnabledForChunk = chunk => {
31
35
  const options = chunk.getEntryOptions();
32
36
  const chunkLoading =
@@ -36,14 +40,22 @@ class ImportScriptsChunkLoadingPlugin {
36
40
  return chunkLoading === "import-scripts";
37
41
  };
38
42
  const onceForChunkSet = new WeakSet();
43
+ /**
44
+ * @param {Chunk} chunk chunk
45
+ * @param {Set<string>} set runtime requirements
46
+ */
39
47
  const handler = (chunk, set) => {
40
48
  if (onceForChunkSet.has(chunk)) return;
41
49
  onceForChunkSet.add(chunk);
42
50
  if (!isEnabledForChunk(chunk)) return;
43
- const withCreateScriptUrl = !!compilation.outputOptions.trustedTypes;
51
+ const withCreateScriptUrl = Boolean(
52
+ compilation.outputOptions.trustedTypes
53
+ );
44
54
  set.add(RuntimeGlobals.moduleFactoriesAddOnly);
45
55
  set.add(RuntimeGlobals.hasOwnProperty);
46
- if (withCreateScriptUrl) set.add(RuntimeGlobals.createScriptUrl);
56
+ if (withCreateScriptUrl) {
57
+ set.add(RuntimeGlobals.createScriptUrl);
58
+ }
47
59
  compilation.addRuntimeModule(
48
60
  chunk,
49
61
  new ImportScriptsChunkLoadingRuntimeModule(set, withCreateScriptUrl)
@@ -61,15 +73,6 @@ class ImportScriptsChunkLoadingPlugin {
61
73
  compilation.hooks.runtimeRequirementInTree
62
74
  .for(RuntimeGlobals.baseURI)
63
75
  .tap("ImportScriptsChunkLoadingPlugin", handler);
64
- compilation.hooks.runtimeRequirementInTree
65
- .for(RuntimeGlobals.createScriptUrl)
66
- .tap("RuntimePlugin", (chunk, set) => {
67
- compilation.addRuntimeModule(
68
- chunk,
69
- new CreateScriptUrlRuntimeModule()
70
- );
71
- return true;
72
- });
73
76
 
74
77
  compilation.hooks.runtimeRequirementInTree
75
78
  .for(RuntimeGlobals.ensureChunkHandlers)