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