@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
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SyncHook, SyncWaterfallHook } = require("tapable");
8
+ const { SyncBailHook, SyncHook, SyncWaterfallHook } = require("tapable");
9
9
  const {
10
10
  CachedSource,
11
11
  ConcatSource,
@@ -13,9 +13,7 @@ const {
13
13
  RawSource,
14
14
  ReplaceSource
15
15
  } = require("webpack-sources");
16
- const Compilation = require("../Compilation");
17
- const CssModule = require("../CssModule");
18
- const { tryRunOrWebpackError } = require("../HookWebpackError");
16
+ /** @typedef {import("../Compilation")} Compilation */
19
17
  const HotUpdateChunk = require("../HotUpdateChunk");
20
18
  const { CSS_IMPORT_TYPE, CSS_TYPE } = require("../ModuleSourceTypeConstants");
21
19
  const {
@@ -27,25 +25,32 @@ const {
27
25
  const NormalModule = require("../NormalModule");
28
26
  const RuntimeGlobals = require("../RuntimeGlobals");
29
27
  const Template = require("../Template");
30
- const WebpackError = require("../WebpackError");
31
28
  const CssIcssExportDependency = require("../dependencies/CssIcssExportDependency");
32
29
  const CssIcssImportDependency = require("../dependencies/CssIcssImportDependency");
33
30
  const CssIcssSymbolDependency = require("../dependencies/CssIcssSymbolDependency");
34
31
  const CssImportDependency = require("../dependencies/CssImportDependency");
35
32
  const CssUrlDependency = require("../dependencies/CssUrlDependency");
36
33
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
34
+ const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
35
+ const WebpackError = require("../errors/WebpackError");
37
36
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
37
+ const ConcatenatedModule = require("../optimize/ConcatenatedModule");
38
38
  const { compareModulesByFullName } = require("../util/comparators");
39
39
  const createHash = require("../util/createHash");
40
+ const createHooksRegistry = require("../util/createHooksRegistry");
40
41
  const { getUndoPath } = require("../util/identifier");
42
+ const implicitTypeLoaderFallback = require("../util/implicitTypeLoaderFallback");
41
43
  const memoize = require("../util/memoize");
42
- const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
44
+ const { digestNonNumericOnlyWithFull } = require("../util/nonNumericOnlyHash");
45
+ const {
46
+ PUBLIC_PATH_AUTO,
47
+ walkFullHashPlaceholders
48
+ } = require("../util/publicPathPlaceholder");
43
49
  const removeBOM = require("../util/removeBOM");
44
50
  const CssGenerator = require("./CssGenerator");
51
+ const CssModule = require("./CssModule");
45
52
  const CssParser = require("./CssParser");
46
53
 
47
- const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
48
-
49
54
  /** @typedef {import("webpack-sources").Source} Source */
50
55
  /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
51
56
  /** @typedef {import("../Chunk")} Chunk */
@@ -53,17 +58,19 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
53
58
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
54
59
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
55
60
  /** @typedef {import("../Compiler")} Compiler */
56
- /** @typedef {import("../CssModule").Inheritance} Inheritance */
57
- /** @typedef {import("../CssModule").CSSModuleCreateData} CSSModuleCreateData */
61
+ /** @typedef {import("./CssModule").Inheritance} Inheritance */
62
+ /** @typedef {import("./CssModule").CssModuleCreateData} CssModuleCreateData */
58
63
  /** @typedef {import("../Module")} Module */
59
64
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
65
+ /** @typedef {import("./CssModule").CssModuleBuildInfo} CssModuleBuildInfo */
60
66
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
61
67
  /** @typedef {import("../Template").RuntimeTemplate} RuntimeTemplate */
62
- /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
68
+ /** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
63
69
  /** @typedef {import("../util/Hash")} Hash */
64
70
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
65
71
 
66
72
  /**
73
+ * Defines the render context type used by this module.
67
74
  * @typedef {object} RenderContext
68
75
  * @property {Chunk} chunk the chunk
69
76
  * @property {ChunkGraph} chunkGraph the chunk graph
@@ -71,29 +78,28 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
71
78
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
72
79
  * @property {string} uniqueName the unique name
73
80
  * @property {string} undoPath undo path to css file
81
+ * @property {string=} hash compilation hash
74
82
  * @property {CssModule[]} modules modules
75
83
  */
76
84
 
77
85
  /**
86
+ * Defines the chunk render context type used by this module.
78
87
  * @typedef {object} ChunkRenderContext
79
88
  * @property {Chunk=} chunk the chunk
80
89
  * @property {ChunkGraph=} chunkGraph the chunk graph
81
90
  * @property {CodeGenerationResults=} codeGenerationResults results of code generation
82
91
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
83
92
  * @property {string} undoPath undo path to css file
93
+ * @property {string=} hash compilation hash
84
94
  * @property {WeakMap<Source, ModuleFactoryCacheEntry>} moduleFactoryCache moduleFactoryCache
85
95
  * @property {Source} moduleSourceContent content
86
96
  */
87
97
 
88
98
  /**
89
- * @typedef {object} CompilationHooks
90
- * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModulePackage
91
- * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
92
- */
93
-
94
- /**
99
+ * Defines the module factory cache entry type used by this module.
95
100
  * @typedef {object} ModuleFactoryCacheEntry
96
101
  * @property {string} undoPath - The undo path to the CSS file
102
+ * @property {string | undefined} hash - The compilation hash
97
103
  * @property {Inheritance} inheritance - The inheritance chain
98
104
  * @property {CachedSource} source - The cached source
99
105
  */
@@ -101,14 +107,87 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
101
107
  const getCssLoadingRuntimeModule = memoize(() =>
102
108
  require("./CssLoadingRuntimeModule")
103
109
  );
104
- const getCssMergeStyleSheetsRuntimeModule = memoize(() =>
105
- require("./CssMergeStyleSheetsRuntimeModule")
106
- );
107
110
  const getCssInjectStyleRuntimeModule = memoize(() =>
108
111
  require("./CssInjectStyleRuntimeModule")
109
112
  );
110
113
 
111
114
  /**
115
+ * @typedef {object} PublicPathPlaceholderPlan
116
+ * @property {number[]} autos start offsets of each `PUBLIC_PATH_AUTO` placeholder
117
+ * @property {{ start: number, end: number, length: number }[]} hashes `[start, end)` ranges of each `PUBLIC_PATH_FULL_HASH` placeholder and its requested hash length
118
+ */
119
+
120
+ /**
121
+ * Public-path placeholder offsets are invariant for a given module source —
122
+ * they don't depend on `undoPath`/`hash`/`inheritance`/runtime — so scan once
123
+ * and reuse across renders instead of re-materializing and re-scanning the
124
+ * source on every cache miss. Weakly keyed so entries release with the source.
125
+ * @type {WeakMap<Source, PublicPathPlaceholderPlan>}
126
+ */
127
+ const publicPathPlaceholderPlans = new WeakMap();
128
+
129
+ /**
130
+ * Memoized inheritance chain per module, revalidated against its source
131
+ * fields — `updateCacheModule` reassigns them on watch rebuilds.
132
+ * @type {WeakMap<CssModule, { cssLayer: CssModule["cssLayer"], supports: CssModule["supports"], media: CssModule["media"], inheritance: CssModule["inheritance"], chain: Inheritance }>}
133
+ */
134
+ const moduleInheritanceCache = new WeakMap();
135
+
136
+ /**
137
+ * Gets the memoized inheritance chain of a css module.
138
+ * @param {CssModule} module css module
139
+ * @returns {Inheritance} inheritance chain including the module's own entry
140
+ */
141
+ const getModuleInheritance = (module) => {
142
+ const entry = moduleInheritanceCache.get(module);
143
+ if (
144
+ entry !== undefined &&
145
+ entry.cssLayer === module.cssLayer &&
146
+ entry.supports === module.supports &&
147
+ entry.media === module.media &&
148
+ entry.inheritance === module.inheritance
149
+ ) {
150
+ return entry.chain;
151
+ }
152
+ /** @type {Inheritance} */
153
+ const chain = [[module.cssLayer, module.supports, module.media]];
154
+ if (module.inheritance) chain.push(...module.inheritance);
155
+ moduleInheritanceCache.set(module, {
156
+ cssLayer: module.cssLayer,
157
+ supports: module.supports,
158
+ media: module.media,
159
+ inheritance: module.inheritance,
160
+ chain
161
+ });
162
+ return chain;
163
+ };
164
+
165
+ /**
166
+ * Locate the public-path placeholders in a materialized module source.
167
+ * @param {string} content materialized module source
168
+ * @returns {PublicPathPlaceholderPlan} placeholder offsets
169
+ */
170
+ const computePublicPathPlaceholderPlan = (content) => {
171
+ /** @type {number[]} */
172
+ const autos = [];
173
+ const autoLen = PUBLIC_PATH_AUTO.length;
174
+ for (
175
+ let idx = content.indexOf(PUBLIC_PATH_AUTO);
176
+ idx !== -1;
177
+ idx = content.indexOf(PUBLIC_PATH_AUTO, idx + autoLen)
178
+ ) {
179
+ autos.push(idx);
180
+ }
181
+ /** @type {{ start: number, end: number, length: number }[]} */
182
+ const hashes = [];
183
+ walkFullHashPlaceholders(content, (start, end, length) => {
184
+ hashes.push({ start, end, length });
185
+ });
186
+ return { autos, hashes };
187
+ };
188
+
189
+ /**
190
+ * Returns ], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema.
112
191
  * @param {string} name name
113
192
  * @returns {{ oneOf: [{ $ref: string }], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema
114
193
  */
@@ -131,51 +210,63 @@ const generatorValidationOptions = {
131
210
  baseDataPath: "generator"
132
211
  };
133
212
 
134
- /** @type {WeakMap<Compilation, CompilationHooks>} */
135
- const compilationHooksMap = new WeakMap();
136
-
137
213
  const PLUGIN_NAME = "CssModulesPlugin";
138
214
 
139
- class CssModulesPlugin {
215
+ const createCompilationHooks = () => ({
140
216
  /**
141
- * @param {Compilation} compilation the compilation
142
- * @returns {CompilationHooks} the attached hooks
217
+ * @type {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>}
218
+ * @since 5.94.0
143
219
  */
144
- static getCompilationHooks(compilation) {
145
- if (!(compilation instanceof Compilation)) {
146
- throw new TypeError(
147
- "The 'compilation' argument must be an instance of Compilation"
148
- );
149
- }
150
- let hooks = compilationHooksMap.get(compilation);
151
- if (hooks === undefined) {
152
- hooks = {
153
- renderModulePackage: new SyncWaterfallHook([
154
- "source",
155
- "module",
156
- "renderContext"
157
- ]),
158
- chunkHash: new SyncHook(["chunk", "hash", "context"])
159
- };
160
- compilationHooksMap.set(compilation, hooks);
161
- }
162
- return hooks;
163
- }
220
+ renderModulePackage: new SyncWaterfallHook([
221
+ "source",
222
+ "module",
223
+ "renderContext"
224
+ ]),
225
+ /**
226
+ * @type {SyncHook<[Chunk, Hash, ChunkHashContext]>}
227
+ * @since 5.94.0
228
+ */
229
+ chunkHash: new SyncHook(["chunk", "hash", "context"]),
230
+ /**
231
+ * Called for each CSS source type (CSS_IMPORT_TYPE, CSS_TYPE) with the chunk's modules pre-sorted by full module name; return an ordered `Module[]` to override the default import-order topological sort, or return `undefined` to keep the default.
232
+ * @type {SyncBailHook<[Chunk, Module[], Compilation], Module[] | undefined | void>}
233
+ * @since 5.107.0
234
+ */
235
+ orderModules: new SyncBailHook(["chunk", "modules", "compilation"])
236
+ });
164
237
 
238
+ /**
239
+ * Defines the compilation hooks type used by this module.
240
+ * @typedef {ReturnType<typeof createCompilationHooks>} CompilationHooks
241
+ */
242
+
243
+ class CssModulesPlugin {
165
244
  constructor() {
166
245
  /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
167
246
  this._moduleFactoryCache = new WeakMap();
168
247
  }
169
248
 
170
249
  /**
171
- * Apply the plugin
250
+ * Applies the plugin by registering its hooks on the compiler.
172
251
  * @param {Compiler} compiler the compiler instance
173
252
  * @returns {void}
174
253
  */
175
254
  apply(compiler) {
255
+ // `"auto"` marks implicit enablement (no user rule for CSS files) — see
256
+ // `applyExperimentsDefaults`. Only then loaders win over the built-in type.
257
+ // TODO webpack 6: css defaults to `true`, drop this implicit-only fallback.
258
+ const implicitlyEnabled = compiler.options.experiments.css === "auto";
176
259
  compiler.hooks.compilation.tap(
177
260
  PLUGIN_NAME,
178
261
  (compilation, { normalModuleFactory }) => {
262
+ if (implicitlyEnabled) {
263
+ implicitTypeLoaderFallback(
264
+ normalModuleFactory,
265
+ PLUGIN_NAME,
266
+ /\.css$/i,
267
+ CSS_MODULE_TYPE_AUTO
268
+ );
269
+ }
179
270
  const hooks = CssModulesPlugin.getCompilationHooks(compilation);
180
271
  compilation.dependencyFactories.set(
181
272
  CssImportDependency,
@@ -255,11 +346,11 @@ class CssModulesPlugin {
255
346
  case CSS_MODULE_TYPE_MODULE: {
256
347
  defaultMode = "local";
257
348
  compiler.validate(
258
- () => getSchema("CssModuleParserOptions"),
349
+ () => getSchema("CssAutoOrModuleParserOptions"),
259
350
  parserOptions,
260
351
  parserValidationOptions,
261
352
  (options) =>
262
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
353
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
263
354
  options
264
355
  )
265
356
  );
@@ -268,11 +359,11 @@ class CssModulesPlugin {
268
359
  case CSS_MODULE_TYPE_AUTO: {
269
360
  defaultMode = "auto";
270
361
  compiler.validate(
271
- () => getSchema("CssModuleParserOptions"),
362
+ () => getSchema("CssAutoOrModuleParserOptions"),
272
363
  parserOptions,
273
364
  parserValidationOptions,
274
365
  (options) =>
275
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
366
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
276
367
  options
277
368
  )
278
369
  );
@@ -354,71 +445,28 @@ class CssModulesPlugin {
354
445
  const exportType =
355
446
  /** @type {CssParser} */
356
447
  (createData.parser).options.exportType;
357
- if (resolveData.dependencies.length > 0) {
358
- // When CSS is imported from CSS there is only one dependency
359
- const dependency = resolveData.dependencies[0];
360
-
361
- if (dependency instanceof CssImportDependency) {
362
- const parent =
363
- /** @type {CssModule} */
364
- (compilation.moduleGraph.getParentModule(dependency));
365
-
366
- if (parent instanceof CssModule) {
367
- /** @type {Inheritance | undefined} */
368
- let inheritance;
369
-
370
- if (
371
- parent.cssLayer !== undefined ||
372
- parent.supports ||
373
- parent.media
374
- ) {
375
- if (!inheritance) {
376
- inheritance = [];
377
- }
378
-
379
- inheritance.push([
380
- parent.cssLayer,
381
- parent.supports,
382
- parent.media
383
- ]);
384
- }
385
-
386
- if (parent.inheritance) {
387
- if (!inheritance) {
388
- inheritance = [];
389
- }
390
-
391
- inheritance.push(...parent.inheritance);
392
- }
393
-
394
- return new CssModule(
395
- /** @type {CSSModuleCreateData} */
396
- ({
397
- ...createData,
398
- cssLayer: dependency.layer,
399
- supports: dependency.supports,
400
- media: dependency.media,
401
- inheritance,
402
- exportType: exportType || parent.exportType
403
- })
404
- );
405
- }
406
-
407
- return new CssModule(
408
- /** @type {CSSModuleCreateData} */
409
- ({
410
- ...createData,
411
- cssLayer: dependency.layer,
412
- supports: dependency.supports,
413
- media: dependency.media,
414
- exportType
415
- })
416
- );
417
- }
448
+ // When CSS is imported from CSS there is only one dependency
449
+ const dependency =
450
+ resolveData.dependencies.length > 0
451
+ ? resolveData.dependencies[0]
452
+ : undefined;
453
+
454
+ if (dependency instanceof CssImportDependency) {
455
+ return new CssModule(
456
+ /** @type {CssModuleCreateData} */
457
+ ({
458
+ ...createData,
459
+ cssLayer: dependency.layer,
460
+ supports: dependency.supports,
461
+ media: dependency.media,
462
+ inheritance: dependency.inheritance,
463
+ exportType: dependency.exportType || exportType
464
+ })
465
+ );
418
466
  }
419
467
 
420
468
  return new CssModule(
421
- /** @type {CSSModuleCreateData} */
469
+ /** @type {CssModuleCreateData} */
422
470
  (
423
471
  /** @type {unknown} */ ({
424
472
  ...createData,
@@ -444,45 +492,78 @@ class CssModulesPlugin {
444
492
 
445
493
  JavascriptModulesPlugin.getCompilationHooks(
446
494
  compilation
447
- ).renderModuleContent.tap(PLUGIN_NAME, (source, module) => {
448
- if (module instanceof CssModule && module.hot) {
449
- const exportType = module.exportType;
495
+ ).renderModuleContent.tap(PLUGIN_NAME, (source, module, ctx) => {
496
+ const injectCssStylesVar =
497
+ module instanceof ConcatenatedModule &&
498
+ module.modules.find(
499
+ (m) =>
500
+ m instanceof CssModule &&
501
+ m.exportType === "style" &&
502
+ !(/** @type {CssGenerator} */ (m.generator)._exportsOnly)
503
+ );
504
+ const injectHMRCode =
505
+ (module instanceof CssModule && module.hot) ||
506
+ (module instanceof ConcatenatedModule &&
507
+ module.rootModule instanceof CssModule &&
508
+ module.rootModule.hot);
509
+
510
+ if (injectCssStylesVar) {
511
+ source = new ConcatSource(
512
+ "var __webpack_css_styles__ = [];",
513
+ "\n",
514
+ source
515
+ );
516
+ }
517
+ if (injectHMRCode) {
518
+ const currentModule = /** @type {CssModule} */ (
519
+ module instanceof ConcatenatedModule ? module.rootModule : module
520
+ );
521
+ const exportType = currentModule.exportType || "link";
450
522
  // When exportType !== "link", modules behave like JavaScript modules
451
- if (exportType && !["link", "style"].includes(exportType)) {
452
- return source;
453
- }
454
- // For exportType === "link", we can optimize with self-acceptance
455
- const cssData = /** @type {BuildInfo} */ (module.buildInfo).cssData;
456
- if (!cssData) {
457
- return source;
458
- }
459
- const exports = cssData.exports;
460
- /** @type {Record<string, string>} */
461
- const exportsObj = {};
462
- for (const [key, value] of exports) {
463
- exportsObj[key] = value;
523
+ if (["link", "style"].includes(exportType)) {
524
+ // For exportType === "link", we can optimize with self-acceptance
525
+ const cssData = /** @type {CssModuleBuildInfo} */ (
526
+ module.buildInfo
527
+ ).cssData;
528
+ if (!cssData) {
529
+ return source;
530
+ }
531
+ const exports = cssData.exports;
532
+ /** @type {Record<string, string>} */
533
+ const exportsObj = {};
534
+ for (const [key, value] of exports) {
535
+ exportsObj[key] = value;
536
+ }
537
+ const stringifiedExports = JSON.stringify(
538
+ JSON.stringify(exportsObj)
539
+ );
540
+
541
+ const hmrCode = Template.asString([
542
+ "",
543
+ `var __webpack_css_exports__ = ${stringifiedExports};`,
544
+ "// only invalidate when locals change",
545
+ `if (${ctx.runtimeTemplate.optionalChaining("module.hot.data", "__webpack_css_exports__")} && module.hot.data.__webpack_css_exports__ != __webpack_css_exports__) {`,
546
+ Template.indent("module.hot.invalidate();"),
547
+ "} else {",
548
+ Template.indent("module.hot.accept();"),
549
+ "}",
550
+ "module.hot.dispose(function(data) {",
551
+ Template.indent([
552
+ "data.__webpack_css_exports__ = __webpack_css_exports__;"
553
+ ]),
554
+ "});"
555
+ ]);
556
+
557
+ source = new ConcatSource(source, "\n", new RawSource(hmrCode));
464
558
  }
465
- const stringifiedExports = JSON.stringify(
466
- JSON.stringify(exportsObj)
559
+ }
560
+ if (injectCssStylesVar) {
561
+ /** @type {ConcatSource} */
562
+ (source).add(
563
+ "for (let i = 0; i < __webpack_css_styles__.length; i++) {\n" +
564
+ `${RuntimeGlobals.cssInjectStyle}(__webpack_css_styles__[i][0], __webpack_css_styles__[i][1]);\n` +
565
+ "}"
467
566
  );
468
-
469
- const hmrCode = Template.asString([
470
- "",
471
- `var __webpack_css_exports__ = ${stringifiedExports};`,
472
- "// only invalidate when locals change",
473
- "if (module.hot.data && module.hot.data.__webpack_css_exports__ && module.hot.data.__webpack_css_exports__ != __webpack_css_exports__) {",
474
- Template.indent("module.hot.invalidate();"),
475
- "} else {",
476
- Template.indent("module.hot.accept();"),
477
- "}",
478
- "module.hot.dispose(function(data) {",
479
- Template.indent([
480
- "data.__webpack_css_exports__ = __webpack_css_exports__;"
481
- ]),
482
- "});"
483
- ]);
484
-
485
- return new ConcatSource(source, "\n", new RawSource(hmrCode));
486
567
  }
487
568
 
488
569
  return source;
@@ -532,8 +613,8 @@ class CssModulesPlugin {
532
613
  hash.update(chunkGraph.getModuleHash(module, chunk.runtime));
533
614
  }
534
615
  }
535
- const digest = hash.digest(hashDigest);
536
- chunk.contentHash.css = nonNumericOnlyHash(digest, hashDigestLength);
616
+ [chunk.contentHash.css, chunk.contentHashFull.css] =
617
+ digestNonNumericOnlyWithFull(hash, hashDigest, hashDigestLength);
537
618
  });
538
619
  compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
539
620
  const { chunkGraph } = compilation;
@@ -571,6 +652,7 @@ class CssModulesPlugin {
571
652
  codeGenerationResults,
572
653
  uniqueName: compilation.outputOptions.uniqueName,
573
654
  undoPath,
655
+ hash,
574
656
  modules,
575
657
  runtimeTemplate
576
658
  },
@@ -586,6 +668,7 @@ class CssModulesPlugin {
586
668
  });
587
669
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
588
670
  /**
671
+ * Checks whether this css modules plugin is enabled for chunk.
589
672
  * @param {Chunk} chunk the chunk
590
673
  * @returns {boolean} true, when enabled
591
674
  */
@@ -600,6 +683,7 @@ class CssModulesPlugin {
600
683
  /** @type {WeakSet<Chunk>} */
601
684
  const onceForChunkSet = new WeakSet();
602
685
  /**
686
+ * Handles the hook callback for this code path.
603
687
  * @param {Chunk} chunk chunk to check
604
688
  * @param {RuntimeRequirements} set runtime requirements
605
689
  */
@@ -655,20 +739,11 @@ class CssModulesPlugin {
655
739
  set.add(RuntimeGlobals.getChunkCssFilename);
656
740
  });
657
741
 
658
- compilation.hooks.runtimeRequirementInTree
659
- .for(RuntimeGlobals.cssMergeStyleSheets)
660
- .tap(PLUGIN_NAME, (chunk) => {
661
- const CssMergeStyleSheetsRuntimeModule =
662
- getCssMergeStyleSheetsRuntimeModule();
663
- compilation.addRuntimeModule(
664
- chunk,
665
- new CssMergeStyleSheetsRuntimeModule()
666
- );
667
- });
668
-
669
742
  compilation.hooks.runtimeRequirementInTree
670
743
  .for(RuntimeGlobals.cssInjectStyle)
671
744
  .tap(PLUGIN_NAME, (chunk, set) => {
745
+ // Same as above: namespace stub is enough.
746
+ set.add(RuntimeGlobals.requireScope);
672
747
  const CssInjectStyleRuntimeModule =
673
748
  getCssInjectStyleRuntimeModule();
674
749
  compilation.addRuntimeModule(
@@ -681,6 +756,7 @@ class CssModulesPlugin {
681
756
  }
682
757
 
683
758
  /**
759
+ * Gets modules in order.
684
760
  * @param {Chunk} chunk chunk
685
761
  * @param {Iterable<Module> | undefined} modules unordered modules
686
762
  * @param {Compilation} compilation compilation
@@ -722,6 +798,7 @@ class CssModulesPlugin {
722
798
  );
723
799
 
724
800
  /**
801
+ * Compares module lists.
725
802
  * @param {{ list: Module[] }} a a
726
803
  * @param {{ list: Module[] }} b b
727
804
  * @returns {-1 | 0 | 1} result
@@ -826,81 +903,138 @@ class CssModulesPlugin {
826
903
  }
827
904
 
828
905
  /**
906
+ * Gets ordered chunk css modules.
829
907
  * @param {Chunk} chunk chunk
830
908
  * @param {ChunkGraph} chunkGraph chunk graph
831
909
  * @param {Compilation} compilation compilation
832
910
  * @returns {CssModule[]} ordered css modules
833
911
  */
834
912
  getOrderedChunkCssModules(chunk, chunkGraph, compilation) {
835
- return /** @type {CssModule[]} */ ([
836
- ...this.getModulesInOrder(
913
+ /** @type {string | undefined} */
914
+ let charset;
915
+
916
+ const hooks = CssModulesPlugin.getCompilationHooks(compilation);
917
+
918
+ /**
919
+ * @param {Iterable<Module> | undefined} iter modules pre-sorted by full module name
920
+ * @returns {Module[]} ordered modules
921
+ */
922
+ const orderModules = (iter) => {
923
+ const modules = iter ? [...iter] : [];
924
+ const result = hooks.orderModules.call(chunk, modules, compilation);
925
+ if (result !== undefined) return result;
926
+ return this.getModulesInOrder(chunk, modules, compilation);
927
+ };
928
+
929
+ const comparator = compareModulesByFullName(compilation.compiler);
930
+ const importModules = orderModules(
931
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
837
932
  chunk,
838
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
839
- chunk,
840
- CSS_IMPORT_TYPE,
841
- compareModulesByFullName(compilation.compiler)
842
- ),
843
- compilation
844
- ),
845
- ...this.getModulesInOrder(
933
+ CSS_IMPORT_TYPE,
934
+ comparator
935
+ )
936
+ );
937
+ const cssModules = orderModules(
938
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
846
939
  chunk,
847
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
848
- chunk,
849
- CSS_TYPE,
850
- compareModulesByFullName(compilation.compiler)
851
- ),
852
- compilation
940
+ CSS_TYPE,
941
+ comparator
853
942
  )
854
- ]);
943
+ );
944
+ for (const module of cssModules) {
945
+ if (
946
+ typeof (
947
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
948
+ ) !== "undefined"
949
+ ) {
950
+ if (
951
+ typeof charset !== "undefined" &&
952
+ charset !==
953
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
954
+ ) {
955
+ const err = new WebpackError(
956
+ `Conflicting @charset at-rules detected: the module ${module.readableIdentifier(
957
+ compilation.requestShortener
958
+ )} (in chunk ${chunk.name || chunk.id}) specifies "${
959
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
960
+ }", but "${charset}" was expected, all modules must use the same character set`
961
+ );
962
+
963
+ err.chunk = chunk;
964
+ err.module = module;
965
+ err.hideStack = true;
966
+
967
+ compilation.warnings.push(err);
968
+ }
969
+
970
+ if (typeof charset === "undefined") {
971
+ charset = /** @type {CssModuleBuildInfo} */ (module.buildInfo)
972
+ .charset;
973
+ }
974
+ }
975
+ }
976
+
977
+ return /** @type {CssModule[]} */ ([...importModules, ...cssModules]);
855
978
  }
856
979
 
857
980
  /**
981
+ * Renders css module source.
858
982
  * @param {CssModule} module css module
859
983
  * @param {ChunkRenderContext} renderContext options object
860
984
  * @param {CompilationHooks} hooks hooks
861
985
  * @returns {Source | null} css module source
862
986
  */
863
987
  static renderModule(module, renderContext, hooks) {
864
- const { undoPath, moduleFactoryCache, moduleSourceContent } = renderContext;
988
+ const { undoPath, hash, moduleFactoryCache, moduleSourceContent } =
989
+ renderContext;
865
990
  const cacheEntry = moduleFactoryCache.get(moduleSourceContent);
866
991
 
867
- /** @type {Inheritance} */
868
- const inheritance = [[module.cssLayer, module.supports, module.media]];
869
- if (module.inheritance) {
870
- inheritance.push(...module.inheritance);
871
- }
992
+ const inheritance = getModuleInheritance(module);
872
993
 
873
994
  /** @type {CachedSource} */
874
995
  let source;
875
996
  if (
876
997
  cacheEntry &&
877
998
  cacheEntry.undoPath === undoPath &&
878
- cacheEntry.inheritance.length === inheritance.length &&
879
- cacheEntry.inheritance.every(([layer, supports, media], i) => {
880
- const item = inheritance[i];
881
- if (Array.isArray(item)) {
882
- return layer === item[0] && supports === item[1] && media === item[2];
883
- }
884
- return false;
885
- })
999
+ cacheEntry.hash === hash &&
1000
+ // Memoized per module, so identity implies equal entries.
1001
+ cacheEntry.inheritance === inheritance
886
1002
  ) {
887
1003
  source = cacheEntry.source;
888
1004
  } else {
889
1005
  if (!moduleSourceContent) return null;
890
- const moduleSourceCode =
891
- /** @type {string} */
892
- (moduleSourceContent.source());
893
- publicPathAutoRegex.lastIndex = 0;
894
- /** @type {Source} */
895
- let moduleSource = new ReplaceSource(moduleSourceContent);
896
- /** @type {null | RegExpExecArray} */
897
- let match;
898
- while ((match = publicPathAutoRegex.exec(moduleSourceCode))) {
899
- /** @type {ReplaceSource} */ (moduleSource).replace(
900
- match.index,
901
- match.index + match[0].length - 1,
902
- undoPath
1006
+ let plan = publicPathPlaceholderPlans.get(moduleSourceContent);
1007
+ if (plan === undefined) {
1008
+ plan = computePublicPathPlaceholderPlan(
1009
+ /** @type {string} */ (moduleSourceContent.source())
903
1010
  );
1011
+ publicPathPlaceholderPlans.set(moduleSourceContent, plan);
1012
+ }
1013
+
1014
+ /** @type {Source} */
1015
+ let moduleSource = moduleSourceContent;
1016
+
1017
+ // Apply placeholder substitutions only when present; the common
1018
+ // (no-placeholder) case skips the ReplaceSource wrapper entirely.
1019
+ if (plan.autos.length > 0 || (hash && plan.hashes.length > 0)) {
1020
+ const replaceSource = new ReplaceSource(moduleSourceContent);
1021
+ const autoLen = PUBLIC_PATH_AUTO.length;
1022
+ for (let i = 0; i < plan.autos.length; i++) {
1023
+ const start = plan.autos[i];
1024
+ replaceSource.replace(start, start + autoLen - 1, undoPath);
1025
+ }
1026
+ if (hash) {
1027
+ for (let i = 0; i < plan.hashes.length; i++) {
1028
+ const { start, end, length } = plan.hashes[i];
1029
+ // `end` is exclusive; ReplaceSource.replace takes an inclusive end.
1030
+ replaceSource.replace(
1031
+ start,
1032
+ end - 1,
1033
+ length === 0 ? hash : hash.slice(0, length)
1034
+ );
1035
+ }
1036
+ }
1037
+ moduleSource = replaceSource;
904
1038
  }
905
1039
 
906
1040
  for (let i = 0; i < inheritance.length; i++) {
@@ -942,6 +1076,7 @@ class CssModulesPlugin {
942
1076
  moduleFactoryCache.set(moduleSourceContent, {
943
1077
  inheritance,
944
1078
  undoPath,
1079
+ hash,
945
1080
  source
946
1081
  });
947
1082
  }
@@ -953,6 +1088,7 @@ class CssModulesPlugin {
953
1088
  }
954
1089
 
955
1090
  /**
1091
+ * Renders generated source.
956
1092
  * @param {RenderContext} renderContext the render context
957
1093
  * @param {CompilationHooks} hooks hooks
958
1094
  * @returns {Source} generated source
@@ -964,12 +1100,26 @@ class CssModulesPlugin {
964
1100
  codeGenerationResults,
965
1101
  modules,
966
1102
  runtimeTemplate,
967
- chunkGraph
1103
+ chunkGraph,
1104
+ hash
968
1105
  },
969
1106
  hooks
970
1107
  ) {
971
1108
  const source = new ConcatSource();
1109
+
1110
+ /** @type {string | undefined} */
1111
+ let charset;
1112
+
972
1113
  for (const module of modules) {
1114
+ if (
1115
+ typeof (
1116
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
1117
+ ) !== "undefined" &&
1118
+ typeof charset === "undefined"
1119
+ ) {
1120
+ charset = /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset;
1121
+ }
1122
+
973
1123
  try {
974
1124
  const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
975
1125
  const moduleSourceContent =
@@ -982,6 +1132,7 @@ class CssModulesPlugin {
982
1132
  module,
983
1133
  {
984
1134
  undoPath,
1135
+ hash,
985
1136
  chunk,
986
1137
  chunkGraph,
987
1138
  codeGenerationResults,
@@ -1000,14 +1151,21 @@ class CssModulesPlugin {
1000
1151
  throw err;
1001
1152
  }
1002
1153
  }
1154
+
1003
1155
  chunk.rendered = true;
1156
+
1157
+ if (charset) {
1158
+ return new ConcatSource(`@charset "${charset}";\n`, source);
1159
+ }
1160
+
1004
1161
  return source;
1005
1162
  }
1006
1163
 
1007
1164
  /**
1165
+ * Gets chunk filename template.
1008
1166
  * @param {Chunk} chunk chunk
1009
1167
  * @param {OutputOptions} outputOptions output options
1010
- * @returns {TemplatePath} used filename template
1168
+ * @returns {ChunkFilenameTemplate} used filename template
1011
1169
  */
1012
1170
  static getChunkFilenameTemplate(chunk, outputOptions) {
1013
1171
  if (chunk.cssFilenameTemplate) {
@@ -1019,6 +1177,7 @@ class CssModulesPlugin {
1019
1177
  }
1020
1178
 
1021
1179
  /**
1180
+ * Returns true, when the chunk has css.
1022
1181
  * @param {Chunk} chunk chunk
1023
1182
  * @param {ChunkGraph} chunkGraph chunk graph
1024
1183
  * @returns {boolean} true, when the chunk has css
@@ -1035,4 +1194,8 @@ class CssModulesPlugin {
1035
1194
  }
1036
1195
  }
1037
1196
 
1197
+ CssModulesPlugin.getCompilationHooks = createHooksRegistry(
1198
+ createCompilationHooks
1199
+ );
1200
+
1038
1201
  module.exports = CssModulesPlugin;