@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
@@ -7,6 +7,7 @@
7
7
 
8
8
  const {
9
9
  ConcatSource,
10
+ OriginalSource,
10
11
  RawSource,
11
12
  ReplaceSource,
12
13
  SourceMapSource
@@ -15,18 +16,32 @@ const { UsageState } = require("../ExportsInfo");
15
16
  const Generator = require("../Generator");
16
17
  const InitFragment = require("../InitFragment");
17
18
  const {
19
+ CSS_TEXT_TYPE,
20
+ CSS_TEXT_TYPES,
18
21
  CSS_TYPE,
19
22
  CSS_TYPES,
23
+ JAVASCRIPT_AND_CSS_TEXT_TYPES,
20
24
  JAVASCRIPT_AND_CSS_TYPES,
21
25
  JAVASCRIPT_TYPE,
22
- JAVASCRIPT_TYPES
26
+ JAVASCRIPT_TYPES,
27
+ NO_TYPES
23
28
  } = require("../ModuleSourceTypeConstants");
24
29
  const RuntimeGlobals = require("../RuntimeGlobals");
25
30
  const Template = require("../Template");
31
+ const { getPresentKinds } = require("../TemplatedPathPlugin");
26
32
  const CssImportDependency = require("../dependencies/CssImportDependency");
27
33
  const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
28
34
 
35
+ const { encodeMappings } = require("../util/createMappings");
36
+ const { contextifySourceUrl } = require("../util/identifier");
29
37
  const memoize = require("../util/memoize");
38
+ const {
39
+ PUBLIC_PATH_FULL_HASH,
40
+ walkFullHashPlaceholders
41
+ } = require("../util/publicPathPlaceholder");
42
+
43
+ // Avoids `type.split("/")[0]` allocation on the `getTypes` hot path.
44
+ const CSS_TYPE_PREFIX = `${CSS_TYPE}/`;
30
45
 
31
46
  /** @typedef {import("webpack-sources").Source} Source */
32
47
  /** @typedef {import("../../declarations/WebpackOptions").CssModuleGeneratorOptions} CssModuleGeneratorOptions */
@@ -34,7 +49,8 @@ const memoize = require("../util/memoize");
34
49
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
35
50
  /** @typedef {import("../Dependency")} Dependency */
36
51
  /** @typedef {import("../DependencyTemplate").CssData} CssData */
37
- /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
52
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
53
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} CssDependencyTemplateContext */
38
54
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
39
55
  /** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
40
56
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
@@ -46,30 +62,123 @@ const memoize = require("../util/memoize");
46
62
  /** @typedef {import("../NormalModule")} NormalModule */
47
63
  /** @typedef {import("../util/Hash")} Hash */
48
64
  /** @typedef {import("./CssModulesPlugin").ModuleFactoryCacheEntry} ModuleFactoryCacheEntry */
49
- /** @typedef {import("../CssModule")} CssModule */
65
+ /** @typedef {import("./CssModule")} CssModule */
66
+ /** @typedef {import("./CssModule").CssModuleBuildInfo} CssModuleBuildInfo */
67
+ /** @typedef {import("./CssModule").CssModuleBuildMeta} CssModuleBuildMeta */
50
68
  /** @typedef {import("../Compilation")} Compilation */
51
69
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
52
70
  /** @typedef {import("../../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
53
71
 
72
+ /** @typedef {{ line: number, column: number }} SourcePosition */
73
+ /** @typedef {Map<string, SourcePosition>} ExportLocsMap */
74
+
54
75
  const getPropertyName = memoize(() => require("../util/property"));
55
76
  const getCssModulesPlugin = memoize(() => require("./CssModulesPlugin"));
56
77
 
