@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -6,10 +6,11 @@
6
6
  "use strict";
7
7
 
8
8
  const { SyncWaterfallHook } = require("tapable");
9
- const Compilation = require("../Compilation");
9
+ /** @typedef {import("../Compilation")} Compilation */
10
10
  const RuntimeGlobals = require("../RuntimeGlobals");
11
11
  const RuntimeModule = require("../RuntimeModule");
12
12
  const Template = require("../Template");
13
+ const createHooksRegistry = require("../util/createHooksRegistry");
13
14
 
14
15
  /** @typedef {import("../Chunk")} Chunk */
15
16
  /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
@@ -19,30 +20,7 @@ const Template = require("../Template");
19
20
  * @property {SyncWaterfallHook<[string, Chunk]>} createStyle
20
21
  */
21
22
 
22
- /** @type {WeakMap<Compilation, CssInjectCompilationHooks>} */
23
- const compilationHooksMap = new WeakMap();
24
-
25
23
  class CssInjectStyleRuntimeModule extends RuntimeModule {
26
- /**
27
- * @param {Compilation} compilation the compilation
28
- * @returns {CssInjectCompilationHooks} hooks
29
- */
30
- static getCompilationHooks(compilation) {
31
- if (!(compilation instanceof Compilation)) {
32
- throw new TypeError(
33
- "The 'compilation' argument must be an instance of Compilation"
34
- );
35
- }
36
- let hooks = compilationHooksMap.get(compilation);
37
- if (hooks === undefined) {
38
- hooks = {
39
- createStyle: new SyncWaterfallHook(["source", "chunk"])
40
- };
41
- compilationHooksMap.set(compilation, hooks);
42
- }
43
- return hooks;
44
- }
45
-
46
24
  /**
47
25
  * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
48
26
  */
@@ -53,6 +31,7 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
53
31
  }
54
32
 
55
33
  /**
34
+ * Generates runtime code for this runtime module.
56
35
  * @returns {string | null} runtime code
57
36
  */
58
37
  generate() {
@@ -69,42 +48,67 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
69
48
  const { createStyle } =
70
49
  CssInjectStyleRuntimeModule.getCompilationHooks(compilation);
71
50
 
51
+ // Only emit the nonce check when scriptNonce is part of the runtime
52
+ // requirements. Otherwise referencing `__webpack_require__.nc` would
53
+ // keep the require runtime alive for nothing.
54
+ const withScriptNonce =
55
+ _runtimeRequirements &&
56
+ _runtimeRequirements.has(RuntimeGlobals.scriptNonce);
57
+
58
+ const cst = runtimeTemplate.renderConst();
59
+ const isNeutralPlatform = runtimeTemplate.isNeutralPlatform();
60
+ // universal targets run in node too: collect styles for SSR retrieval
61
+ // instead of touching a DOM that isn't there
62
+ const injectGuard = isNeutralPlatform
63
+ ? [
64
+ "if (typeof document === 'undefined') {",
65
+ Template.indent([
66
+ `${runtimeTemplate.cssServerStyleRegistry()}[identifier] = css;`,
67
+ "return;"
68
+ ]),
69
+ "}"
70
+ ]
71
+ : [];
72
+ const removeGuard = isNeutralPlatform
73
+ ? [
74
+ "if (typeof document === 'undefined') {",
75
+ Template.indent([
76
+ `${cst} styles = ${runtimeTemplate.cssServerStyleRegistry()};`,
77
+ "for (var i = 0; i < identifiers.length; i++) delete styles[identifiers[i]];",
78
+ "return;"
79
+ ]),
80
+ "}"
81
+ ]
82
+ : [];
83
+
72
84
  const createStyleElementCode = Template.asString([
73
- "var style = document.createElement('style');",
85
+ `${cst} style = document.createElement('style');`,
74
86
  "",
75
- `if (${RuntimeGlobals.scriptNonce}) {`,
76
- Template.indent(
77
- `style.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
78
- ),
79
- "}",
87
+ ...(withScriptNonce
88
+ ? [
89
+ `if (${RuntimeGlobals.scriptNonce}) {`,
90
+ Template.indent(
91
+ `style.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
92
+ ),
93
+ "}"
94
+ ]
95
+ : []),
80
96
  'style.setAttribute("data-webpack", getDataWebpackId(key));'
81
97
  ]);
