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
@@ -9,6 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const ExportWebpackRequireRuntimeModule = require("./ExportWebpackRequireRuntimeModule");
10
10
  const ModuleChunkLoadingRuntimeModule = require("./ModuleChunkLoadingRuntimeModule");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
12
13
  /** @typedef {import("../Compiler")} Compiler */
13
14
 
14
15
  class ModuleChunkLoadingPlugin {
@@ -22,13 +23,23 @@ class ModuleChunkLoadingPlugin {
22
23
  "ModuleChunkLoadingPlugin",
23
24
  compilation => {
24
25
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
26
+ /**
27
+ * @param {Chunk} chunk chunk to check
28
+ * @returns {boolean} true, when the plugin is enabled for the chunk
29
+ */
25
30
  const isEnabledForChunk = chunk => {
26
31
  const options = chunk.getEntryOptions();
27
32
  const chunkLoading =
28
- (options && options.chunkLoading) || globalChunkLoading;
33
+ options && options.chunkLoading !== undefined
34
+ ? options.chunkLoading
35
+ : globalChunkLoading;
29
36
  return chunkLoading === "import";
30
37
  };
31
38
  const onceForChunkSet = new WeakSet();
39
+ /**
40
+ * @param {Chunk} chunk chunk to check
41
+ * @param {Set<string>} set runtime requirements
42
+ */
32
43
  const handler = (chunk, set) => {
33
44
  if (onceForChunkSet.has(chunk)) return;
34
45
  onceForChunkSet.add(chunk);
@@ -17,10 +17,13 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
17
17
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
18
18
  const { getUndoPath } = require("../util/identifier");
19
19
 
20
+ /** @typedef {import("../../declarations/WebpackOptions").Environment} Environment */
20
21
  /** @typedef {import("../Chunk")} Chunk */
22
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
23
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
21
24
 
22
25
  /**
23
- * @typedef {Object} JsonpCompilationPluginHooks
26
+ * @typedef {object} JsonpCompilationPluginHooks
24
27
  * @property {SyncWaterfallHook<[string, Chunk]>} linkPreload
25
28
  * @property {SyncWaterfallHook<[string, Chunk]>} linkPrefetch
26
29
  */
@@ -50,20 +53,47 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
50
53
  return hooks;
51
54
  }
52
55
 
56
+ /**
57
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
58
+ */
53
59
  constructor(runtimeRequirements) {
54
60
  super("import chunk loading", RuntimeModule.STAGE_ATTACH);
55
61
  this._runtimeRequirements = runtimeRequirements;
56
62
  }
57
63
 
58
64
  /**
59
- * @returns {string} runtime code
65
+ * @private
66
+ * @param {Chunk} chunk chunk
67
+ * @param {string} rootOutputDir root output directory
68
+ * @returns {string} generated code
69
+ */
70
+ _generateBaseUri(chunk, rootOutputDir) {
71
+ const options = chunk.getEntryOptions();
72
+ if (options && options.baseUri) {
73
+ return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
74
+ }
75
+ const compilation = /** @type {Compilation} */ (this.compilation);
76
+ const {
77
+ outputOptions: { importMetaName }
78
+ } = compilation;
79
+ return `${RuntimeGlobals.baseURI} = new URL(${JSON.stringify(
80
+ rootOutputDir
81
+ )}, ${importMetaName}.url);`;
82
+ }
83
+
84
+ /**
85
+ * @returns {string | null} runtime code
60
86
  */
61
87
  generate() {
62
- const { compilation, chunk } = this;
88
+ const compilation = /** @type {Compilation} */ (this.compilation);
89
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
90
+ const chunk = /** @type {Chunk} */ (this.chunk);
91
+ const environment =
92
+ /** @type {Environment} */
93
+ (compilation.outputOptions.environment);
63
94
  const {
64
95
  runtimeTemplate,
65
- chunkGraph,
66
- outputOptions: { importFunctionName, importMetaName }
96
+ outputOptions: { importFunctionName, crossOriginLoading }
67
97
  } = compilation;
68
98
  const fn = RuntimeGlobals.ensureChunkHandlers;
69
99
  const withBaseURI = this._runtimeRequirements.has(RuntimeGlobals.baseURI);
@@ -79,12 +109,20 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
79
109
  const withHmr = this._runtimeRequirements.has(
80
110
  RuntimeGlobals.hmrDownloadUpdateHandlers
81
111
  );
112
+ const { linkPreload, linkPrefetch } =
113
+ ModuleChunkLoadingRuntimeModule.getCompilationHooks(compilation);
114
+ const withPrefetch =
115
+ environment.document &&
116
+ this._runtimeRequirements.has(RuntimeGlobals.prefetchChunkHandlers);
117
+ const withPreload =
118
+ environment.document &&
119
+ this._runtimeRequirements.has(RuntimeGlobals.preloadChunkHandlers);
82
120
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
83
121
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
84
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
122
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
85
123
 
86
- const outputName = this.compilation.getPath(
87
- getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
124
+ const outputName = compilation.getPath(
125
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
88
126
  {
89
127
  chunk,
90
128
  contentHashType: "javascript"
@@ -92,7 +130,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
92
130
  );
93
131
  const rootOutputDir = getUndoPath(
94
132
  outputName,
95
- this.compilation.outputOptions.path,
133
+ /** @type {string} */ (compilation.outputOptions.path),
96
134
  true
97
135
  );
98
136
 
@@ -102,16 +140,12 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
102
140
 
103
141
  return Template.asString([
104
142
  withBaseURI
105
- ? Template.asString([
106
- `${RuntimeGlobals.baseURI} = new URL(${JSON.stringify(
107
- rootOutputDir
108
- )}, ${importMetaName}.url);`
109
- ])
143
+ ? this._generateBaseUri(chunk, rootOutputDir)
110
144
  : "// no baseURI",
111
145
  "",
112
146
  "// object to store loaded and loading chunks",
113
147
  "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
114
- "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",
148
+ "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
115
149
  `var installedChunks = ${
116
150
  stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""
117
151
  }{`,
@@ -140,7 +174,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
140
174
  "}"
141
175
  ]),
142
176
  "}",
143
- "if(runtime) runtime(__webpack_require__);",
177
+ `if(runtime) runtime(${RuntimeGlobals.require});`,
144
178
  "for(;i < ids.length; i++) {",
145
179
  Template.indent([
146
180
  "chunkId = ids[i];",
@@ -151,7 +185,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
151
185
  ]),
152
186
  "}",
153
187
  withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
154
- ])}`
188
+ ])}`
155
189
  : "// no install chunk",
156
190
  "",
157
191
  withLoading
@@ -189,35 +223,117 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
189
223
  ]
190
224
  )});`,
191
225
  `var promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