78
+ /** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
79
+
80
+ /**
81
+ * Build a v3 source map mapping CSS-class export lines back to their selector positions.
82
+ * @param {string} generatedJs the generated JS string
83
+ * @param {ExportLocsMap} exportLocs map of export names to CSS source location
84
+ * @param {string} cssContent original CSS source content
85
+ * @param {string} sourceName source identifier to use in the map
86
+ * @returns {RawSourceMap} a v3 RawSourceMap
87
+ */
88
+ const buildExportsSourceMap = (
89
+ generatedJs,
90
+ exportLocs,
91
+ cssContent,
92
+ sourceName
93
+ ) => {
94
+ const lines = generatedJs.split("\n");
95
+
96
+ // O(L) pass: match `\t"<name>": <value>` lines against export names.
97
+ const keyToName = new Map();
98
+ for (const [exportName] of exportLocs) {
99
+ keyToName.set(JSON.stringify(exportName), exportName);
100
+ }
101
+ const lineByExport = new Map();
102
+ for (let i = 0; i < lines.length && lineByExport.size < keyToName.size; i++) {
103
+ const line = lines[i];
104
+ if (line.charCodeAt(0) !== 9 || line.charCodeAt(1) !== 34) continue;
105
+ let j = 2;
106
+ while (j < line.length) {
107
+ const c = line.charCodeAt(j);
108
+ if (c === 92) {
109
+ j += 2;
110
+ continue;
111
+ }
112
+ if (c === 34) break;
113
+ j++;
114
+ }
115
+ if (line.charCodeAt(j + 1) !== 58) continue;
116
+ const name = keyToName.get(line.slice(1, j + 1));
117
+ if (name !== undefined && !lineByExport.has(name)) {
118
+ lineByExport.set(name, i);
119
+ }
120
+ }
121
+
122
+ /** @type {(import("../util/createMappings").LineMappings)[]} */
123
+ const perLine = lines.map(() => null);
124
+ for (const [exportName, genLine] of lineByExport) {
125
+ const pos = /** @type {SourcePosition} */ (exportLocs.get(exportName));
126
+ // V3 source maps are 0-based; webpack `loc` lines are 1-based.
127
+ perLine[genLine] = {
128
+ generatedColumn: 0,
129
+ sourceIndex: 0,
130
+ originalLine: pos.line - 1,
131
+ originalColumn: pos.column
132
+ };
133
+ }
134
+
135
+ return {
136
+ version: 3,
137
+ file: "",
138
+ sources: [sourceName],
139
+ sourcesContent: [cssContent],
140
+ names: [],
141
+ mappings: encodeMappings(perLine)
142
+ };
143
+ };
144
+
57
145
  class CssGenerator extends Generator {
58
146
  /**
147
+ * Creates an instance of CssGenerator.
59
148
  * @param {CssModuleGeneratorOptions} options options
60
149
  * @param {ModuleGraph} moduleGraph the module graph
61
150
  */
62
151
  constructor(options, moduleGraph) {
63
152
  super();
153
+ /** @type {CssModuleGeneratorOptions} */
64
154
  this.options = options;
155
+ /** @type {boolean | undefined} */
65
156
  this._exportsOnly = options.exportsOnly;
157
+ /** @type {boolean | undefined} */
66
158
  this._esModule = options.esModule;
159
+ /** @type {ModuleGraph} */
67
160
  this._moduleGraph = moduleGraph;
68
161
  /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
69
162
  this._moduleFactoryCache = new WeakMap();
163
+ const localIdentName = options.localIdentName;
164
+ // Detect hash placeholders via the canonical template parser so this stays
165
+ // in sync with `interpolate`'s grammar.
166
+ const isFn = typeof localIdentName === "function";
167
+ const kinds =
168
+ typeof localIdentName === "string"
169
+ ? getPresentKinds(localIdentName)
170
+ : undefined;
171
+ /** @type {boolean} */
172
+ this._localIdentNeedsHash =
173
+ isFn ||
174
+ (kinds !== undefined && (kinds.has("fullhash") || kinds.has("hash")));
175
+ /** @type {boolean} */
176
+ this._localIdentNeedsContentHash =
177
+ isFn || (kinds !== undefined && kinds.has("contenthash"));
70
178
  }
71
179
 
72
180
  /**
181
+ * Returns the reason this module cannot be concatenated, when one exists.
73
182
  * @param {NormalModule} module module for which the bailout reason should be determined
74
183
  * @param {ConcatenationBailoutReasonContext} context context
75
184
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
@@ -83,133 +192,40 @@ class CssGenerator extends Generator {
83
192
  }
84
193
 
85
194
  /**
86
- * Generate JavaScript code that requires and concatenates all CSS imports
87
- * @param {NormalModule} module the module to generate CSS text for
88
- * @param {GenerateContext} generateContext the generate context
89
- * @param {boolean} getDefaultExport whether to get the default export
90
- * @returns {{ expr: string, type: CssParserExportType }[]} JavaScript code that concatenates all imported CSS
91
- */
92
- _generateImportCode(module, generateContext, getDefaultExport = true) {
93
- const moduleGraph = generateContext.moduleGraph;
94
- /** @type {{ expr: string, type: CssParserExportType }[]} */
95
- const parts = [];
96
-
97
- // Iterate through module.dependencies to maintain source order
98
- for (const dep of module.dependencies) {
99
- if (dep instanceof CssImportDependency) {
100
- /** @type {CssModule} */
101
- const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
102
- const importVar = generateContext.runtimeTemplate.moduleExports({
103
- module: depModule,
104
- chunkGraph: generateContext.chunkGraph,
105
- request: /** @type {CssModule} */ (depModule).userRequest,
106
- weak: false,
107
- runtimeRequirements: generateContext.runtimeRequirements
108
- });
109
-
110
- if (getDefaultExport) {
111
- generateContext.runtimeRequirements.add(
112
- RuntimeGlobals.compatGetDefaultExport
113
- );
114
- parts.push({
115
- expr: `(${RuntimeGlobals.compatGetDefaultExport}(${importVar})() || "")`,
116
- type: /** @type {CssParserExportType} */ (
117
- /** @type {CssModule} */ (depModule).exportType
118
- )
119
- });
120
- } else {
121
- parts.push({
122
- expr: importVar,
123
- type: /** @type {CssParserExportType} */ (
124
- /** @type {CssModule} */ (depModule).exportType
125
- )
126
- });
127
- }
128
- }
129
- }
130
-
131
- return parts;
132
- }
133
-
134
- /**
135
- * Generate CSS source for the current module
136
- * @param {NormalModule} module the module to generate CSS source for
137
- * @param {GenerateContext} generateContext the generate context
138
- * @returns {Source | null} the CSS source
139
- */
140
- _generateContentSource(module, generateContext) {
141
- const moduleSourceContent = /** @type {Source} */ (
142
- this.generate(module, {
143
- ...generateContext,
144
- type: CSS_TYPE
145
- })
146
- );
147
-
148
- if (!moduleSourceContent) {
149
- return null;
150
- }
151
-
152
- const compilation = generateContext.runtimeTemplate.compilation;
153
- // For non-link exportTypes (style, text, css-style-sheet), url() in the CSS
154
- // is resolved relative to the document URL (for <style> tags and CSSStyleSheet),
155
- // not relative to any output file. Use empty undoPath so urls are relative to
156
- // the output root.
157
- const undoPath = "";
158
-
159
- const CssModulesPlugin = getCssModulesPlugin();
160
- const hooks = CssModulesPlugin.getCompilationHooks(compilation);
161
- return CssModulesPlugin.renderModule(
162
- /** @type {CssModule} */ (module),
163
- {
164
- undoPath,
165
- moduleSourceContent,
166
- moduleFactoryCache: this._moduleFactoryCache,
167
- runtimeTemplate: generateContext.runtimeTemplate
168
- },
169
- hooks
170
- );
171
- }
172
-
173
- /**
174
- * Convert a CSS Source to a JS string literal Source, preserving source map.
175
- * Wraps the CSS content with JSON.stringify so it can be embedded in JS code.
176
- * @param {Source} cssSource the CSS source
177
- * @param {NormalModule} module the module
178
- * @returns {Source} a Source representing a JS string literal
179
- */
180
- _cssSourceToJsStringLiteral(cssSource, module) {
181
- const { source, map } = cssSource.sourceAndMap();
182
- const content = /** @type {string} */ (source);
183
- const escaped = JSON.stringify(content);
184
- if (map) {
185
- return new SourceMapSource(escaped, module.identifier(), map, content);
186
- }
187
- return new RawSource(escaped);
188
- }
189
-
190
- /**
191
- * @param {NormalModule} module the current module
195
+ * Processes the provided module.
192
196
  * @param {Dependency} dependency the dependency to generate
193
- * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
194
197
  * @param {ReplaceSource} source the current replace source which can be modified
195
- * @param {GenerateContext & { cssData: CssData }} generateContext the render context
198
+ * @param {DependencyTemplateContext & { cssData: CssData, type: string }} templateContext the template context (shared across all dependencies of the module)
196
199
  * @returns {void}
197
200
  */
198
- sourceDependency(module, dependency, initFragments, source, generateContext) {
201
+ sourceDependency(dependency, source, templateContext) {
199
202
  const constructor =
200
203
  /** @type {DependencyConstructor} */
201
204
  (dependency.constructor);
202
- const template = generateContext.dependencyTemplates.get(constructor);
205
+ const template = templateContext.dependencyTemplates.get(constructor);
203
206
  if (!template) {
204
207
  throw new Error(
205
208
  `No template for dependency: ${dependency.constructor.name}`
206
209
  );
207
210
  }
208
211
 
209
- /** @type {DependencyTemplateContext} */
212
+ template.apply(dependency, source, templateContext);
213
+ }
214
+
215
+ /**
216
+ * Processes the provided module.
217
+ * @param {NormalModule} module the module to generate
218
+ * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
219
+ * @param {ReplaceSource} source the current replace source which can be modified
220
+ * @param {GenerateContext & { cssData: CssData }} generateContext the generateContext
221
+ * @returns {void}
222
+ */
223
+ sourceModule(module, initFragments, source, generateContext) {
224
+ // Only `dependency` varies across `template.apply` calls, so one context
225
+ // (and one lazy `chunkInitFragments` getter) serves the whole module.
210
226
  /** @type {InitFragment<GenerateContext>[] | undefined} */
211
227
  let chunkInitFragments;
212
- /** @type {DependencyTemplateContext} */
228
+ /** @type {CssDependencyTemplateContext} */
213
229
  const templateContext = {
214
230
  runtimeTemplate: generateContext.runtimeTemplate,
215
231
  dependencyTemplates: generateContext.dependencyTemplates,
@@ -241,41 +257,19 @@ class CssGenerator extends Generator {
241
257
  }
242
258
  };
243
259
 
244
- template.apply(dependency, source, templateContext);
245
- }
246
-
247
- /**
248
- * @param {NormalModule} module the module to generate
249
- * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
250
- * @param {ReplaceSource} source the current replace source which can be modified
251
- * @param {GenerateContext & { cssData: CssData }} generateContext the generateContext
252
- * @returns {void}
253
- */
254
- sourceModule(module, initFragments, source, generateContext) {
255
260
  for (const dependency of module.dependencies) {
256
- this.sourceDependency(
257
- module,
258
- dependency,
259
- initFragments,
260
- source,
261
- generateContext
262
- );
261
+ this.sourceDependency(dependency, source, templateContext);
263
262
  }
264
263
 
265
264
  if (module.presentationalDependencies !== undefined) {
266
265
  for (const dependency of module.presentationalDependencies) {
267
- this.sourceDependency(
268
- module,
269
- dependency,
270
- initFragments,
271
- source,
272
- generateContext
273
- );
266
+ this.sourceDependency(dependency, source, templateContext);
274
267
  }
275
268
  }
276
269
  }
277
270
 
278
271
  /**
272
+ * Generates generated code for this runtime module.
279
273
  * @param {NormalModule} module module for which the code should be generated
280
274
  * @param {GenerateContext} generateContext context for generate
281
275
  * @returns {Source | null} generated code
@@ -291,7 +285,8 @@ class CssGenerator extends Generator {
291
285
  /** @type {CssData} */
292
286
  const cssData = {
293
287
  esModule: /** @type {boolean} */ (this._esModule),
294
- exports: new Map()
288
+ exports: new Map(),
289
+ exportLocs: new Map()
295
290
  };
296
291
 
297
292
  this.sourceModule(module, initFragments, source, {
@@ -301,23 +296,36 @@ class CssGenerator extends Generator {
301
296
 
302
297
  switch (generateContext.type) {
303
298
  case JAVASCRIPT_TYPE: {
299
+ const compilation = generateContext.runtimeTemplate.compilation;
300
+ const devtool = compilation.options.devtool;
301
+ const isCssModule = /** @type {CssModuleBuildMeta} */ (module.buildMeta)
302
+ .isCssModule;
303
+
304
304
  const generateContentCode = () => {
305
305
  switch (exportType) {
306
306
  case "style": {
307
- const cssSource = this._generateContentSource(
308
- module,
309
- generateContext
310
- );
307
+ const cssSource = this._renderCss(module, generateContext);
311
308
  if (!cssSource) return "";
312
- const moduleId = generateContext.chunkGraph.getModuleId(module);
313
309
 
314
310
  generateContext.runtimeRequirements.add(
315
311
  RuntimeGlobals.cssInjectStyle
316
312
  );
317
313
 
314
+ const moduleId = generateContext.chunkGraph.getModuleId(module);
315
+
316
+ if (generateContext.concatenationScope) {
317
+ return new ConcatSource(
318
+ `__webpack_css_styles__.push([${JSON.stringify(moduleId)}, `,
319
+ this._cssToJsLiteral(cssSource, devtool, generateContext),
320
+ "]);"
321
+ );
322
+ }
323
+
318
324
  return new ConcatSource(
319
- `${RuntimeGlobals.cssInjectStyle}(${JSON.stringify(moduleId || "")}, `,
320
- this._cssSourceToJsStringLiteral(cssSource, module),
325
+ `${RuntimeGlobals.cssInjectStyle}(${JSON.stringify(
326
+ moduleId
327
+ )}, `,
328
+ this._cssToJsLiteral(cssSource, devtool, generateContext),
321
329
  ");"
322
330
  );
323
331
  }
@@ -329,8 +337,8 @@ class CssGenerator extends Generator {
329
337
  const generateImportCode = () => {
330
338
  switch (exportType) {
331
339
  case "style": {
332
- return this._generateImportCode(module, generateContext, false)
333
- .map((part) => `${part.expr};`)
340
+ return this._generateImportExpressions(module, generateContext)
341
+ .map((expr) => `${expr};`)
334
342
  .join("\n");
335
343
  }
336
344
  default:
@@ -338,69 +346,41 @@ class CssGenerator extends Generator {
338
346
  }
339
347
  };
340
348
  const generateExportCode = () => {
341
- /** @returns {Source} generated CSS text as JS expression */
342
- const generateCssText = () => {
343
- const importCode = this._generateImportCode(
344
- module,
345
- generateContext
346
- );
347
- const cssSource = this._generateContentSource(
348
- module,
349
- generateContext
350
- );
351
- const jsLiteral = cssSource
352
- ? this._cssSourceToJsStringLiteral(cssSource, module)
353
- : new RawSource('""');
354
-
355
- if (importCode.length > 0) {
356
- if (
357
- exportType === "css-style-sheet" ||
358
- importCode.some((part) => part.type !== exportType)
359
- ) {
360
- generateContext.runtimeRequirements.add(
361
- RuntimeGlobals.cssMergeStyleSheets
362
- );
363
-
364
- const args = importCode.map((part) => part.expr);
365
- return new ConcatSource(
366
- `${RuntimeGlobals.cssMergeStyleSheets}([${args.join(", ")}, `,
367
- jsLiteral,
368
- "])"
369
- );
370
- }
371
- return new ConcatSource(
372
- `${generateContext.runtimeTemplate.concatenation(
373
- ...importCode
374
- )} + `,
375
- jsLiteral
376
- );
377
- }
378
- return jsLiteral;
379
- };
380
349
  /**
350
+ * Generates js default export.
381
351
  * @returns {Source | null} the default export
382
352
  */
383
353
  const generateJSDefaultExport = () => {
384
354
  switch (exportType) {
385
355
  case "text": {
386
- return generateCssText();
356
+ return this._generateCssText(module, generateContext, true);
387
357
  }
388
358
  case "css-style-sheet": {
389
- const constOrVar =
390
- generateContext.runtimeTemplate.renderConst();
391
- const cssText = generateCssText();
392
- const fnPrefix =
393
- generateContext.runtimeTemplate.supportsArrowFunction()
394
- ? "() => {\n"
395
- : "function() {\n";
396
- const body =
397
- `${constOrVar} sheet = new CSSStyleSheet();\n` +
398
- "sheet.replaceSync(cssText);\n" +
399
- "return sheet;\n";
359
+ const rt = generateContext.runtimeTemplate;
360
+ const fnPrefix = rt.supportsArrowFunction()
361
+ ? "() => {\n"
362
+ : "function() {\n";
363
+ const constOrVar = rt.renderConst();
364
+ const fallback =
365
+ "{ cssText: css, replaceSync: function(value) { this.cssText = value; } }";
366
+ if (rt.compilation.compiler.platform.node === true) {
367
+ return new ConcatSource(
368
+ `(${fnPrefix}${constOrVar} css = `,
369
+ this._generateCssText(module, generateContext, true),
370
+ `;\nreturn ${fallback};\n})()`
371
+ );
372
+ }
373
+ if (rt.isUniversalTarget()) {
374
+ return new ConcatSource(
375
+ `(${fnPrefix}${constOrVar} css = `,
376
+ this._generateCssText(module, generateContext, true),
377
+ `;\nif (typeof CSSStyleSheet === 'undefined') return ${fallback};\n${constOrVar} sheet = new CSSStyleSheet();\nsheet.replaceSync(css);\nreturn sheet;\n})()`
378
+ );
379
+ }
400
380
  return new ConcatSource(
401
- `(${fnPrefix}${constOrVar} cssText = `,
402
- cssText,
403
- `;\n${body}})()`
381
+ `(${fnPrefix}${constOrVar} sheet = new CSSStyleSheet();\nsheet.replaceSync(`,
382
+ this._generateCssText(module, generateContext, true),
383
+ ");\nreturn sheet;\n})()"
404
384
  );
405
385
  }
406
386
  default:
@@ -408,12 +388,10 @@ class CssGenerator extends Generator {
408
388
  }
409
389
  };
410
390
 
411
- const isCSSModule = /** @type {BuildMeta} */ (module.buildMeta)
412
- .isCSSModule;
413
391
  /** @type {Source | null} */
414
392
  const defaultExport = generateJSDefaultExport();
415
393
 
416
- /** @type {BuildInfo} */
394
+ /** @type {CssModuleBuildInfo} */
417
395
  (module.buildInfo).cssData = cssData;
418
396
 
419
397
  // Required for HMR
@@ -421,10 +399,24 @@ class CssGenerator extends Generator {
421
399
  generateContext.runtimeRequirements.add(RuntimeGlobals.module);
422
400
  }
423
401
 
424
- if (!defaultExport && cssData.exports.size === 0 && !isCSSModule) {
402
+ if (!defaultExport && cssData.exports.size === 0 && !isCssModule) {
425
403
  return new RawSource("");
426
404
  }
427
405
 
406
+ const exportsInfo =
407
+ generateContext.moduleGraph.getExportsInfo(module);
408
+
409
+ /**
410
+ * @param {string} name export name
411
+ * @returns {string | false} used export name when the export is referenced
412
+ */
413
+ const getUsedExportName = (name) =>
414
+ /** @type {string | false} */ (
415
+ exportsInfo
416
+ .getExportInfo(name)
417
+ .getUsedName(name, generateContext.runtime)
418
+ );
419
+
428
420
  if (generateContext.concatenationScope) {
429
421
  const source = new ConcatSource();
430
422
  /** @type {Set<string>} */
@@ -432,9 +424,7 @@ class CssGenerator extends Generator {
432
424
  const { RESERVED_IDENTIFIER } = getPropertyName();
433
425
 
434
426
  if (defaultExport) {
435
- const usedName = generateContext.moduleGraph
436
- .getExportInfo(module, "default")
437
- .getUsedName("default", generateContext.runtime);
427
+ const usedName = getUsedExportName("default");
438
428
  if (usedName) {
439
429
  let identifier = Template.toIdentifier(usedName);
440
430
  if (RESERVED_IDENTIFIER.has(identifier)) {
@@ -454,14 +444,8 @@ class CssGenerator extends Generator {
454
444
  }
455
445
 
456
446
  for (const [name, v] of cssData.exports) {
457
- const usedName = generateContext.moduleGraph
458
- .getExportInfo(module, name)
459
- .getUsedName(name, generateContext.runtime);
460
- if (!usedName) {
461
- continue;
462
- }
463
-
464
- let identifier = Template.toIdentifier(usedName);
447
+ const usedName = getUsedExportName(name);
448
+ let identifier = Template.toIdentifier(usedName || name);
465
449
  if (RESERVED_IDENTIFIER.has(identifier)) {
466
450
  identifier = `_${identifier}`;
467
451
  }
@@ -476,7 +460,9 @@ class CssGenerator extends Generator {
476
460
  identifier
477
461
  );
478
462
  source.add(
479
- `${generateContext.runtimeTemplate.renderConst()} ${identifier} = ${JSON.stringify(v)};\n`
463
+ `${generateContext.runtimeTemplate.renderConst()} ${identifier} = ${JSON.stringify(
464
+ v
465
+ )};\n`
480
466
  );
481
467
  }
482
468
  return source;
@@ -484,9 +470,7 @@ class CssGenerator extends Generator {
484
470
 
485
471
  const needNsObj =
486
472
  this._esModule &&
487
- generateContext.moduleGraph
488
- .getExportsInfo(module)
489
- .otherExportsInfo.getUsed(generateContext.runtime) !==
473
+ exportsInfo.otherExportsInfo.getUsed(generateContext.runtime) !==
490
474
  UsageState.Unused;
491
475
 
492
476
  if (needNsObj) {
@@ -498,7 +482,25 @@ class CssGenerator extends Generator {
498
482
  // Should be after `concatenationScope` to allow module inlining
499
483
  generateContext.runtimeRequirements.add(RuntimeGlobals.module);
500
484
 
501
- if (!isCSSModule && !needNsObj) {
485
+ const defaultUsedName = defaultExport
486
+ ? getUsedExportName("default")
487
+ : false;
488
+
489
+ /** @type {string[]} */
490
+ const exportEntries = [];
491
+ for (const [name, v] of cssData.exports) {
492
+ const exportKey = getUsedExportName(name) || name;
493
+ exportEntries.push(
494
+ `\t${JSON.stringify(exportKey)}: ${JSON.stringify(v)}`
495
+ );
496
+ }
497
+
498
+ if (
499
+ !isCssModule &&
500
+ !needNsObj &&
501
+ exportEntries.length === 0 &&
502
+ defaultUsedName
503
+ ) {
502
504
  return new ConcatSource(
503
505
  `${module.moduleArgument}.exports = `,
504
506
  /** @type {Source} */ (defaultExport)
@@ -512,21 +514,14 @@ class CssGenerator extends Generator {
512
514
  }.exports = {\n`
513
515
  );
514
516
 
515
- if (defaultExport) {
517
+ if (defaultUsedName) {
516
518
  result.add('\t"default": ');
517
- result.add(defaultExport);
518
- if (cssData.exports.size > 0) {
519
+ result.add(/** @type {Source} */ (defaultExport));
520
+ if (exportEntries.length > 0) {
519
521
  result.add(",\n");
520
522
  }
521
523
  }
522
524
 
523
- /** @type {string[]} */
524
- const exportEntries = [];
525
- for (const [name, v] of cssData.exports) {
526
- exportEntries.push(
527
- `\t${JSON.stringify(name)}: ${JSON.stringify(v)}`
528
- );
529
- }
530
525
  if (exportEntries.length > 0) {
531
526
  result.add(exportEntries.join(",\n"));
532
527
  }
@@ -546,26 +541,58 @@ class CssGenerator extends Generator {
546
541
  source.add("\n");
547
542
  }
548
543
  }
549
- return source;
550
- }
551
- case CSS_TYPE: {
552
544
  if (
553
- !(
554
- this._exportsOnly ||
555
- /** @type {boolean} */ (exportType && exportType !== "link")
556
- )
545
+ exportType === "link" &&
546
+ !isCssModule &&
547
+ cssData.exports.size === 0
557
548
  ) {
549
+ return source;
550
+ }
551
+
552
+ const generatedJs = /** @type {string} */ (source.source());
553
+ // Context-relative identifier, like `NormalModule.createSource` — so
554
+ // `SourceMapDevToolPlugin` can match the module and apply the
555
+ // devtool filename template instead of leaking this raw name
556
+ const sourceName = contextifySourceUrl(
557
+ /** @type {string} */ (compilation.options.context),
558
+ module.identifier(),
559
+ compilation.compiler.root
560
+ );
561
+
562
+ if (
563
+ /** @type {ExportLocsMap} */
564
+ (cssData.exportLocs).size > 0
565
+ ) {
566
+ const cssOriginal = module.originalSource();
567
+ if (cssOriginal) {
568
+ const sourceMap = buildExportsSourceMap(
569
+ generatedJs,
570
+ /** @type {ExportLocsMap} */
571
+ (cssData.exportLocs),
572
+ /** @type {string} */ (cssOriginal.source()),
573
+ sourceName
574
+ );
575
+ return new SourceMapSource(generatedJs, sourceName, sourceMap);
576
+ }
577
+ }
578
+ return new OriginalSource(generatedJs, sourceName);
579
+ }
580
+ case CSS_TYPE: {
581
+ if (!(this._exportsOnly || exportType !== "link")) {
558
582
  generateContext.runtimeRequirements.add(RuntimeGlobals.hasCssModules);
559
583
  }
560
584
 
561
585
  return InitFragment.addToSource(source, initFragments, generateContext);
562
586
  }
587
+ case CSS_TEXT_TYPE:
588
+ return this._generateCssText(module, generateContext, false);
563
589
  default:
564
590
  return null;
565
591
  }
566
592
  }
567
593
 
568
594
  /**
595
+ * Generates fallback output for the provided error condition.
569
596
  * @param {Error} error the error
570
597
  * @param {NormalModule} module module for which the code should be generated
571
598
  * @param {GenerateContext} generateContext context for generate
@@ -587,6 +614,7 @@ class CssGenerator extends Generator {
587
614
  }
588
615
 
589
616
  /**
617
+ * Returns the source types available for this module.
590
618
  * @param {NormalModule} module fresh module
591
619
  * @returns {SourceTypes} available types (do not mutate)
592
620
  */
@@ -596,10 +624,15 @@ class CssGenerator extends Generator {
596
624
  return JAVASCRIPT_TYPES;
597
625
  }
598
626
 
599
- const sourceTypes = new Set();
627
+ let hasJs = false;
628
+ let hasCssText = false;
629
+ // Uncached per call (#20800) — the common link case stops scanning once
630
+ // js is seen; `hasCssText` only matters for exports-only / non-link.
631
+ const needsCssText = this._exportsOnly || exportType !== "link";
600
632
  const connections = this._moduleGraph.getIncomingConnections(module);
601
633
 
602
634
  for (const connection of connections) {
635
+ if (hasJs && (hasCssText || !needsCssText)) break;
603
636
  if (
604
637
  exportType === "link" &&
605
638
  connection.dependency instanceof CssImportDependency
@@ -607,47 +640,56 @@ class CssGenerator extends Generator {
607
640
  continue;
608
641
  }
609
642
 
610
- // when no hmr required, css module js output contains no sideEffects at all
611
- // js sideeffect connection doesn't require js type output
612
643
  if (connection.dependency instanceof HarmonyImportSideEffectDependency) {
613
644
  continue;
614
645
  }
615
646
 
647
+ // HTML inline styles consume CSS_TEXT_TYPE directly.
648
+ if (
649
+ connection.dependency &&
650
+ (connection.dependency.category === "html-style" ||
651
+ connection.dependency.category === "html-style-attribute")
652
+ ) {
653
+ hasCssText = true;
654
+ continue;
655
+ }
656
+
616
657
  if (!connection.originModule) {
617
658
  continue;
618
659
  }
619
660
 
620
- if (connection.originModule.type.split("/")[0] !== CSS_TYPE) {
621
- sourceTypes.add(JAVASCRIPT_TYPE);
661
+ if (!connection.originModule.type.startsWith(CSS_TYPE_PREFIX)) {
662
+ hasJs = true;
622
663
  } else {
623
664
  const originModule = /** @type {CssModule} */ connection.originModule;
624
- const originExportType = /** @type {CssModule} */ (originModule)
625
- .exportType;
626
- if (
627
- /** @type {boolean} */ (
628
- originExportType && originExportType !== "link"
629
- )
630
- ) {
631
- sourceTypes.add(JAVASCRIPT_TYPE);
665
+ const originExportType =
666
+ /** @type {CssModule} */ (originModule).exportType || "link";
667
+ if (originExportType !== "link") {
668
+ hasJs = true;
632
669
  }
633
670
  }
634
671
  }
635
- if (
636
- this._exportsOnly ||
637
- /** @type {boolean} */ (exportType && exportType !== "link")
638
- ) {
639
- if (sourceTypes.has(JAVASCRIPT_TYPE)) {
640
- return JAVASCRIPT_TYPES;
641
- }
642
- return new Set();
672
+ if (this._exportsOnly || exportType !== "link") {
673
+ if (hasJs && hasCssText) return JAVASCRIPT_AND_CSS_TEXT_TYPES;
674
+ if (hasJs) return JAVASCRIPT_TYPES;
675
+ if (hasCssText) return CSS_TEXT_TYPES;
676
+ return NO_TYPES;
643
677
  }
644
- if (sourceTypes.has(JAVASCRIPT_TYPE)) {
678
+ if (hasJs) {
645
679
  return JAVASCRIPT_AND_CSS_TYPES;
646
680
  }
647
681
  return CSS_TYPES;
648
682
  }
649
683
 
650
684
  /**
685
+ * @returns {boolean} whether getTypes() depends on the module's incoming connections
686
+ */
687
+ getTypesDependOnIncomingConnections() {
688
+ return true;
689
+ }
690
+
691
+ /**
692
+ * Returns the estimated size for the requested source type.
651
693
  * @param {NormalModule} module the module
652
694
  * @param {SourceType=} type source type
653
695
  * @returns {number} estimate size of the module
@@ -655,26 +697,30 @@ class CssGenerator extends Generator {
655
697
  getSize(module, type) {
656
698
  switch (type) {
657
699
  case JAVASCRIPT_TYPE: {
658
- const cssData = /** @type {BuildInfo} */ (module.buildInfo).cssData;
700
+ const cssData = /** @type {CssModuleBuildInfo} */ (module.buildInfo)
701
+ .cssData;
659
702
  if (!cssData) {
660
703
  return 42;
661
704
  }
662
705
  if (cssData.exports.size === 0) {
663
- if (/** @type {BuildMeta} */ (module.buildMeta).isCSSModule) {
706
+ if (
707
+ /** @type {CssModuleBuildMeta} */ (module.buildMeta).isCssModule
708
+ ) {
664
709
  return 42;
665
710
  }
666
711
  return 0;
667
712
  }
668
- const exports = cssData.exports;
669
- /** @type {Record<string, string>} */
670
- const exportsObj = {};
671
- for (const [key, value] of exports) {
672
- exportsObj[key] = value;
713
+ // `JSON.stringify({...exports}).length` computed entry-wise, without
714
+ // materializing the object or the full string.
715
+ let length = 2 + (cssData.exports.size - 1);
716
+ for (const [key, value] of cssData.exports) {
717
+ length +=
718
+ JSON.stringify(key).length + 1 + JSON.stringify(value).length;
673
719
  }
674
- const stringifiedExports = JSON.stringify(exportsObj);
675
720
 
676
- return stringifiedExports.length + 42;
721
+ return length + 42;
677
722
  }
723
+ case CSS_TEXT_TYPE:
678
724
  case CSS_TYPE: {
679
725
  const originalSource = module.originalSource();
680
726
 
@@ -690,11 +736,233 @@ class CssGenerator extends Generator {
690
736
  }
691
737
 
692
738
  /**
739
+ * Updates the hash with the data contributed by this instance.
693
740
  * @param {Hash} hash hash that will be modified
694
741
  * @param {UpdateHashContext} updateHashContext context for updating hash
695
742
  */
696
743
  updateHash(hash, { module }) {
697
744
  hash.update(/** @type {boolean} */ (this._esModule).toString());
745
+ hash.update(/** @type {boolean} */ (this._exportsOnly).toString());
746
+ }
747
+
748
+ /**
749
+ * Resolve the effective `@charset` by walking text imports.
750
+ * @param {NormalModule} module the module
751
+ * @param {ModuleGraph} moduleGraph module graph
752
+ * @param {WeakSet<NormalModule>=} visited cycle guard
753
+ * @returns {string | undefined} the effective charset
754
+ */
755
+ _getEffectiveCharset(module, moduleGraph, visited = new WeakSet()) {
756
+ if (!module || visited.has(module)) return undefined;
757
+ const exportType = /** @type {CssModule} */ (module).exportType;
758
+ if (exportType !== "text" && exportType !== "css-style-sheet") {
759
+ return undefined;
760
+ }
761
+ visited.add(module);
762
+ const own =
763
+ module.buildInfo &&
764
+ /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset;
765
+ if (own !== undefined) return own;
766
+ if (exportType !== "text") return undefined;
767
+ for (const dep of module.dependencies) {
768
+ if (dep instanceof CssImportDependency) {
769
+ const depModule = /** @type {NormalModule} */ (
770
+ moduleGraph.getModule(dep)
771
+ );
772
+ const inherited = this._getEffectiveCharset(
773
+ depModule,
774
+ moduleGraph,
775
+ visited
776
+ );
777
+ if (inherited !== undefined) return inherited;
778
+ }
779
+ }
780
+ return undefined;
781
+ }
782
+
783
+ /**
784
+ * Generate JS expressions for `@import` side effects (`style` exportType only).
785
+ * @param {NormalModule} module the module to generate CSS text for
786
+ * @param {GenerateContext} generateContext the generate context
787
+ * @returns {string[]} JS expressions, one per `@import` dependency
788
+ */
789
+ _generateImportExpressions(module, generateContext) {
790
+ const { moduleGraph, concatenationScope } = generateContext;
791
+ const parts = [];
792
+
793
+ for (const dep of module.dependencies) {
794
+ if (!(dep instanceof CssImportDependency)) continue;
795
+ const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
796
+ if (concatenationScope && concatenationScope.isModuleInScope(depModule)) {
797
+ continue;
798
+ }
799
+ parts.push(
800
+ generateContext.runtimeTemplate.moduleExports({
801
+ module: depModule,
802
+ chunkGraph: generateContext.chunkGraph,
803
+ request: depModule.userRequest,
804
+ weak: false,
805
+ runtimeRequirements: generateContext.runtimeRequirements
806
+ })
807
+ );
808
+ }
809
+
810
+ return parts;
811
+ }
812
+
813
+ /**
814
+ * Recursively merge `@import`'d CSS into a single Source (text/css-style-sheet only).
815
+ * @param {NormalModule} module the module to render
816
+ * @param {GenerateContext} generateContext the generate context
817
+ * @param {Set<NormalModule>} ancestors modules on the current path (cycle guard)
818
+ * @returns {Source | null} merged CSS source, or null when the module has no content
819
+ */
820
+ _renderMergedCss(module, generateContext, ancestors) {
821
+ if (ancestors.has(module)) return null;
822
+ ancestors.add(module);
823
+ try {
824
+ const { moduleGraph } = generateContext;
825
+ /** @type {Source[]} */
826
+ const parts = [];
827
+
828
+ for (const dep of module.dependencies) {
829
+ if (!(dep instanceof CssImportDependency)) continue;
830
+ const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
831
+ if (!depModule) continue;
832
+ const depExportType = depModule.exportType;
833
+ if (depExportType !== "text" && depExportType !== "css-style-sheet") {
834
+ continue;
835
+ }
836
+ const depMerged = this._renderMergedCss(
837
+ depModule,
838
+ generateContext,
839
+ ancestors
840
+ );
841
+ if (depMerged) parts.push(depMerged);
842
+ }
843
+
844
+ const own = this._renderCss(module, generateContext);
845
+ if (own) parts.push(own);
846
+
847
+ if (parts.length === 0) return null;
848
+ if (parts.length === 1) return parts[0];
849
+ return new ConcatSource(...parts);
850
+ } finally {
851
+ ancestors.delete(module);
852
+ }
853
+ }
854
+
855
+ /**
856
+ * Generate CSS source for the current module
857
+ * @param {NormalModule} module the module to generate CSS source for
858
+ * @param {GenerateContext} generateContext the generate context
859
+ * @returns {Source | null} the CSS source
860
+ */
861
+ _renderCss(module, generateContext) {
862
+ const moduleSourceContent = /** @type {Source} */ (
863
+ this.generate(module, {
864
+ ...generateContext,
865
+ type: CSS_TYPE
866
+ })
867
+ );
868
+
869
+ if (!moduleSourceContent) {
870
+ return null;
871
+ }
872
+
873
+ const compilation = generateContext.runtimeTemplate.compilation;
874
+ const undoPath = "";
875
+
876
+ const CssModulesPlugin = getCssModulesPlugin();
877
+ const hooks = CssModulesPlugin.getCompilationHooks(compilation);
878
+ return CssModulesPlugin.renderModule(
879
+ /** @type {CssModule} */ (module),
880
+ {
881
+ undoPath,
882
+ moduleSourceContent,
883
+ moduleFactoryCache: this._moduleFactoryCache,
884
+ runtimeTemplate: generateContext.runtimeTemplate
885
+ },
886
+ hooks
887
+ );
888
+ }
889
+
890
+ /**
891
+ * Convert a CSS Source into a JS string literal, splicing `__webpack_require__.h()` for `[fullhash]` placeholders.
892
+ * @param {Source} cssSource the CSS source
893
+ * @param {import("../../declarations/WebpackOptions").DevTool | undefined} devtool the devtool option
894
+ * @param {GenerateContext} generateContext the generate context
895
+ * @returns {Source} a Source representing a JS string literal
896
+ */
897
+ _cssToJsLiteral(cssSource, devtool, generateContext) {
898
+ const { source, map } = cssSource.sourceAndMap();
899
+ let content = /** @type {string} */ (source);
900
+ if (map) {
901
+ const inlineMap =
902
+ typeof devtool === "string" && devtool.includes("nosources")
903
+ ? { ...map, sourcesContent: undefined }
904
+ : map;
905
+ const base64Map = Buffer.from(JSON.stringify(inlineMap), "utf8").toString(
906
+ "base64"
907
+ );
908
+ const trailingNewline = content.endsWith("\n") ? "" : "\n";
909
+ content += `${trailingNewline}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}*/`;
910
+ }
911
+
912
+ if (!content.includes(PUBLIC_PATH_FULL_HASH)) {
913
+ return new RawSource(JSON.stringify(content));
914
+ }
915
+
916
+ const result = new ConcatSource();
917
+ let last = 0;
918
+ walkFullHashPlaceholders(content, (start, end, length) => {
919
+ result.add(JSON.stringify(content.slice(last, start)));
920
+ result.add(
921
+ length === 0
922
+ ? ` + ${RuntimeGlobals.getFullHash}() + `
923
+ : ` + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + `
924
+ );
925
+ last = end;
926
+ });
927
+
928
+ result.add(JSON.stringify(content.slice(last)));
929
+ generateContext.runtimeRequirements.add(RuntimeGlobals.getFullHash);
930
+ return result;
931
+ }
932
+
933
+ /**
934
+ * Generate the merged CSS text for a module, optionally wrapped as a
935
+ * JS string literal for embedding in JavaScript output.
936
+ * @param {NormalModule} module the module
937
+ * @param {GenerateContext} generateContext the generate context
938
+ * @param {boolean} asJsLiteral wrap the result as a JS string literal
939
+ * @returns {Source} the CSS text source
940
+ */
941
+ _generateCssText(module, generateContext, asJsLiteral) {
942
+ const cssSource = this._renderMergedCss(module, generateContext, new Set());
943
+ const effectiveCharset = this._getEffectiveCharset(
944
+ module,
945
+ generateContext.moduleGraph
946
+ );
947
+
948
+ let result;
949
+ if (effectiveCharset !== undefined) {
950
+ const prefix = `@charset "${effectiveCharset}";\n`;
951
+ result = cssSource
952
+ ? new ConcatSource(prefix, cssSource)
953
+ : new RawSource(prefix);
954
+ } else {
955
+ result = cssSource;
956
+ }
957
+
958
+ if (asJsLiteral) {
959
+ const devtool =
960
+ generateContext.runtimeTemplate.compilation.options.devtool;
961
+ return result
962
+ ? this._cssToJsLiteral(result, devtool, generateContext)
963
+ : new RawSource('""');
964
+ }
965
+ return result || new RawSource("");
698
966
  }
699
967
  }
700
968