@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
@@ -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,36 @@ 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
  /**
99
+ * Defines the compilation hooks type used by this module.
89
100
  * @typedef {object} CompilationHooks
90
101
  * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModulePackage
91
102
  * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
103
+ * @property {SyncBailHook<[Chunk, Module[], Compilation], Module[] | undefined | void>} orderModules 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
92
104
  */
93
105
 
94
106
  /**
107
+ * Defines the module factory cache entry type used by this module.
95
108
  * @typedef {object} ModuleFactoryCacheEntry
96
109
  * @property {string} undoPath - The undo path to the CSS file
110
+ * @property {string | undefined} hash - The compilation hash
97
111
  * @property {Inheritance} inheritance - The inheritance chain
98
112
  * @property {CachedSource} source - The cached source
99
113
  */
@@ -101,14 +115,87 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
101
115
  const getCssLoadingRuntimeModule = memoize(() =>
102
116
  require("./CssLoadingRuntimeModule")
103
117
  );
104
- const getCssMergeStyleSheetsRuntimeModule = memoize(() =>
105
- require("./CssMergeStyleSheetsRuntimeModule")
106
- );
107
118
  const getCssInjectStyleRuntimeModule = memoize(() =>
108
119
  require("./CssInjectStyleRuntimeModule")
109
120
  );
110
121
 
111
122
  /**
123
+ * @typedef {object} PublicPathPlaceholderPlan
124
+ * @property {number[]} autos start offsets of each `PUBLIC_PATH_AUTO` placeholder
125
+ * @property {{ start: number, end: number, length: number }[]} hashes `[start, end)` ranges of each `PUBLIC_PATH_FULL_HASH` placeholder and its requested hash length
126
+ */
127
+
128
+ /**
129
+ * Public-path placeholder offsets are invariant for a given module source —
130
+ * they don't depend on `undoPath`/`hash`/`inheritance`/runtime — so scan once
131
+ * and reuse across renders instead of re-materializing and re-scanning the
132
+ * source on every cache miss. Weakly keyed so entries release with the source.
133
+ * @type {WeakMap<Source, PublicPathPlaceholderPlan>}
134
+ */
135
+ const publicPathPlaceholderPlans = new WeakMap();
136
+
137
+ /**
138
+ * Memoized inheritance chain per module, revalidated against its source
139
+ * fields — `updateCacheModule` reassigns them on watch rebuilds.
140
+ * @type {WeakMap<CssModule, { cssLayer: CssModule["cssLayer"], supports: CssModule["supports"], media: CssModule["media"], inheritance: CssModule["inheritance"], chain: Inheritance }>}
141
+ */
142
+ const moduleInheritanceCache = new WeakMap();
143
+
144
+ /**
145
+ * Gets the memoized inheritance chain of a css module.
146
+ * @param {CssModule} module css module
147
+ * @returns {Inheritance} inheritance chain including the module's own entry
148
+ */
149
+ const getModuleInheritance = (module) => {
150
+ const entry = moduleInheritanceCache.get(module);
151
+ if (
152
+ entry !== undefined &&
153
+ entry.cssLayer === module.cssLayer &&
154
+ entry.supports === module.supports &&
155
+ entry.media === module.media &&
156
+ entry.inheritance === module.inheritance
157
+ ) {
158
+ return entry.chain;
159
+ }
160
+ /** @type {Inheritance} */
161
+ const chain = [[module.cssLayer, module.supports, module.media]];
162
+ if (module.inheritance) chain.push(...module.inheritance);
163
+ moduleInheritanceCache.set(module, {
164
+ cssLayer: module.cssLayer,
165
+ supports: module.supports,
166
+ media: module.media,
167
+ inheritance: module.inheritance,
168
+ chain
169
+ });
170
+ return chain;
171
+ };
172
+
173
+ /**
174
+ * Locate the public-path placeholders in a materialized module source.
175
+ * @param {string} content materialized module source
176
+ * @returns {PublicPathPlaceholderPlan} placeholder offsets
177
+ */
178
+ const computePublicPathPlaceholderPlan = (content) => {
179
+ /** @type {number[]} */
180
+ const autos = [];
181
+ const autoLen = PUBLIC_PATH_AUTO.length;
182
+ for (
183
+ let idx = content.indexOf(PUBLIC_PATH_AUTO);
184
+ idx !== -1;
185
+ idx = content.indexOf(PUBLIC_PATH_AUTO, idx + autoLen)
186
+ ) {
187
+ autos.push(idx);
188
+ }
189
+ /** @type {{ start: number, end: number, length: number }[]} */
190
+ const hashes = [];
191
+ walkFullHashPlaceholders(content, (start, end, length) => {
192
+ hashes.push({ start, end, length });
193
+ });
194
+ return { autos, hashes };
195
+ };
196
+
197
+ /**
198
+ * Returns ], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema.
112
199
  * @param {string} name name
113
200
  * @returns {{ oneOf: [{ $ref: string }], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema
114
201
  */