192
- `installedChunkData = installedChunks[chunkId] = [resolve]`,
226
+ "installedChunkData = installedChunks[chunkId] = [resolve]",
193
227
  "resolve"
194
228
  )})])`,
195
- `promises.push(installedChunkData[1] = promise);`
229
+ "promises.push(installedChunkData[1] = promise);"
196
230
  ]),
197
- "} else installedChunks[chunkId] = 0;"
231
+ hasJsMatcher === true
232
+ ? "}"
233
+ : "} else installedChunks[chunkId] = 0;"
198
234
  ]),
199
235
  "}"
200
236
  ]),
201
237
  "}"
202
- ])
238
+ ])
203
239
  : Template.indent(["installedChunks[chunkId] = 0;"])
204
240
  )};`
205
- ])
241
+ ])
206
242
  : "// no chunk on demand loading",
207
243
  "",
244
+ withPrefetch && hasJsMatcher !== false
245
+ ? `${
246
+ RuntimeGlobals.prefetchChunkHandlers
247
+ }.j = ${runtimeTemplate.basicFunction("chunkId", [
248
+ `if((!${
249
+ RuntimeGlobals.hasOwnProperty
250
+ }(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && ${
251
+ hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
252
+ }) {`,
253
+ Template.indent([
254
+ "installedChunks[chunkId] = null;",
255
+ linkPrefetch.call(
256
+ Template.asString([
257
+ "var link = document.createElement('link');",
258
+ crossOriginLoading
259
+ ? `link.crossOrigin = ${JSON.stringify(
260
+ crossOriginLoading
261
+ )};`
262
+ : "",
263
+ `if (${RuntimeGlobals.scriptNonce}) {`,
264
+ Template.indent(
265
+ `link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
266
+ ),
267
+ "}",
268
+ 'link.rel = "prefetch";',
269
+ 'link.as = "script";',
270
+ `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`
271
+ ]),
272
+ chunk
273
+ ),
274
+ "document.head.appendChild(link);"
275
+ ]),
276
+ "}"
277
+ ])};`
278
+ : "// no prefetching",
279
+ "",
280
+ withPreload && hasJsMatcher !== false
281
+ ? `${
282
+ RuntimeGlobals.preloadChunkHandlers
283
+ }.j = ${runtimeTemplate.basicFunction("chunkId", [
284
+ `if((!${
285
+ RuntimeGlobals.hasOwnProperty
286
+ }(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && ${
287
+ hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
288
+ }) {`,
289
+ Template.indent([
290
+ "installedChunks[chunkId] = null;",
291
+ linkPreload.call(
292
+ Template.asString([
293
+ "var link = document.createElement('link');",
294
+ "link.charset = 'utf-8';",
295
+ `if (${RuntimeGlobals.scriptNonce}) {`,
296
+ Template.indent(
297
+ `link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
298
+ ),
299
+ "}",
300
+ 'link.rel = "modulepreload";',
301
+ `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
302
+ crossOriginLoading
303
+ ? crossOriginLoading === "use-credentials"
304
+ ? 'link.crossOrigin = "use-credentials";'
305
+ : Template.asString([
306
+ "if (link.href.indexOf(window.location.origin + '/') !== 0) {",
307
+ Template.indent(
308
+ `link.crossOrigin = ${JSON.stringify(
309
+ crossOriginLoading
310
+ )};`
311
+ ),
312
+ "}"
313
+ ])
314
+ : ""
315
+ ]),
316
+ chunk
317
+ ),
318
+ "document.head.appendChild(link);"
319
+ ]),
320
+ "}"
321
+ ])};`
322
+ : "// no preloaded",
323
+ "",
208
324
  withExternalInstallChunk
209
325
  ? Template.asString([
210
326
  `${RuntimeGlobals.externalInstallChunk} = installChunk;`
211
- ])
327
+ ])
212
328
  : "// no external install chunk",
213
329
  "",
214
330
  withOnChunkLoad
215
331
  ? `${
216
332
  RuntimeGlobals.onChunksLoaded
217
- }.j = ${runtimeTemplate.returningFunction(
333
+ }.j = ${runtimeTemplate.returningFunction(
218
334
  "installedChunks[chunkId] === 0",
219
335
  "chunkId"
220
- )};`
336
+ )};`
221
337
  : "// no on chunks loaded"
222
338
  ]);