82
98
 
83
99
  return Template.asString([
84
- `var dataWebpackPrefix = ${uniqueName ? JSON.stringify(`${uniqueName}:`) : '"webpack:"'};`,
100
+ `${cst} dataWebpackPrefix = ${uniqueName ? JSON.stringify(`${uniqueName}:`) : '"webpack:"'};`,
85
101
  "",
86
102
  "function getDataWebpackId(identifier) {",
87
103
  Template.indent("return dataWebpackPrefix + identifier;"),
88
104
  "}",
89
105
  "",
90
- "function applyStyle(styleElement, css) {",
91
- Template.indent("styleElement.textContent = css;"),
92
- "}",
93
- "",
94
- "function removeStyleElement(styleElement) {",
95
- Template.indent([
96
- "if (styleElement.parentNode) {",
97
- Template.indent("styleElement.parentNode.removeChild(styleElement);"),
98
- "}"
99
- ]),
100
- "}",
101
- "",
102
106
  "function findStyleElement(identifier) {",
103
107
  Template.indent([
104
- "var elements = document.getElementsByTagName('style');",
108
+ `${cst} elements = document.getElementsByTagName('style');`,
105
109
  "for (var i = 0; i < elements.length; i++) {",
106
110
  Template.indent([
107
- "var el = elements[i];",
111
+ `${cst} el = elements[i];`,
108
112
  "if (el.getAttribute('data-webpack') === getDataWebpackId(identifier)) {",
109
113
  Template.indent("return el;"),
110
114
  "}"
@@ -130,36 +134,41 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
130
134
  `${RuntimeGlobals.cssInjectStyle} = ${runtimeTemplate.basicFunction(
131
135
  "identifier, css",
132
136
  [
133
- "var element = findStyleElement(identifier);",
134
- "if (element) {",
135
- Template.indent("applyStyle(element, css);"),
136
- "} else {",
137
- Template.indent([
138
- "var element = insertStyleElement(identifier);",
139
- "applyStyle(element, css);"
140
- ]),
141
- "}"
137
+ ...injectGuard,
138
+ `${cst} element = findStyleElement(identifier) || insertStyleElement(identifier);`,
139
+ "element.textContent = css;"
142
140
  ]
143
141
  )};`,
144
142
  "",
145
- `${RuntimeGlobals.cssInjectStyle}.removeModules = ${runtimeTemplate.basicFunction(
146
- "removedModules",
147
- [
148
- "if (!removedModules) return;",
149
- "var identifiers = Array.isArray(removedModules) ? removedModules : [removedModules];",
150
- "for (var i = 0; i < identifiers.length; i++) {",
151
- Template.indent([
152
- "var identifier = identifiers[i];",
153
- "var element = findStyleElement(identifier);",
154
- "if (element) {",
155
- Template.indent("removeStyleElement(element);"),
156
- "}"
157
- ]),
158
- "}"
159
- ]
160
- )};`,
161
143
  withHmr
162
144
  ? Template.asString([
145
+ "",
146
+ "function removeStyleElement(styleElement) {",
147
+ Template.indent([
148
+ "if (styleElement.parentNode) {",
149
+ Template.indent(
150
+ "styleElement.parentNode.removeChild(styleElement);"
151
+ ),
152
+ "}"
153
+ ]),
154
+ "}",
155
+ `${RuntimeGlobals.cssInjectStyle}.removeModules = ${runtimeTemplate.basicFunction(
156
+ "removedModules",
157
+ [
158
+ "if (!removedModules) return;",
159
+ `${cst} identifiers = Array.isArray(removedModules) ? removedModules : [removedModules];`,
160
+ ...removeGuard,
161
+ "for (var i = 0; i < identifiers.length; i++) {",
162
+ Template.indent([
163
+ `${cst} identifier = identifiers[i];`,
164
+ `${cst} element = findStyleElement(identifier);`,
165
+ "if (element) {",
166
+ Template.indent("removeStyleElement(element);"),
167
+ "}"
168
+ ]),
169
+ "}"
170
+ ]
171
+ )};`,
163
172
  `${RuntimeGlobals.hmrDownloadUpdateHandlers}.cssInjectStyle = ${runtimeTemplate.basicFunction(
164
173
  "chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList, css",
165
174
  [
@@ -176,4 +185,11 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
176
185
  }
177
186
  }
178
187
 
188
+ CssInjectStyleRuntimeModule.getCompilationHooks = createHooksRegistry(
189
+ () =>
190
+ /** @type {CssInjectCompilationHooks} */ ({
191
+ createStyle: new SyncWaterfallHook(["source", "chunk"])
192
+ })
193
+ );
194
+
179
195
  module.exports = CssInjectStyleRuntimeModule;
@@ -6,12 +6,13 @@
6
6
  "use strict";
7
7
 
8
8
  const { SyncWaterfallHook } = require("tapable");
9
- const Compilation = require("../Compilation");
9
+ /** @typedef {import("../Compilation")} Compilation */
10
10
  const { CSS_TYPE } = require("../ModuleSourceTypeConstants");
11
11
  const RuntimeGlobals = require("../RuntimeGlobals");
12
12
  const RuntimeModule = require("../RuntimeModule");
13
13
  const Template = require("../Template");
14
14
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
15
+ const createHooksRegistry = require("../util/createHooksRegistry");
15
16
  const { chunkHasCss } = require("./CssModulesPlugin");
16
17
 
17
18
  /** @typedef {import("../Chunk")} Chunk */
@@ -19,49 +20,46 @@ const { chunkHasCss } = require("./CssModulesPlugin");
19
20
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
21
  /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
21
22
 
23
+ const createCompilationHooks = () => ({
24
+ /**
25
+ * @type {SyncWaterfallHook<[string, Chunk]>}
26
+ * @since 5.66.0
27
+ */
28
+ createStylesheet: new SyncWaterfallHook(["source", "chunk"]),
29
+ /**
30
+ * @type {SyncWaterfallHook<[string, Chunk]>}
31
+ * @since 5.91.0
32
+ */
33
+ linkPreload: new SyncWaterfallHook(["source", "chunk"]),
34
+ /**
35
+ * @type {SyncWaterfallHook<[string, Chunk]>}
36
+ * @since 5.91.0
37
+ */
38
+ linkPrefetch: new SyncWaterfallHook(["source", "chunk"]),
39
+ /**
40
+ * @type {SyncWaterfallHook<[string, Chunk]>}
41
+ * @since 5.107.0
42
+ */
43
+ linkInsert: new SyncWaterfallHook(["source", "chunk"])
44
+ });
45
+
22
46
  /**
23
- * @typedef {object} CssLoadingRuntimeModulePluginHooks
24
- * @property {SyncWaterfallHook<[string, Chunk]>} createStylesheet
25
- * @property {SyncWaterfallHook<[string, Chunk]>} linkPreload
26
- * @property {SyncWaterfallHook<[string, Chunk]>} linkPrefetch
47
+ * @typedef {ReturnType<typeof createCompilationHooks>} CssLoadingRuntimeModulePluginHooks
27
48
  */
28
49
 
29
- /** @type {WeakMap<Compilation, CssLoadingRuntimeModulePluginHooks>} */
30
- const compilationHooksMap = new WeakMap();
31
-
32
50
  class CssLoadingRuntimeModule extends RuntimeModule {
33
- /**
34
- * @param {Compilation} compilation the compilation
35
- * @returns {CssLoadingRuntimeModulePluginHooks} hooks
36
- */
37
- static getCompilationHooks(compilation) {
38
- if (!(compilation instanceof Compilation)) {
39
- throw new TypeError(
40
- "The 'compilation' argument must be an instance of Compilation"
41
- );
42
- }
43
- let hooks = compilationHooksMap.get(compilation);
44
- if (hooks === undefined) {
45
- hooks = {
46
- createStylesheet: new SyncWaterfallHook(["source", "chunk"]),
47
- linkPreload: new SyncWaterfallHook(["source", "chunk"]),
48
- linkPrefetch: new SyncWaterfallHook(["source", "chunk"])
49
- };
50
- compilationHooksMap.set(compilation, hooks);
51
- }
52
- return hooks;
53
- }
54
-
55
51
  /**
56
52
  * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
57
53
  */
58
54
  constructor(runtimeRequirements) {
59
55
  super("css loading", 10);
60
56
 
57
+ /** @type {ReadOnlyRuntimeRequirements} */
61
58
  this._runtimeRequirements = runtimeRequirements;
62
59
  }
63
60
 
64
61
  /**
62
+ * Generates runtime code for this runtime module.
65
63
  * @returns {string | null} runtime code
66
64
  */
67
65
  generate() {
@@ -75,7 +73,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
75
73
  crossOriginLoading,
76
74
  uniqueName,
77
75
  chunkLoadTimeout: loadTimeout,
78
- charset
76
+ charset,
77
+ importMetaName
79
78
  }
80
79
  } = compilation;
81
80
  const fn = RuntimeGlobals.ensureChunkHandlers;
@@ -119,9 +118,11 @@ class CssLoadingRuntimeModule extends RuntimeModule {
119
118
  const withPreload =
120
119
  this._runtimeRequirements.has(RuntimeGlobals.preloadChunkHandlers) &&
121
120
  (environment.document || isNeutralPlatform) &&
122
- chunk.hasChildByOrder(chunkGraph, "preload", true, chunkHasCss);
121
+ (chunk.hasChildByOrder(chunkGraph, "preload", true, chunkHasCss) ||
122
+ // `parser.javascript.dynamicImportCssPreload` — CSS-only preload order.
123
+ chunk.hasChildByOrder(chunkGraph, "cssPreload", true, chunkHasCss));
123
124
 
124
- const { linkPreload, linkPrefetch, createStylesheet } =
125
+ const { linkPreload, linkPrefetch, createStylesheet, linkInsert } =
125
126
  CssLoadingRuntimeModule.getCompilationHooks(compilation);
126
127
 
127
128
  const withFetchPriority = _runtimeRequirements.has(
@@ -168,39 +169,42 @@ class CssLoadingRuntimeModule extends RuntimeModule {
168
169
  : ""
169
170
  ]);
170
171
 
172
+ const cst = runtimeTemplate.renderConst();
173
+ const lt = runtimeTemplate.renderLet();
174
+ const installedChunksObject = `{\n${Template.indent(
175
+ Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(
176
+ ",\n"
177
+ )
178
+ )}\n}`;
171
179
  return Template.asString([
172
180
  "// object to store loaded and loading chunks",
173
181
  "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
174
182
  "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",
175
- `var installedChunks = ${
176
- stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""
177
- }{`,
178
- Template.indent(
179
- Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(
180
- ",\n"
181
- )
182
- ),
183
- "};",
183
+ `${cst} installedChunks = ${
184
+ stateExpression
185
+ ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
186
+ : installedChunksObject
187
+ };`,
184
188
  "",
185
189
  uniqueName
186
- ? `var uniqueName = ${JSON.stringify(
190
+ ? `${cst} uniqueName = ${JSON.stringify(
187
191
  runtimeTemplate.outputOptions.uniqueName
188
192
  )};`
189
193
  : "// data-webpack is not used as build has no uniqueName",
190
194
  withLoading || withHmr
191
195
  ? Template.asString([
192
- 'var loadingAttribute = "data-webpack-loading";',
193
- `var loadStylesheet = ${runtimeTemplate.basicFunction(
196
+ `${cst} loadingAttribute = "data-webpack-loading";`,
197
+ `${cst} loadStylesheet = ${runtimeTemplate.basicFunction(
194
198
  `chunkId, url, done${
195
199
  withFetchPriority ? ", fetchPriority" : ""
196
200
  }${withHmr ? ", hmr" : ""}`,
197
201
  [
198
- 'var link, needAttach, key = "chunk-" + chunkId;',
202
+ `${lt} link, needAttach, key = "chunk-" + chunkId;`,
199
203
  withHmr ? "if(!hmr) {" : "",
200
- 'var links = document.getElementsByTagName("link");',
204
+ `${cst} links = document.getElementsByTagName("link");`,
201
205
  "for(var i = 0; i < links.length; i++) {",
202
206
  Template.indent([
203
- "var l = links[i];",
207
+ `${cst} l = links[i];`,
204
208
  `if(l.rel == "stylesheet" && (${
205
209
  withHmr
206
210
  ? 'l.href.startsWith(url) || l.getAttribute("href").startsWith(url)'
@@ -220,7 +224,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
220
224
  createStylesheet.call(code, /** @type {Chunk} */ (this.chunk))
221
225
  ]),
222
226
  "}",
223
- `var onLinkComplete = ${runtimeTemplate.basicFunction(
227
+ `${lt} timeout;`,
228
+ `${cst} onLinkComplete = ${runtimeTemplate.basicFunction(
224
229
  "prev, event",
225
230
  Template.asString([
226
231
  "link.onerror = link.onload = null;",
@@ -233,7 +238,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
233
238
  )};`,
234
239
  "if(link.getAttribute(loadingAttribute)) {",
235
240
  Template.indent([
236
- `var timeout = setTimeout(onLinkComplete.bind(null, undefined, { type: 'timeout', target: link }), ${loadTimeout});`,
241
+ `timeout = setTimeout(onLinkComplete.bind(null, undefined, { type: 'timeout', target: link }), ${loadTimeout});`,
237
242
  "link.onerror = onLinkComplete.bind(null, link.onerror);",
238
243
  "link.onload = onLinkComplete.bind(null, link.onload);"
239
244
  ]),
@@ -241,8 +246,24 @@ class CssLoadingRuntimeModule extends RuntimeModule {
241
246
  withHmr && withFetchPriority
242
247
  ? 'if (hmr && hmr.getAttribute("fetchpriority")) link.setAttribute("fetchpriority", hmr.getAttribute("fetchpriority"));'
243
248
  : "",
244
- withHmr ? "hmr ? document.head.insertBefore(link, hmr) :" : "",
245
- "needAttach && document.head.appendChild(link);",
249
+ linkInsert.call(
250
+ withHmr
251
+ ? Template.asString([
252
+ "if (hmr) {",
253
+ Template.indent(
254
+ "hmr.parentNode.insertBefore(link, hmr);"
255
+ ),
256
+ "} else if (needAttach) {",
257
+ Template.indent("document.head.appendChild(link);"),
258
+ "}"
259
+ ])
260
+ : Template.asString([
261
+ "if (needAttach) {",
262
+ Template.indent("document.head.appendChild(link);"),
263
+ "}"
264
+ ]),
265
+ /** @type {Chunk} */ (this.chunk)
266
+ ),
246
267
  "return link;"
247
268
  ]
248
269
  )};`
@@ -254,7 +275,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
254
275
  `chunkId, promises${withFetchPriority ? " , fetchPriority" : ""}`,
255
276
  [
256
277
  "// css chunk loading",
257
- `var installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
278
+ `${lt} installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
258
279
  'if(installedChunkData !== 0) { // 0 means "already installed".',
259
280
  Template.indent([
260
281
  "",
@@ -268,17 +289,17 @@ class CssLoadingRuntimeModule extends RuntimeModule {
268
289
  : `if(${hasCssMatcher("chunkId")}) {`,
269
290
  Template.indent([
270
291
  "// setup Promise in chunk cache",
271
- `var promise = new Promise(${runtimeTemplate.expressionFunction(
292
+ `${cst} promise = new Promise(${runtimeTemplate.expressionFunction(
272
293
  "installedChunkData = installedChunks[chunkId] = [resolve, reject]",
273
294
  "resolve, reject"
274
295
  )});`,
275
296
  "promises.push(installedChunkData[2] = promise);",
276
297
  "",
277
298
  "// start chunk loading",
278
- `var url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
299
+ `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
279
300
  "// create error before stack unwound to get useful stacktrace later",
280
- "var error = new Error();",
281
- `var loadingEnded = ${runtimeTemplate.basicFunction(
301
+ `${cst} error = new Error();`,
302
+ `${cst} loadingEnded = ${runtimeTemplate.basicFunction(
282
303
  "event",
283
304
  [
284
305
  `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId)) {`,
@@ -289,12 +310,13 @@ class CssLoadingRuntimeModule extends RuntimeModule {
289
310
  Template.indent([
290
311
  'if(event.type !== "load") {',
291
312
  Template.indent([
292
- "var errorType = event && event.type;",
293
- "var realHref = event && event.target && event.target.href;",
313
+ `${cst} errorType = event && event.type;`,
314
+ `${cst} realHref = event && event.target && event.target.href;`,
294
315
  "error.message = 'Loading css chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realHref + ')';",
295
316
  "error.name = 'ChunkLoadError';",
296
317
  "error.type = errorType;",
297
318
  "error.request = realHref;",
319
+ "error.event = event;",
298
320
  "installedChunkData[1](error);"
299
321
  ]),
300
322
  "} else {",
@@ -318,7 +340,25 @@ class CssLoadingRuntimeModule extends RuntimeModule {
318
340
  });`
319
341
  ]),
320
342
  isNeutralPlatform
321
- ? "} else { loadingEnded({ type: 'load' }); }"
343
+ ? Template.asString([
344
+ "} else {",
345
+ Template.indent([
346
+ // no DOM (Node SSR): read the emitted CSS via dynamic import('fs') (works on every node), collect it; never reject on a missing file
347
+ `Promise.all([import('fs'), import('url')]).then(${runtimeTemplate.basicFunction(
348
+ "[{ readFile }, { URL }]",
349
+ [
350
+ `readFile(new URL(url, ${importMetaName}.url), 'utf8', ${runtimeTemplate.basicFunction(
351
+ "err, content",
352
+ [
353
+ `if (!err) ${runtimeTemplate.cssServerStyleRegistry()}["chunk-" + chunkId] = content;`,
354
+ "loadingEnded({ type: 'load' });"
355
+ ]
356
+ )});`
357
+ ]
358
+ )});`
359
+ ]),
360
+ "}"
361
+ ])
322
362
  : ""
323
363
  ]),
324
364
  "} else installedChunks[chunkId] = 0;"
@@ -342,12 +382,13 @@ class CssLoadingRuntimeModule extends RuntimeModule {
342
382
  }) {`,
343
383
  Template.indent([
344
384
  "installedChunks[chunkId] = null;",
385
+ // prefetch is a browser-only resource hint; no-op without a DOM (e.g. node side of a universal build)
345
386
  isNeutralPlatform
346
387
  ? "if (typeof document === 'undefined') return;"
347
388
  : "",
348
389
  linkPrefetch.call(
349
390
  Template.asString([
350
- "var link = document.createElement('link');",
391
+ `${cst} link = document.createElement('link');`,
351
392
  charset ? "link.charset = 'utf-8';" : "",
352
393
  crossOriginLoading
353
394
  ? `link.crossOrigin = ${JSON.stringify(
@@ -382,12 +423,13 @@ class CssLoadingRuntimeModule extends RuntimeModule {
382
423
  }) {`,
383
424
  Template.indent([
384
425
  "installedChunks[chunkId] = null;",
426
+ // preload is a browser-only resource hint; no-op without a DOM (e.g. node side of a universal build)
385
427
  isNeutralPlatform
386
428
  ? "if (typeof document === 'undefined') return;"
387
429
  : "",
388
430
  linkPreload.call(
389
431
  Template.asString([
390
- "var link = document.createElement('link');",
432
+ `${cst} link = document.createElement('link');`,
391
433
  charset ? "link.charset = 'utf-8';" : "",
392
434
  `if (${RuntimeGlobals.scriptNonce}) {`,
393
435
  Template.indent(
@@ -420,26 +462,26 @@ class CssLoadingRuntimeModule extends RuntimeModule {
420
462
  : "// no preloaded",
421
463
  withHmr
422
464
  ? Template.asString([
423
- "var oldTags = [];",
424
- "var newTags = [];",
425
- `var applyHandler = ${runtimeTemplate.basicFunction("options", [
426
- `return { dispose: ${runtimeTemplate.basicFunction("", [
465
+ `${cst} oldTags = [];`,
466
+ `${cst} newTags = [];`,
467
+ `${cst} applyHandler = ${runtimeTemplate.basicFunction("options", [
468
+ `return { ${runtimeTemplate.method("dispose", "", [
427
469
  "while(oldTags.length) {",
428
470
  Template.indent([
429
- "var oldTag = oldTags.pop();",
430
- "if(oldTag && oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);"
471
+ `${cst} oldTag = oldTags.pop();`,
472
+ `if(${runtimeTemplate.optionalChaining("oldTag", "parentNode")}) oldTag.parentNode.removeChild(oldTag);`
431
473
  ]),
432
474
  "}"
433
- ])}, apply: ${runtimeTemplate.basicFunction("", [
475
+ ])}, ${runtimeTemplate.method("apply", "", [
434
476
  "while(newTags.length) {",
435
477
  Template.indent([
436
- "var newTag = newTags.pop();",
478
+ `${cst} newTag = newTags.pop();`,
437
479
  "newTag.sheet.disabled = false"
438
480
  ]),
439
481
  "}"
440
482
  ])} };`
441
483
  ])}`,
442
- `var cssTextKey = ${runtimeTemplate.returningFunction(
484
+ `${cst} cssTextKey = ${runtimeTemplate.returningFunction(
443
485
  `Array.from(link.sheet.cssRules, ${runtimeTemplate.returningFunction(
444
486
  "r.cssText",
445
487
  "r"
@@ -452,37 +494,83 @@ class CssLoadingRuntimeModule extends RuntimeModule {
452
494
  "chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList, css",
453
495
  [
454
496
  isNeutralPlatform
455
- ? "if (typeof document === 'undefined') return;"
497
+ ? Template.asString([
498
+ "if (typeof document === 'undefined') {",
499
+ Template.indent([
500
+ // node SSR: refresh the server style registry from the re-emitted CSS instead of touching the DOM
501
+ `${cst} cssRemovedChunks = css && css.r;`,
502
+ `${cst} registry = ${runtimeTemplate.cssServerStyleRegistry()};`,
503
+ `chunkIds.forEach(${runtimeTemplate.basicFunction(
504
+ "chunkId",
505
+ [
506
+ `${cst} key = "chunk-" + chunkId;`,
507
+ `if(${runtimeTemplate.optionalChaining(
508
+ "cssRemovedChunks",
509
+ "indexOf(chunkId)"
510
+ )} >= 0) { delete registry[key]; return; }`,
511
+ `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
512
+ `promises.push(Promise.all([import('fs'), import('url')]).then(${runtimeTemplate.basicFunction(
513
+ "[{ readFile }, { URL }]",
514
+ [
515
+ `return new Promise(${runtimeTemplate.basicFunction(
516
+ "resolve",
517
+ [
518
+ // best-effort: a non-file publicPath (e.g. a CDN) can't be read from disk, so skip
519
+ "try {",
520
+ Template.indent([
521
+ `readFile(new URL(url, ${importMetaName}.url), 'utf8', ${runtimeTemplate.basicFunction(
522
+ "err, content",
523
+ [
524
+ "if (!err) registry[key] = content;",
525
+ "resolve();"
526
+ ]
527
+ )});`
528
+ ]),
529
+ "} catch (e) { resolve(); }"
530
+ ]
531
+ )});`
532
+ ]
533
+ )}));`
534
+ ]
535
+ )});`,
536
+ "return;"
537
+ ]),
538
+ "}"
539
+ ])
456
540
  : "",
457
541
  "applyHandlers.push(applyHandler);",
458
542
  "// Read CSS removed chunks from update manifest",
459
- "var cssRemovedChunks = css && css.r;",
543
+ `${cst} cssRemovedChunks = css && css.r;`,
460
544
  `chunkIds.forEach(${runtimeTemplate.basicFunction("chunkId", [
461
- `var filename = ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
462
- `var url = ${RuntimeGlobals.publicPath} + filename;`,
463
- "var oldTag = loadStylesheet(chunkId, url);",
545
+ `${cst} filename = ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
546
+ `${cst} url = ${RuntimeGlobals.publicPath} + filename;`,
547
+ `${cst} oldTag = loadStylesheet(chunkId, url);`,
464
548
  `if(!oldTag && !${withHmr} ) return;`,
465
549
  "// Skip if CSS was removed",
466
- "if(cssRemovedChunks && cssRemovedChunks.indexOf(chunkId) >= 0) {",
550
+ `if(${runtimeTemplate.optionalChaining(
551
+ "cssRemovedChunks",
552
+ "indexOf(chunkId)"
553
+ )} >= 0) {`,
467
554
  Template.indent(["oldTags.push(oldTag);", "return;"]),
468
555
  "}",
469
556
  "",
470
557
  "// create error before stack unwound to get useful stacktrace later",
471
- "var error = new Error();",
558
+ `${cst} error = new Error();`,
472
559
  `promises.push(new Promise(${runtimeTemplate.basicFunction(
473
560
  "resolve, reject",
474
561
  [
475
- `var link = loadStylesheet(chunkId, url + (url.indexOf("?") < 0 ? "?" : "&") + "hmr=" + Date.now(), ${runtimeTemplate.basicFunction(
562
+ `${cst} link = loadStylesheet(chunkId, url + (url.indexOf("?") < 0 ? "?" : "&") + "hmr=" + Date.now(), ${runtimeTemplate.basicFunction(
476
563
  "event",
477
564
  [
478
565
  'if(event.type !== "load") {',
479
566
  Template.indent([
480
- "var errorType = event && event.type;",
481
- "var realHref = event && event.target && event.target.href;",
567
+ `${cst} errorType = event && event.type;`,
568
+ `${cst} realHref = event && event.target && event.target.href;`,
482
569
  "error.message = 'Loading css hot update chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realHref + ')';",
483
570
  "error.name = 'ChunkLoadError';",
484
571
  "error.type = errorType;",
485
572
  "error.request = realHref;",
573
+ "error.event = event;",
486
574
  "reject(error);"
487
575
  ]),
488
576
  "} else {",
@@ -507,4 +595,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
507
595
  }
508
596
  }
509
597
 
598
+ CssLoadingRuntimeModule.getCompilationHooks = createHooksRegistry(
599
+ createCompilationHooks
600
+ );
601
+
510
602
  module.exports = CssLoadingRuntimeModule;