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