223
339
  }
@@ -48,9 +48,8 @@ const formatLocation = loc => {
48
48
  typeof loc.end.column !== "number"
49
49
  ) {
50
50
  return `${loc.start.line}-${loc.end.line}`;
51
- } else {
52
- return `${formatPosition(loc.start)}-${formatPosition(loc.end)}`;
53
51
  }
52
+ return `${formatPosition(loc.start)}-${formatPosition(loc.end)}`;
54
53
  }
55
54
  if ("start" in loc && loc.start) {
56
55
  return formatPosition(loc.start);
@@ -28,13 +28,13 @@ module.exports = function () {
28
28
  var currentStatus = "idle";
29
29
 
30
30
  // while downloading
31
- var blockingPromises;
31
+ var blockingPromises = 0;
32
+ var blockingPromisesWaiting = [];
32
33
 
33
34
  // The update info
34
35
  var currentUpdateApplyHandlers;
35
36
  var queuedInvalidatedModules;
36
37
 
37
- // eslint-disable-next-line no-unused-vars
38
38
  $hmrModuleData$ = currentModuleData;
39
39
 
40
40
  $interceptModuleExecution$.push(function (options) {
@@ -95,8 +95,8 @@ module.exports = function () {
95
95
  Object.defineProperty(fn, name, createPropertyDescriptor(name));
96
96
  }
97
97
  }
98
- fn.e = function (chunkId) {
99
- return trackBlockingPromise(require.e(chunkId));
98
+ fn.e = function (chunkId, fetchPriority) {
99
+ return trackBlockingPromise(require.e(chunkId, fetchPriority));
100
100
  };
101
101
  return fn;
102
102
  }
@@ -201,7 +201,7 @@ module.exports = function () {
201
201
  if (idx >= 0) registeredStatusHandlers.splice(idx, 1);
202
202
  },
203
203
 
204
- //inherit from previous dispose call
204
+ // inherit from previous dispose call
205
205
  data: currentModuleData[moduleId]
206
206
  };
207
207
  currentChildModule = undefined;
@@ -215,20 +215,31 @@ module.exports = function () {
215
215
  for (var i = 0; i < registeredStatusHandlers.length; i++)
216
216
  results[i] = registeredStatusHandlers[i].call(null, newStatus);
217
217
 
218
- return Promise.all(results);
218
+ return Promise.all(results).then(function () {});
219
+ }
220
+
221
+ function unblock() {
222
+ if (--blockingPromises === 0) {
223
+ setStatus("ready").then(function () {
224
+ if (blockingPromises === 0) {
225
+ var list = blockingPromisesWaiting;
226
+ blockingPromisesWaiting = [];
227
+ for (var i = 0; i < list.length; i++) {
228
+ list[i]();
229
+ }
230
+ }
231
+ });
232
+ }
219
233
  }
220
234
 
221
235
  function trackBlockingPromise(promise) {
222
236
  switch (currentStatus) {
223
237
  case "ready":
224
238
  setStatus("prepare");
225
- blockingPromises.push(promise);
226
- waitForBlockingPromises(function () {
227
- return setStatus("ready");
228
- });
229
- return promise;
239
+ /* fallthrough */
230
240
  case "prepare":
231
- blockingPromises.push(promise);
241
+ blockingPromises++;
242
+ promise.then(unblock, unblock);
232
243
  return promise;
233
244
  default:
234
245
  return promise;
@@ -236,11 +247,11 @@ module.exports = function () {
236
247
  }
237
248
 
238
249
  function waitForBlockingPromises(fn) {
239
- if (blockingPromises.length === 0) return fn();
240
- var blocker = blockingPromises;
241
- blockingPromises = [];
242
- return Promise.all(blocker).then(function () {
243
- return waitForBlockingPromises(fn);
250
+ if (blockingPromises === 0) return fn();
251
+ return new Promise(function (resolve) {
252
+ blockingPromisesWaiting.push(function () {
253
+ resolve(fn());
254
+ });
244
255
  });
245
256
  }
246
257
 
@@ -261,7 +272,6 @@ module.exports = function () {
261
272
 
262
273
  return setStatus("prepare").then(function () {
263
274
  var updatedModules = [];
264
- blockingPromises = [];
265
275
  currentUpdateApplyHandlers = [];
266
276
 
267
277
  return Promise.all(
@@ -278,17 +288,15 @@ module.exports = function () {
278
288
  updatedModules
279
289
  );
280
290
  return promises;
281
- },
282
- [])
291
+ }, [])
283
292
  ).then(function () {
284
293
  return waitForBlockingPromises(function () {
285
294
  if (applyOnUpdate) {
286
295
  return internalApply(applyOnUpdate);
287
- } else {
288
- return setStatus("ready").then(function () {
289
- return updatedModules;
290
- });
291
296
  }
297
+ return setStatus("ready").then(function () {
298
+ return updatedModules;
299
+ });
292
300
  });
293
301
  });
294
302
  });
@@ -298,7 +306,11 @@ module.exports = function () {
298
306
  function hotApply(options) {
299
307
  if (currentStatus !== "ready") {
300
308
  return Promise.resolve().then(function () {
301
- throw new Error("apply() is only allowed in ready status");
309
+ throw new Error(
310
+ "apply() is only allowed in ready status (state: " +
311
+ currentStatus +
312
+ ")"
313
+ );
302
314
  });
303
315
  }
304
316
  return internalApply(options);
@@ -13,8 +13,9 @@ class HotModuleReplacementRuntimeModule extends RuntimeModule {
13
13
  constructor() {
14
14
  super("hot module replacement", RuntimeModule.STAGE_BASIC);
15
15
  }
16
+
16
17
  /**
17
- * @returns {string} runtime code
18
+ * @returns {string | null} runtime code
18
19
  */
19
20
  generate() {
20
21
  return Template.getFunctionContent(
@@ -117,15 +117,12 @@ module.exports = function () {
117
117
  if ($hasOwnProperty$(currentUpdate, moduleId)) {
118
118
  var newModuleFactory = currentUpdate[moduleId];
119
119
  /** @type {TODO} */
120
- var result;
121
- if (newModuleFactory) {
122
- result = getAffectedModuleEffects(moduleId);
123
- } else {
124
- result = {
125
- type: "disposed",
126
- moduleId: moduleId
127
- };
128
- }
120
+ var result = newModuleFactory
121
+ ? getAffectedModuleEffects(moduleId)
122
+ : {
123
+ type: "disposed",
124
+ moduleId: moduleId
125
+ };
129
126
  /** @type {Error|false} */
130
127
  var abortError = false;
131
128
  var doApply = false;
@@ -376,17 +373,17 @@ module.exports = function () {
376
373
  moduleId: moduleId,
377
374
  module: $moduleCache$[moduleId]
378
375
  });
379
- } catch (err2) {
376
+ } catch (err1) {
380
377
  if (options.onErrored) {
381
378
  options.onErrored({
382
379
  type: "self-accept-error-handler-errored",
383
380
  moduleId: moduleId,
384
- error: err2,
381
+ error: err1,
385
382
  originalError: err
386
383
  });
387
384
  }
388
385
  if (!options.ignoreErrored) {
389
- reportError(err2);
386
+ reportError(err1);
390
387
  reportError(err);
391
388
  }
392
389
  }
@@ -443,15 +440,16 @@ module.exports = function () {
443
440
  ) {
444
441
  promises.push($loadUpdateChunk$(chunkId, updatedModulesList));
445
442
  currentUpdateChunks[chunkId] = true;
443
+ } else {
444
+ currentUpdateChunks[chunkId] = false;
446
445
  }
447
446
  });
448
447
  if ($ensureChunkHandlers$) {
449
448
  $ensureChunkHandlers$.$key$Hmr = function (chunkId, promises) {
450
449
  if (
451
450
  currentUpdateChunks &&
452
- !$hasOwnProperty$(currentUpdateChunks, chunkId) &&
453
- $hasOwnProperty$($installedChunks$, chunkId) &&
454
- $installedChunks$[chunkId] !== undefined
451
+ $hasOwnProperty$(currentUpdateChunks, chunkId) &&
452
+ !currentUpdateChunks[chunkId]
455
453
  ) {
456
454
  promises.push($loadUpdateChunk$(chunkId));
457
455
  currentUpdateChunks[chunkId] = true;