@@ -131,51 +218,35 @@ const generatorValidationOptions = {
131
218
  baseDataPath: "generator"
132
219
  };
133
220
 
134
- /** @type {WeakMap<Compilation, CompilationHooks>} */
135
- const compilationHooksMap = new WeakMap();
136
-
137
221
  const PLUGIN_NAME = "CssModulesPlugin";
138
222
 
139
223
  class CssModulesPlugin {
140
- /**
141
- * @param {Compilation} compilation the compilation
142
- * @returns {CompilationHooks} the attached hooks
143
- */
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
- }
164
-
165
224
  constructor() {
166
225
  /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
167
226
  this._moduleFactoryCache = new WeakMap();
168
227
  }
169
228
 
170
229
  /**
171
- * Apply the plugin
230
+ * Applies the plugin by registering its hooks on the compiler.
172
231
  * @param {Compiler} compiler the compiler instance
173
232
  * @returns {void}
174
233
  */
175
234
  apply(compiler) {
235
+ // `"auto"` marks implicit enablement (no user rule for CSS files) — see
236
+ // `applyExperimentsDefaults`. Only then loaders win over the built-in type.
237
+ // TODO webpack 6: css defaults to `true`, drop this implicit-only fallback.
238
+ const implicitlyEnabled = compiler.options.experiments.css === "auto";
176
239
  compiler.hooks.compilation.tap(
177
240
  PLUGIN_NAME,
178
241
  (compilation, { normalModuleFactory }) => {
242
+ if (implicitlyEnabled) {
243
+ implicitTypeLoaderFallback(
244
+ normalModuleFactory,
245
+ PLUGIN_NAME,
246
+ /\.css$/i,
247
+ CSS_MODULE_TYPE_AUTO
248
+ );
249
+ }
179
250
  const hooks = CssModulesPlugin.getCompilationHooks(compilation);
180
251
  compilation.dependencyFactories.set(
181
252
  CssImportDependency,
@@ -255,11 +326,11 @@ class CssModulesPlugin {
255
326
  case CSS_MODULE_TYPE_MODULE: {
256
327
  defaultMode = "local";
257
328
  compiler.validate(
258
- () => getSchema("CssModuleParserOptions"),
329
+ () => getSchema("CssAutoOrModuleParserOptions"),
259
330
  parserOptions,
260
331
  parserValidationOptions,
261
332
  (options) =>
262
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
333
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
263
334
  options
264
335
  )
265
336
  );
@@ -268,11 +339,11 @@ class CssModulesPlugin {
268
339
  case CSS_MODULE_TYPE_AUTO: {
269
340
  defaultMode = "auto";
270
341
  compiler.validate(
271
- () => getSchema("CssModuleParserOptions"),
342
+ () => getSchema("CssAutoOrModuleParserOptions"),
272
343
  parserOptions,
273
344
  parserValidationOptions,
274
345
  (options) =>
275
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
346
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
276
347
  options
277
348
  )
278
349
  );
@@ -354,71 +425,28 @@ class CssModulesPlugin {
354
425
  const exportType =
355
426
  /** @type {CssParser} */
356
427
  (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
- }
428
+ // When CSS is imported from CSS there is only one dependency
429
+ const dependency =
430
+ resolveData.dependencies.length > 0
431
+ ? resolveData.dependencies[0]
432
+ : undefined;
433
+
434
+ if (dependency instanceof CssImportDependency) {
435
+ return new CssModule(
436
+ /** @type {CssModuleCreateData} */
437
+ ({
438
+ ...createData,
439
+ cssLayer: dependency.layer,
440
+ supports: dependency.supports,
441
+ media: dependency.media,
442
+ inheritance: dependency.inheritance,
443
+ exportType: dependency.exportType || exportType
444
+ })
445
+ );
418
446
  }
419
447
 
420
448
  return new CssModule(
421
- /** @type {CSSModuleCreateData} */
449
+ /** @type {CssModuleCreateData} */
422
450
  (
423
451
  /** @type {unknown} */ ({
424
452
  ...createData,
@@ -444,45 +472,78 @@ class CssModulesPlugin {
444
472
 
445
473
  JavascriptModulesPlugin.getCompilationHooks(
446
474
  compilation
447
- ).renderModuleContent.tap(PLUGIN_NAME, (source, module) => {
448
- if (module instanceof CssModule && module.hot) {
449
- const exportType = module.exportType;
475
+ ).renderModuleContent.tap(PLUGIN_NAME, (source, module, ctx) => {
476
+ const injectCssStylesVar =
477
+ module instanceof ConcatenatedModule &&
478
+ module.modules.find(
479
+ (m) =>
480
+ m instanceof CssModule &&
481
+ m.exportType === "style" &&
482
+ !(/** @type {CssGenerator} */ (m.generator)._exportsOnly)
483
+ );
484
+ const injectHMRCode =
485
+ (module instanceof CssModule && module.hot) ||
486
+ (module instanceof ConcatenatedModule &&
487
+ module.rootModule instanceof CssModule &&
488
+ module.rootModule.hot);
489
+
490
+ if (injectCssStylesVar) {
491
+ source = new ConcatSource(
492
+ "var __webpack_css_styles__ = [];",
493
+ "\n",
494
+ source
495
+ );
496
+ }
497
+ if (injectHMRCode) {
498
+ const currentModule = /** @type {CssModule} */ (
499
+ module instanceof ConcatenatedModule ? module.rootModule : module
500
+ );
501
+ const exportType = currentModule.exportType || "link";
450
502
  // 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;
503
+ if (["link", "style"].includes(exportType)) {
504
+ // For exportType === "link", we can optimize with self-acceptance
505
+ const cssData = /** @type {CssModuleBuildInfo} */ (
506
+ module.buildInfo
507
+ ).cssData;
508
+ if (!cssData) {
509
+ return source;
510
+ }
511
+ const exports = cssData.exports;
512
+ /** @type {Record<string, string>} */
513
+ const exportsObj = {};
514
+ for (const [key, value] of exports) {
515
+ exportsObj[key] = value;
516
+ }
517
+ const stringifiedExports = JSON.stringify(
518
+ JSON.stringify(exportsObj)
519
+ );
520
+
521
+ const hmrCode = Template.asString([
522
+ "",
523
+ `var __webpack_css_exports__ = ${stringifiedExports};`,
524
+ "// only invalidate when locals change",
525
+ `if (${ctx.runtimeTemplate.optionalChaining("module.hot.data", "__webpack_css_exports__")} && module.hot.data.__webpack_css_exports__ != __webpack_css_exports__) {`,
526
+ Template.indent("module.hot.invalidate();"),
527
+ "} else {",
528
+ Template.indent("module.hot.accept();"),
529
+ "}",
530
+ "module.hot.dispose(function(data) {",
531
+ Template.indent([
532
+ "data.__webpack_css_exports__ = __webpack_css_exports__;"
533
+ ]),
534
+ "});"
535
+ ]);
536
+
537
+ source = new ConcatSource(source, "\n", new RawSource(hmrCode));
464
538
  }
465
- const stringifiedExports = JSON.stringify(
466
- JSON.stringify(exportsObj)
539
+ }
540
+ if (injectCssStylesVar) {
541
+ /** @type {ConcatSource} */
542
+ (source).add(
543
+ "for (let i = 0; i < __webpack_css_styles__.length; i++) {\n" +
544
+ `${RuntimeGlobals.cssInjectStyle}(__webpack_css_styles__[i][0], __webpack_css_styles__[i][1]);\n` +
545
+ "}"
467
546
  );
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
547
  }
487
548
 
488
549
  return source;
@@ -532,8 +593,8 @@ class CssModulesPlugin {
532
593
  hash.update(chunkGraph.getModuleHash(module, chunk.runtime));
533
594
  }
534
595
  }
535
- const digest = hash.digest(hashDigest);
536
- chunk.contentHash.css = nonNumericOnlyHash(digest, hashDigestLength);
596
+ [chunk.contentHash.css, chunk.contentHashFull.css] =
597
+ digestNonNumericOnlyWithFull(hash, hashDigest, hashDigestLength);
537
598
  });
538
599
  compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
539
600
  const { chunkGraph } = compilation;
@@ -571,6 +632,7 @@ class CssModulesPlugin {
571
632
  codeGenerationResults,
572
633
  uniqueName: compilation.outputOptions.uniqueName,
573
634
  undoPath,
635
+ hash,
574
636
  modules,
575
637
  runtimeTemplate
576
638
  },
@@ -586,6 +648,7 @@ class CssModulesPlugin {
586
648
  });
587
649
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
588
650
  /**
651
+ * Checks whether this css modules plugin is enabled for chunk.
589
652
  * @param {Chunk} chunk the chunk
590
653
  * @returns {boolean} true, when enabled
591
654
  */
@@ -600,6 +663,7 @@ class CssModulesPlugin {
600
663
  /** @type {WeakSet<Chunk>} */
601
664
  const onceForChunkSet = new WeakSet();
602
665
  /**
666
+ * Handles the hook callback for this code path.
603
667
  * @param {Chunk} chunk chunk to check
604
668
  * @param {RuntimeRequirements} set runtime requirements
605
669
  */
@@ -655,20 +719,11 @@ class CssModulesPlugin {
655
719
  set.add(RuntimeGlobals.getChunkCssFilename);
656
720
  });
657
721
 
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
722
  compilation.hooks.runtimeRequirementInTree
670
723
  .for(RuntimeGlobals.cssInjectStyle)
671
724
  .tap(PLUGIN_NAME, (chunk, set) => {
725
+ // Same as above: namespace stub is enough.
726
+ set.add(RuntimeGlobals.requireScope);
672
727
  const CssInjectStyleRuntimeModule =
673
728
  getCssInjectStyleRuntimeModule();
674
729
  compilation.addRuntimeModule(
@@ -681,6 +736,7 @@ class CssModulesPlugin {
681
736
  }
682
737
 
683
738
  /**
739
+ * Gets modules in order.
684
740
  * @param {Chunk} chunk chunk
685
741
  * @param {Iterable<Module> | undefined} modules unordered modules
686
742
  * @param {Compilation} compilation compilation
@@ -722,6 +778,7 @@ class CssModulesPlugin {
722
778
  );
723
779
 
724
780
  /**
781
+ * Compares module lists.
725
782
  * @param {{ list: Module[] }} a a
726
783
  * @param {{ list: Module[] }} b b
727
784
  * @returns {-1 | 0 | 1} result
@@ -826,81 +883,138 @@ class CssModulesPlugin {
826
883
  }
827
884
 
828
885
  /**
886
+ * Gets ordered chunk css modules.
829
887
  * @param {Chunk} chunk chunk
830
888
  * @param {ChunkGraph} chunkGraph chunk graph
831
889
  * @param {Compilation} compilation compilation
832
890
  * @returns {CssModule[]} ordered css modules
833
891
  */
834
892
  getOrderedChunkCssModules(chunk, chunkGraph, compilation) {
835
- return /** @type {CssModule[]} */ ([
836
- ...this.getModulesInOrder(
893
+ /** @type {string | undefined} */
894
+ let charset;
895
+
896
+ const hooks = CssModulesPlugin.getCompilationHooks(compilation);
897
+
898
+ /**
899
+ * @param {Iterable<Module> | undefined} iter modules pre-sorted by full module name
900
+ * @returns {Module[]} ordered modules
901
+ */
902
+ const orderModules = (iter) => {
903
+ const modules = iter ? [...iter] : [];
904
+ const result = hooks.orderModules.call(chunk, modules, compilation);
905
+ if (result !== undefined) return result;
906
+ return this.getModulesInOrder(chunk, modules, compilation);
907
+ };
908
+
909
+ const comparator = compareModulesByFullName(compilation.compiler);
910
+ const importModules = orderModules(
911
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
837
912
  chunk,
838
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
839
- chunk,
840
- CSS_IMPORT_TYPE,
841
- compareModulesByFullName(compilation.compiler)
842
- ),
843
- compilation
844
- ),
845
- ...this.getModulesInOrder(
913
+ CSS_IMPORT_TYPE,
914
+ comparator
915
+ )
916
+ );
917
+ const cssModules = orderModules(
918
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
846
919
  chunk,
847
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
848
- chunk,
849
- CSS_TYPE,
850
- compareModulesByFullName(compilation.compiler)
851
- ),
852
- compilation
920
+ CSS_TYPE,
921
+ comparator
853
922
  )
854
- ]);
923
+ );
924
+ for (const module of cssModules) {
925
+ if (
926
+ typeof (
927
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
928
+ ) !== "undefined"
929
+ ) {
930
+ if (
931
+ typeof charset !== "undefined" &&
932
+ charset !==
933
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
934
+ ) {
935
+ const err = new WebpackError(
936
+ `Conflicting @charset at-rules detected: the module ${module.readableIdentifier(
937
+ compilation.requestShortener
938
+ )} (in chunk ${chunk.name || chunk.id}) specifies "${
939
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
940
+ }", but "${charset}" was expected, all modules must use the same character set`
941
+ );
942
+
943
+ err.chunk = chunk;
944
+ err.module = module;
945
+ err.hideStack = true;
946
+
947
+ compilation.warnings.push(err);
948
+ }
949
+
950
+ if (typeof charset === "undefined") {
951
+ charset = /** @type {CssModuleBuildInfo} */ (module.buildInfo)
952
+ .charset;
953
+ }
954
+ }
955
+ }
956
+
957
+ return /** @type {CssModule[]} */ ([...importModules, ...cssModules]);
855
958
  }
856
959
 
857
960
  /**
961
+ * Renders css module source.
858
962
  * @param {CssModule} module css module
859
963
  * @param {ChunkRenderContext} renderContext options object
860
964
  * @param {CompilationHooks} hooks hooks
861
965
  * @returns {Source | null} css module source
862
966
  */
863
967
  static renderModule(module, renderContext, hooks) {
864
- const { undoPath, moduleFactoryCache, moduleSourceContent } = renderContext;
968
+ const { undoPath, hash, moduleFactoryCache, moduleSourceContent } =
969
+ renderContext;
865
970
  const cacheEntry = moduleFactoryCache.get(moduleSourceContent);
866
971
 
867
- /** @type {Inheritance} */
868
- const inheritance = [[module.cssLayer, module.supports, module.media]];
869
- if (module.inheritance) {
870
- inheritance.push(...module.inheritance);
871
- }
972
+ const inheritance = getModuleInheritance(module);
872
973
 
873
974
  /** @type {CachedSource} */
874
975
  let source;
875
976
  if (
876
977
  cacheEntry &&
877
978
  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
- })
979
+ cacheEntry.hash === hash &&
980
+ // Memoized per module, so identity implies equal entries.
981
+ cacheEntry.inheritance === inheritance
886
982
  ) {
887
983
  source = cacheEntry.source;
888
984
  } else {
889
985
  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
986
+ let plan = publicPathPlaceholderPlans.get(moduleSourceContent);
987
+ if (plan === undefined) {
988
+ plan = computePublicPathPlaceholderPlan(
989
+ /** @type {string} */ (moduleSourceContent.source())
903
990
  );
991
+ publicPathPlaceholderPlans.set(moduleSourceContent, plan);
992
+ }
993
+
994
+ /** @type {Source} */
995
+ let moduleSource = moduleSourceContent;
996
+
997
+ // Apply placeholder substitutions only when present; the common
998
+ // (no-placeholder) case skips the ReplaceSource wrapper entirely.
999
+ if (plan.autos.length > 0 || (hash && plan.hashes.length > 0)) {
1000
+ const replaceSource = new ReplaceSource(moduleSourceContent);
1001
+ const autoLen = PUBLIC_PATH_AUTO.length;
1002
+ for (let i = 0; i < plan.autos.length; i++) {
1003
+ const start = plan.autos[i];
1004
+ replaceSource.replace(start, start + autoLen - 1, undoPath);
1005
+ }
1006
+ if (hash) {
1007
+ for (let i = 0; i < plan.hashes.length; i++) {
1008
+ const { start, end, length } = plan.hashes[i];
1009
+ // `end` is exclusive; ReplaceSource.replace takes an inclusive end.
1010
+ replaceSource.replace(
1011
+ start,
1012
+ end - 1,
1013
+ length === 0 ? hash : hash.slice(0, length)
1014
+ );
1015
+ }
1016
+ }
1017
+ moduleSource = replaceSource;
904
1018
  }
905
1019
 
906
1020
  for (let i = 0; i < inheritance.length; i++) {
@@ -942,6 +1056,7 @@ class CssModulesPlugin {
942
1056
  moduleFactoryCache.set(moduleSourceContent, {
943
1057
  inheritance,
944
1058
  undoPath,
1059
+ hash,
945
1060
  source
946
1061
  });
947
1062
  }
@@ -953,6 +1068,7 @@ class CssModulesPlugin {
953
1068
  }
954
1069
 
955
1070
  /**
1071
+ * Renders generated source.
956
1072
  * @param {RenderContext} renderContext the render context
957
1073
  * @param {CompilationHooks} hooks hooks
958
1074
  * @returns {Source} generated source
@@ -964,12 +1080,26 @@ class CssModulesPlugin {
964
1080
  codeGenerationResults,
965
1081
  modules,
966
1082
  runtimeTemplate,
967
- chunkGraph
1083
+ chunkGraph,
1084
+ hash
968
1085
  },
969
1086
  hooks
970
1087
  ) {
971
1088
  const source = new ConcatSource();
1089
+
1090
+ /** @type {string | undefined} */
1091
+ let charset;
1092
+
972
1093
  for (const module of modules) {
1094
+ if (
1095
+ typeof (
1096
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset
1097
+ ) !== "undefined" &&
1098
+ typeof charset === "undefined"
1099
+ ) {
1100
+ charset = /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset;
1101
+ }
1102
+
973
1103
  try {
974
1104
  const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
975
1105
  const moduleSourceContent =
@@ -982,6 +1112,7 @@ class CssModulesPlugin {
982
1112
  module,
983
1113
  {
984
1114
  undoPath,
1115
+ hash,
985
1116
  chunk,
986
1117
  chunkGraph,
987
1118
  codeGenerationResults,
@@ -1000,14 +1131,21 @@ class CssModulesPlugin {
1000
1131
  throw err;
1001
1132
  }
1002
1133
  }
1134
+
1003
1135
  chunk.rendered = true;
1136
+
1137
+ if (charset) {
1138
+ return new ConcatSource(`@charset "${charset}";\n`, source);
1139
+ }
1140
+
1004
1141
  return source;
1005
1142
  }
1006
1143
 
1007
1144
  /**
1145
+ * Gets chunk filename template.
1008
1146
  * @param {Chunk} chunk chunk
1009
1147
  * @param {OutputOptions} outputOptions output options
1010
- * @returns {TemplatePath} used filename template
1148
+ * @returns {ChunkFilenameTemplate} used filename template
1011
1149
  */
1012
1150
  static getChunkFilenameTemplate(chunk, outputOptions) {
1013
1151
  if (chunk.cssFilenameTemplate) {
@@ -1019,6 +1157,7 @@ class CssModulesPlugin {
1019
1157
  }
1020
1158
 
1021
1159
  /**
1160
+ * Returns true, when the chunk has css.
1022
1161
  * @param {Chunk} chunk chunk
1023
1162
  * @param {ChunkGraph} chunkGraph chunk graph
1024
1163
  * @returns {boolean} true, when the chunk has css
@@ -1035,4 +1174,17 @@ class CssModulesPlugin {
1035
1174
  }
1036
1175
  }
1037
1176
 
1177
+ CssModulesPlugin.getCompilationHooks = createHooksRegistry(
1178
+ () =>
1179
+ /** @type {CompilationHooks} */ ({
1180
+ renderModulePackage: new SyncWaterfallHook([
1181
+ "source",
1182
+ "module",
1183
+ "renderContext"
1184
+ ]),
1185
+ chunkHash: new SyncHook(["chunk", "hash", "context"]),
1186
+ orderModules: new SyncBailHook(["chunk", "modules", "compilation"])
1187
+ })
1188
+ );
1189
+
1038
1190
  module.exports = CssModulesPlugin;