webpack 5.59.0 → 5.94.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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -0,0 +1,888 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { SyncWaterfallHook, SyncHook } = require("tapable");
9
+ const {
10
+ ConcatSource,
11
+ PrefixSource,
12
+ ReplaceSource,
13
+ CachedSource
14
+ } = require("webpack-sources");
15
+ const Compilation = require("../Compilation");
16
+ const CssModule = require("../CssModule");
17
+ const { tryRunOrWebpackError } = require("../HookWebpackError");
18
+ const HotUpdateChunk = require("../HotUpdateChunk");
19
+ const {
20
+ CSS_MODULE_TYPE,
21
+ CSS_MODULE_TYPE_GLOBAL,
22
+ CSS_MODULE_TYPE_MODULE,
23
+ CSS_MODULE_TYPE_AUTO
24
+ } = require("../ModuleTypeConstants");
25
+ const RuntimeGlobals = require("../RuntimeGlobals");
26
+ const SelfModuleFactory = require("../SelfModuleFactory");
27
+ const WebpackError = require("../WebpackError");
28
+ const CssExportDependency = require("../dependencies/CssExportDependency");
29
+ const CssImportDependency = require("../dependencies/CssImportDependency");
30
+ const CssLocalIdentifierDependency = require("../dependencies/CssLocalIdentifierDependency");
31
+ const CssSelfLocalIdentifierDependency = require("../dependencies/CssSelfLocalIdentifierDependency");
32
+ const CssUrlDependency = require("../dependencies/CssUrlDependency");
33
+ const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
34
+ const { compareModulesByIdentifier } = require("../util/comparators");
35
+ const createSchemaValidation = require("../util/create-schema-validation");
36
+ const createHash = require("../util/createHash");
37
+ const { getUndoPath } = require("../util/identifier");
38
+ const memoize = require("../util/memoize");
39
+ const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
40
+ const CssExportsGenerator = require("./CssExportsGenerator");
41
+ const CssGenerator = require("./CssGenerator");
42
+ const CssParser = require("./CssParser");
43
+
44
+ /** @typedef {import("webpack-sources").Source} Source */
45
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
46
+ /** @typedef {import("../Chunk")} Chunk */
47
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
48
+ /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
49
+ /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
50
+ /** @typedef {import("../Compiler")} Compiler */
51
+ /** @typedef {import("../CssModule").Inheritance} Inheritance */
52
+ /** @typedef {import("../DependencyTemplate").CssExportsData} CssExportsData */
53
+ /** @typedef {import("../Module")} Module */
54
+ /** @typedef {import("../Template").RuntimeTemplate} RuntimeTemplate */
55
+ /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
56
+ /** @typedef {import("../util/Hash")} Hash */
57
+ /** @typedef {import("../util/memoize")} Memoize */
58
+
59
+ /**
60
+ * @typedef {object} ChunkRenderContext
61
+ * @property {RuntimeTemplate} runtimeTemplate runtime template
62
+ */
63
+
64
+ /**
65
+ * @typedef {object} CompilationHooks
66
+ * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModulePackage
67
+ * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
68
+ */
69
+
70
+ const getCssLoadingRuntimeModule = memoize(() =>
71
+ require("./CssLoadingRuntimeModule")
72
+ );
73
+
74
+ /**
75
+ * @param {string} name name
76
+ * @returns {{oneOf: [{$ref: string}], definitions: *}} schema
77
+ */
78
+ const getSchema = name => {
79
+ const { definitions } = require("../../schemas/WebpackOptions.json");
80
+ return {
81
+ definitions,
82
+ oneOf: [{ $ref: `#/definitions/${name}` }]
83
+ };
84
+ };
85
+
86
+ const generatorValidationOptions = {
87
+ name: "Css Modules Plugin",
88
+ baseDataPath: "generator"
89
+ };
90
+ const validateGeneratorOptions = {
91
+ css: createSchemaValidation(
92
+ require("../../schemas/plugins/css/CssGeneratorOptions.check.js"),
93
+ () => getSchema("CssGeneratorOptions"),
94
+ generatorValidationOptions
95
+ ),
96
+ "css/auto": createSchemaValidation(
97
+ require("../../schemas/plugins/css/CssAutoGeneratorOptions.check.js"),
98
+ () => getSchema("CssAutoGeneratorOptions"),
99
+ generatorValidationOptions
100
+ ),
101
+ "css/module": createSchemaValidation(
102
+ require("../../schemas/plugins/css/CssModuleGeneratorOptions.check.js"),
103
+ () => getSchema("CssModuleGeneratorOptions"),
104
+ generatorValidationOptions
105
+ ),
106
+ "css/global": createSchemaValidation(
107
+ require("../../schemas/plugins/css/CssGlobalGeneratorOptions.check.js"),
108
+ () => getSchema("CssGlobalGeneratorOptions"),
109
+ generatorValidationOptions
110
+ )
111
+ };
112
+
113
+ const parserValidationOptions = {
114
+ name: "Css Modules Plugin",
115
+ baseDataPath: "parser"
116
+ };
117
+ const validateParserOptions = {
118
+ css: createSchemaValidation(
119
+ require("../../schemas/plugins/css/CssParserOptions.check.js"),
120
+ () => getSchema("CssParserOptions"),
121
+ parserValidationOptions
122
+ ),
123
+ "css/auto": createSchemaValidation(
124
+ require("../../schemas/plugins/css/CssAutoParserOptions.check.js"),
125
+ () => getSchema("CssAutoParserOptions"),
126
+ parserValidationOptions
127
+ ),
128
+ "css/module": createSchemaValidation(
129
+ require("../../schemas/plugins/css/CssModuleParserOptions.check.js"),
130
+ () => getSchema("CssModuleParserOptions"),
131
+ parserValidationOptions
132
+ ),
133
+ "css/global": createSchemaValidation(
134
+ require("../../schemas/plugins/css/CssGlobalParserOptions.check.js"),
135
+ () => getSchema("CssGlobalParserOptions"),
136
+ parserValidationOptions
137
+ )
138
+ };
139
+
140
+ /** @type {WeakMap<Compilation, CompilationHooks>} */
141
+ const compilationHooksMap = new WeakMap();
142
+
143
+ /**
144
+ * @param {string} str string
145
+ * @param {boolean=} omitOptionalUnderscore if true, optional underscore is not added
146
+ * @returns {string} escaped string
147
+ */
148
+ const escapeCss = (str, omitOptionalUnderscore) => {
149
+ const escaped = `${str}`.replace(
150
+ // cspell:word uffff
151
+ /[^a-zA-Z0-9_\u0081-\uFFFF-]/g,
152
+ s => `\\${s}`
153
+ );
154
+ return !omitOptionalUnderscore && /^(?!--)[0-9_-]/.test(escaped)
155
+ ? `_${escaped}`
156
+ : escaped;
157
+ };
158
+
159
+ /**
160
+ * @param {string} str string
161
+ * @returns {string} encoded string
162
+ */
163
+ const lzwEncode = str => {
164
+ /** @type {Map<string, string>} */
165
+ const map = new Map();
166
+ let encoded = "";
167
+ let phrase = str[0];
168
+ let code = 256;
169
+ const maxCode = "\uFFFF".charCodeAt(0);
170
+ for (let i = 1; i < str.length; i++) {
171
+ const c = str[i];
172
+ if (map.has(phrase + c)) {
173
+ phrase += c;
174
+ } else {
175
+ encoded += phrase.length > 1 ? map.get(phrase) : phrase;
176
+ map.set(phrase + c, String.fromCharCode(code));
177
+ phrase = c;
178
+ if (++code > maxCode) {
179
+ code = 256;
180
+ map.clear();
181
+ }
182
+ }
183
+ }
184
+ encoded += phrase.length > 1 ? map.get(phrase) : phrase;
185
+ return encoded;
186
+ };
187
+
188
+ const PLUGIN_NAME = "CssModulesPlugin";
189
+
190
+ class CssModulesPlugin {
191
+ /**
192
+ * @param {Compilation} compilation the compilation
193
+ * @returns {CompilationHooks} the attached hooks
194
+ */
195
+ static getCompilationHooks(compilation) {
196
+ if (!(compilation instanceof Compilation)) {
197
+ throw new TypeError(
198
+ "The 'compilation' argument must be an instance of Compilation"
199
+ );
200
+ }
201
+ let hooks = compilationHooksMap.get(compilation);
202
+ if (hooks === undefined) {
203
+ hooks = {
204
+ renderModulePackage: new SyncWaterfallHook([
205
+ "source",
206
+ "module",
207
+ "renderContext"
208
+ ]),
209
+ chunkHash: new SyncHook(["chunk", "hash", "context"])
210
+ };
211
+ compilationHooksMap.set(compilation, hooks);
212
+ }
213
+ return hooks;
214
+ }
215
+
216
+ constructor() {
217
+ /** @type {WeakMap<Source, { undoPath: string, inheritance: Inheritance, source: CachedSource }>} */
218
+ this._moduleCache = new WeakMap();
219
+ }
220
+
221
+ /**
222
+ * Apply the plugin
223
+ * @param {Compiler} compiler the compiler instance
224
+ * @returns {void}
225
+ */
226
+ apply(compiler) {
227
+ compiler.hooks.compilation.tap(
228
+ PLUGIN_NAME,
229
+ (compilation, { normalModuleFactory }) => {
230
+ const hooks = CssModulesPlugin.getCompilationHooks(compilation);
231
+ const selfFactory = new SelfModuleFactory(compilation.moduleGraph);
232
+ compilation.dependencyFactories.set(
233
+ CssUrlDependency,
234
+ normalModuleFactory
235
+ );
236
+ compilation.dependencyTemplates.set(
237
+ CssUrlDependency,
238
+ new CssUrlDependency.Template()
239
+ );
240
+ compilation.dependencyTemplates.set(
241
+ CssLocalIdentifierDependency,
242
+ new CssLocalIdentifierDependency.Template()
243
+ );
244
+ compilation.dependencyFactories.set(
245
+ CssSelfLocalIdentifierDependency,
246
+ selfFactory
247
+ );
248
+ compilation.dependencyTemplates.set(
249
+ CssSelfLocalIdentifierDependency,
250
+ new CssSelfLocalIdentifierDependency.Template()
251
+ );
252
+ compilation.dependencyTemplates.set(
253
+ CssExportDependency,
254
+ new CssExportDependency.Template()
255
+ );
256
+ compilation.dependencyFactories.set(
257
+ CssImportDependency,
258
+ normalModuleFactory
259
+ );
260
+ compilation.dependencyTemplates.set(
261
+ CssImportDependency,
262
+ new CssImportDependency.Template()
263
+ );
264
+ compilation.dependencyTemplates.set(
265
+ StaticExportsDependency,
266
+ new StaticExportsDependency.Template()
267
+ );
268
+ for (const type of [
269
+ CSS_MODULE_TYPE,
270
+ CSS_MODULE_TYPE_GLOBAL,
271
+ CSS_MODULE_TYPE_MODULE,
272
+ CSS_MODULE_TYPE_AUTO
273
+ ]) {
274
+ normalModuleFactory.hooks.createParser
275
+ .for(type)
276
+ .tap(PLUGIN_NAME, parserOptions => {
277
+ validateParserOptions[type](parserOptions);
278
+ const { namedExports } = parserOptions;
279
+
280
+ switch (type) {
281
+ case CSS_MODULE_TYPE_GLOBAL:
282
+ case CSS_MODULE_TYPE_AUTO:
283
+ return new CssParser({
284
+ namedExports
285
+ });
286
+ case CSS_MODULE_TYPE:
287
+ return new CssParser({
288
+ allowModeSwitch: false,
289
+ namedExports
290
+ });
291
+ case CSS_MODULE_TYPE_MODULE:
292
+ return new CssParser({
293
+ defaultMode: "local",
294
+ namedExports
295
+ });
296
+ }
297
+ });
298
+ normalModuleFactory.hooks.createGenerator
299
+ .for(type)
300
+ .tap(PLUGIN_NAME, generatorOptions => {
301
+ validateGeneratorOptions[type](generatorOptions);
302
+
303
+ return generatorOptions.exportsOnly
304
+ ? new CssExportsGenerator(
305
+ generatorOptions.exportsConvention,
306
+ generatorOptions.localIdentName,
307
+ generatorOptions.esModule
308
+ )
309
+ : new CssGenerator(
310
+ generatorOptions.exportsConvention,
311
+ generatorOptions.localIdentName,
312
+ generatorOptions.esModule
313
+ );
314
+ });
315
+ normalModuleFactory.hooks.createModuleClass
316
+ .for(type)
317
+ .tap(PLUGIN_NAME, (createData, resolveData) => {
318
+ if (resolveData.dependencies.length > 0) {
319
+ // When CSS is imported from CSS there is only one dependency
320
+ const dependency = resolveData.dependencies[0];
321
+
322
+ if (dependency instanceof CssImportDependency) {
323
+ const parent =
324
+ /** @type {CssModule} */
325
+ (compilation.moduleGraph.getParentModule(dependency));
326
+
327
+ if (parent instanceof CssModule) {
328
+ /** @type {import("../CssModule").Inheritance | undefined} */
329
+ let inheritance;
330
+
331
+ if (
332
+ (parent.cssLayer !== null &&
333
+ parent.cssLayer !== undefined) ||
334
+ parent.supports ||
335
+ parent.media
336
+ ) {
337
+ if (!inheritance) {
338
+ inheritance = [];
339
+ }
340
+
341
+ inheritance.push([
342
+ parent.cssLayer,
343
+ parent.supports,
344
+ parent.media
345
+ ]);
346
+ }
347
+
348
+ if (parent.inheritance) {
349
+ if (!inheritance) {
350
+ inheritance = [];
351
+ }
352
+
353
+ inheritance.push(...parent.inheritance);
354
+ }
355
+
356
+ return new CssModule({
357
+ ...createData,
358
+ cssLayer: dependency.layer,
359
+ supports: dependency.supports,
360
+ media: dependency.media,
361
+ inheritance
362
+ });
363
+ }
364
+
365
+ return new CssModule({
366
+ ...createData,
367
+ cssLayer: dependency.layer,
368
+ supports: dependency.supports,
369
+ media: dependency.media
370
+ });
371
+ }
372
+ }
373
+
374
+ return new CssModule(createData);
375
+ });
376
+ }
377
+ const orderedCssModulesPerChunk = new WeakMap();
378
+ compilation.hooks.afterCodeGeneration.tap("CssModulesPlugin", () => {
379
+ const { chunkGraph } = compilation;
380
+ for (const chunk of compilation.chunks) {
381
+ if (CssModulesPlugin.chunkHasCss(chunk, chunkGraph)) {
382
+ orderedCssModulesPerChunk.set(
383
+ chunk,
384
+ this.getOrderedChunkCssModules(chunk, chunkGraph, compilation)
385
+ );
386
+ }
387
+ }
388
+ });
389
+ compilation.hooks.chunkHash.tap(
390
+ "CssModulesPlugin",
391
+ (chunk, hash, context) => {
392
+ hooks.chunkHash.call(chunk, hash, context);
393
+ }
394
+ );
395
+ compilation.hooks.contentHash.tap("CssModulesPlugin", chunk => {
396
+ const {
397
+ chunkGraph,
398
+ codeGenerationResults,
399
+ moduleGraph,
400
+ runtimeTemplate,
401
+ outputOptions: {
402
+ hashSalt,
403
+ hashDigest,
404
+ hashDigestLength,
405
+ hashFunction
406
+ }
407
+ } = compilation;
408
+ const hash = createHash(hashFunction);
409
+ if (hashSalt) hash.update(hashSalt);
410
+ hooks.chunkHash.call(chunk, hash, {
411
+ chunkGraph,
412
+ codeGenerationResults,
413
+ moduleGraph,
414
+ runtimeTemplate
415
+ });
416
+ const modules = orderedCssModulesPerChunk.get(chunk);
417
+ if (modules) {
418
+ for (const module of modules) {
419
+ hash.update(chunkGraph.getModuleHash(module, chunk.runtime));
420
+ }
421
+ }
422
+ const digest = /** @type {string} */ (hash.digest(hashDigest));
423
+ chunk.contentHash.css = nonNumericOnlyHash(digest, hashDigestLength);
424
+ });
425
+ compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
426
+ const { chunkGraph } = compilation;
427
+ const { hash, chunk, codeGenerationResults, runtimeTemplate } =
428
+ options;
429
+
430
+ if (chunk instanceof HotUpdateChunk) return result;
431
+
432
+ /** @type {CssModule[] | undefined} */
433
+ const modules = orderedCssModulesPerChunk.get(chunk);
434
+ if (modules !== undefined) {
435
+ const { path: filename, info } = compilation.getPathWithInfo(
436
+ CssModulesPlugin.getChunkFilenameTemplate(
437
+ chunk,
438
+ compilation.outputOptions
439
+ ),
440
+ {
441
+ hash,
442
+ runtime: chunk.runtime,
443
+ chunk,
444
+ contentHashType: "css"
445
+ }
446
+ );
447
+ const undoPath = getUndoPath(
448
+ filename,
449
+ compilation.outputOptions.path,
450
+ false
451
+ );
452
+ result.push({
453
+ render: () =>
454
+ this.renderChunk({
455
+ chunk,
456
+ chunkGraph,
457
+ codeGenerationResults,
458
+ uniqueName: compilation.outputOptions.uniqueName,
459
+ cssHeadDataCompression:
460
+ compilation.outputOptions.cssHeadDataCompression,
461
+ undoPath,
462
+ modules,
463
+ runtimeTemplate,
464
+ hooks
465
+ }),
466
+ filename,
467
+ info,
468
+ identifier: `css${chunk.id}`,
469
+ hash: chunk.contentHash.css
470
+ });
471
+ }
472
+ return result;
473
+ });
474
+ const globalChunkLoading = compilation.outputOptions.chunkLoading;
475
+ /**
476
+ * @param {Chunk} chunk the chunk
477
+ * @returns {boolean} true, when enabled
478
+ */
479
+ const isEnabledForChunk = chunk => {
480
+ const options = chunk.getEntryOptions();
481
+ const chunkLoading =
482
+ options && options.chunkLoading !== undefined
483
+ ? options.chunkLoading
484
+ : globalChunkLoading;
485
+ return chunkLoading === "jsonp" || chunkLoading === "import";
486
+ };
487
+ const onceForChunkSet = new WeakSet();
488
+ /**
489
+ * @param {Chunk} chunk chunk to check
490
+ * @param {Set<string>} set runtime requirements
491
+ */
492
+ const handler = (chunk, set) => {
493
+ if (onceForChunkSet.has(chunk)) return;
494
+ onceForChunkSet.add(chunk);
495
+ if (!isEnabledForChunk(chunk)) return;
496
+
497
+ set.add(RuntimeGlobals.publicPath);
498
+ set.add(RuntimeGlobals.getChunkCssFilename);
499
+ set.add(RuntimeGlobals.hasOwnProperty);
500
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
501
+ set.add(RuntimeGlobals.makeNamespaceObject);
502
+
503
+ const CssLoadingRuntimeModule = getCssLoadingRuntimeModule();
504
+ compilation.addRuntimeModule(chunk, new CssLoadingRuntimeModule(set));
505
+ };
506
+ compilation.hooks.runtimeRequirementInTree
507
+ .for(RuntimeGlobals.hasCssModules)
508
+ .tap(PLUGIN_NAME, handler);
509
+ compilation.hooks.runtimeRequirementInTree
510
+ .for(RuntimeGlobals.ensureChunkHandlers)
511
+ .tap(PLUGIN_NAME, handler);
512
+ compilation.hooks.runtimeRequirementInTree
513
+ .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
514
+ .tap(PLUGIN_NAME, handler);
515
+ }
516
+ );
517
+ }
518
+
519
+ /**
520
+ * @param {Chunk} chunk chunk
521
+ * @param {Iterable<Module>} modules unordered modules
522
+ * @param {Compilation} compilation compilation
523
+ * @returns {Module[]} ordered modules
524
+ */
525
+ getModulesInOrder(chunk, modules, compilation) {
526
+ if (!modules) return [];
527
+
528
+ /** @type {Module[]} */
529
+ const modulesList = [...modules];
530
+
531
+ // Get ordered list of modules per chunk group
532
+ // Lists are in reverse order to allow to use Array.pop()
533
+ const modulesByChunkGroup = Array.from(chunk.groupsIterable, chunkGroup => {
534
+ const sortedModules = modulesList
535
+ .map(module => ({
536
+ module,
537
+ index: chunkGroup.getModulePostOrderIndex(module)
538
+ }))
539
+ .filter(item => item.index !== undefined)
540
+ .sort(
541
+ (a, b) =>
542
+ /** @type {number} */ (b.index) - /** @type {number} */ (a.index)
543
+ )
544
+ .map(item => item.module);
545
+
546
+ return { list: sortedModules, set: new Set(sortedModules) };
547
+ });
548
+
549
+ if (modulesByChunkGroup.length === 1)
550
+ return modulesByChunkGroup[0].list.reverse();
551
+
552
+ const compareModuleLists = ({ list: a }, { list: b }) => {
553
+ if (a.length === 0) {
554
+ return b.length === 0 ? 0 : 1;
555
+ }
556
+ if (b.length === 0) return -1;
557
+ return compareModulesByIdentifier(a[a.length - 1], b[b.length - 1]);
558
+ };
559
+
560
+ modulesByChunkGroup.sort(compareModuleLists);
561
+
562
+ /** @type {Module[]} */
563
+ const finalModules = [];
564
+
565
+ for (;;) {
566
+ const failedModules = new Set();
567
+ const list = modulesByChunkGroup[0].list;
568
+ if (list.length === 0) {
569
+ // done, everything empty
570
+ break;
571
+ }
572
+ /** @type {Module} */
573
+ let selectedModule = list[list.length - 1];
574
+ let hasFailed;
575
+ outer: for (;;) {
576
+ for (const { list, set } of modulesByChunkGroup) {
577
+ if (list.length === 0) continue;
578
+ const lastModule = list[list.length - 1];
579
+ if (lastModule === selectedModule) continue;
580
+ if (!set.has(selectedModule)) continue;
581
+ failedModules.add(selectedModule);
582
+ if (failedModules.has(lastModule)) {
583
+ // There is a conflict, try other alternatives
584
+ hasFailed = lastModule;
585
+ continue;
586
+ }
587
+ selectedModule = lastModule;
588
+ hasFailed = false;
589
+ continue outer; // restart
590
+ }
591
+ break;
592
+ }
593
+ if (hasFailed) {
594
+ // There is a not resolve-able conflict with the selectedModule
595
+ // TODO print better warning
596
+ compilation.warnings.push(
597
+ new WebpackError(
598
+ `chunk ${chunk.name || chunk.id}\nConflicting order between ${
599
+ /** @type {Module} */
600
+ (hasFailed).readableIdentifier(compilation.requestShortener)
601
+ } and ${selectedModule.readableIdentifier(
602
+ compilation.requestShortener
603
+ )}`
604
+ )
605
+ );
606
+ selectedModule = /** @type {Module} */ (hasFailed);
607
+ }
608
+ // Insert the selected module into the final modules list
609
+ finalModules.push(selectedModule);
610
+ // Remove the selected module from all lists
611
+ for (const { list, set } of modulesByChunkGroup) {
612
+ const lastModule = list[list.length - 1];
613
+ if (lastModule === selectedModule) list.pop();
614
+ else if (hasFailed && set.has(selectedModule)) {
615
+ const idx = list.indexOf(selectedModule);
616
+ if (idx >= 0) list.splice(idx, 1);
617
+ }
618
+ }
619
+ modulesByChunkGroup.sort(compareModuleLists);
620
+ }
621
+ return finalModules;
622
+ }
623
+
624
+ /**
625
+ * @param {Chunk} chunk chunk
626
+ * @param {ChunkGraph} chunkGraph chunk graph
627
+ * @param {Compilation} compilation compilation
628
+ * @returns {Module[]} ordered css modules
629
+ */
630
+ getOrderedChunkCssModules(chunk, chunkGraph, compilation) {
631
+ return [
632
+ ...this.getModulesInOrder(
633
+ chunk,
634
+ /** @type {Iterable<Module>} */
635
+ (
636
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
637
+ chunk,
638
+ "css-import",
639
+ compareModulesByIdentifier
640
+ )
641
+ ),
642
+ compilation
643
+ ),
644
+ ...this.getModulesInOrder(
645
+ chunk,
646
+ /** @type {Iterable<Module>} */
647
+ (
648
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
649
+ chunk,
650
+ "css",
651
+ compareModulesByIdentifier
652
+ )
653
+ ),
654
+ compilation
655
+ )
656
+ ];
657
+ }
658
+
659
+ /**
660
+ * @param {object} options options
661
+ * @param {string[]} options.metaData meta data
662
+ * @param {string} options.undoPath undo path for public path auto
663
+ * @param {Chunk} options.chunk chunk
664
+ * @param {ChunkGraph} options.chunkGraph chunk graph
665
+ * @param {CodeGenerationResults} options.codeGenerationResults code generation results
666
+ * @param {CssModule} options.module css module
667
+ * @param {RuntimeTemplate} options.runtimeTemplate runtime template
668
+ * @param {CompilationHooks} options.hooks hooks
669
+ * @returns {Source} css module source
670
+ */
671
+ renderModule({
672
+ metaData,
673
+ undoPath,
674
+ chunk,
675
+ chunkGraph,
676
+ codeGenerationResults,
677
+ module,
678
+ hooks,
679
+ runtimeTemplate
680
+ }) {
681
+ const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
682
+ const moduleSourceContent =
683
+ /** @type {Source} */
684
+ (
685
+ codeGenResult.sources.get("css") ||
686
+ codeGenResult.sources.get("css-import")
687
+ );
688
+
689
+ const cacheEntry = this._moduleCache.get(moduleSourceContent);
690
+
691
+ /** @type {Inheritance} */
692
+ const inheritance = [[module.cssLayer, module.supports, module.media]];
693
+ if (module.inheritance) {
694
+ inheritance.push(...module.inheritance);
695
+ }
696
+
697
+ let source;
698
+ if (
699
+ cacheEntry &&
700
+ cacheEntry.undoPath === undoPath &&
701
+ cacheEntry.inheritance.every(([layer, supports, media], i) => {
702
+ const item = inheritance[i];
703
+ if (Array.isArray(item)) {
704
+ return layer === item[0] && supports === item[1] && media === item[2];
705
+ }
706
+ return false;
707
+ })
708
+ ) {
709
+ source = cacheEntry.source;
710
+ } else {
711
+ const moduleSourceCode = /** @type {string} */ (
712
+ moduleSourceContent.source()
713
+ );
714
+ const publicPathAutoRegex = new RegExp(
715
+ CssUrlDependency.PUBLIC_PATH_AUTO,
716
+ "g"
717
+ );
718
+ /** @type {Source} */
719
+ let moduleSource = new ReplaceSource(moduleSourceContent);
720
+ let match;
721
+ while ((match = publicPathAutoRegex.exec(moduleSourceCode))) {
722
+ /** @type {ReplaceSource} */ (moduleSource).replace(
723
+ match.index,
724
+ (match.index += match[0].length - 1),
725
+ undoPath
726
+ );
727
+ }
728
+
729
+ for (let i = 0; i < inheritance.length; i++) {
730
+ const layer = inheritance[i][0];
731
+ const supports = inheritance[i][1];
732
+ const media = inheritance[i][2];
733
+
734
+ if (media) {
735
+ moduleSource = new ConcatSource(
736
+ `@media ${media} {\n`,
737
+ new PrefixSource("\t", moduleSource),
738
+ "}\n"
739
+ );
740
+ }
741
+
742
+ if (supports) {
743
+ moduleSource = new ConcatSource(
744
+ `@supports (${supports}) {\n`,
745
+ new PrefixSource("\t", moduleSource),
746
+ "}\n"
747
+ );
748
+ }
749
+
750
+ // Layer can be anonymous
751
+ if (layer !== undefined && layer !== null) {
752
+ moduleSource = new ConcatSource(
753
+ `@layer${layer ? ` ${layer}` : ""} {\n`,
754
+ new PrefixSource("\t", moduleSource),
755
+ "}\n"
756
+ );
757
+ }
758
+ }
759
+
760
+ if (moduleSource) {
761
+ moduleSource = new ConcatSource(moduleSource, "\n");
762
+ }
763
+
764
+ source = new CachedSource(moduleSource);
765
+ this._moduleCache.set(moduleSourceContent, {
766
+ inheritance,
767
+ undoPath,
768
+ source
769
+ });
770
+ }
771
+ /** @type {CssExportsData | undefined} */
772
+ const cssExportsData =
773
+ codeGenResult.data && codeGenResult.data.get("css-exports");
774
+ const exports = cssExportsData && cssExportsData.exports;
775
+ const esModule = cssExportsData && cssExportsData.esModule;
776
+ let moduleId = String(chunkGraph.getModuleId(module));
777
+
778
+ // When `optimization.moduleIds` is `named` the module id is a path, so we need to normalize it between platforms
779
+ if (typeof moduleId === "string") {
780
+ moduleId = moduleId.replace(/\\/g, "/");
781
+ }
782
+
783
+ metaData.push(
784
+ `${
785
+ exports
786
+ ? Array.from(
787
+ exports,
788
+ ([n, v]) => `${escapeCss(n)}:${escapeCss(v)}/`
789
+ ).join("")
790
+ : ""
791
+ }${esModule ? "&" : ""}${escapeCss(moduleId)}`
792
+ );
793
+ return tryRunOrWebpackError(
794
+ () =>
795
+ hooks.renderModulePackage.call(source, module, {
796
+ runtimeTemplate
797
+ }),
798
+ "CssModulesPlugin.getCompilationHooks().renderModulePackage"
799
+ );
800
+ }
801
+
802
+ /**
803
+ * @param {object} options options
804
+ * @param {string | undefined} options.uniqueName unique name
805
+ * @param {boolean | undefined} options.cssHeadDataCompression compress css head data
806
+ * @param {string} options.undoPath undo path for public path auto
807
+ * @param {Chunk} options.chunk chunk
808
+ * @param {ChunkGraph} options.chunkGraph chunk graph
809
+ * @param {CodeGenerationResults} options.codeGenerationResults code generation results
810
+ * @param {CssModule[]} options.modules ordered css modules
811
+ * @param {RuntimeTemplate} options.runtimeTemplate runtime template
812
+ * @param {CompilationHooks} options.hooks hooks
813
+ * @returns {Source} generated source
814
+ */
815
+ renderChunk({
816
+ uniqueName,
817
+ cssHeadDataCompression,
818
+ undoPath,
819
+ chunk,
820
+ chunkGraph,
821
+ codeGenerationResults,
822
+ modules,
823
+ runtimeTemplate,
824
+ hooks
825
+ }) {
826
+ const source = new ConcatSource();
827
+ /** @type {string[]} */
828
+ const metaData = [];
829
+ for (const module of modules) {
830
+ try {
831
+ const moduleSource = this.renderModule({
832
+ metaData,
833
+ undoPath,
834
+ chunk,
835
+ chunkGraph,
836
+ codeGenerationResults,
837
+ module,
838
+ runtimeTemplate,
839
+ hooks
840
+ });
841
+ source.add(moduleSource);
842
+ } catch (err) {
843
+ /** @type {Error} */
844
+ (err).message += `\nduring rendering of css ${module.identifier()}`;
845
+ throw err;
846
+ }
847
+ }
848
+ const metaDataStr = metaData.join(",");
849
+ source.add(
850
+ `head{--webpack-${escapeCss(
851
+ (uniqueName ? `${uniqueName}-` : "") + chunk.id,
852
+ true
853
+ )}:${cssHeadDataCompression ? lzwEncode(metaDataStr) : metaDataStr};}`
854
+ );
855
+ chunk.rendered = true;
856
+ return source;
857
+ }
858
+
859
+ /**
860
+ * @param {Chunk} chunk chunk
861
+ * @param {OutputOptions} outputOptions output options
862
+ * @returns {TemplatePath} used filename template
863
+ */
864
+ static getChunkFilenameTemplate(chunk, outputOptions) {
865
+ if (chunk.cssFilenameTemplate) {
866
+ return chunk.cssFilenameTemplate;
867
+ } else if (chunk.canBeInitial()) {
868
+ return /** @type {TemplatePath} */ (outputOptions.cssFilename);
869
+ }
870
+ return /** @type {TemplatePath} */ (outputOptions.cssChunkFilename);
871
+ }
872
+
873
+ /**
874
+ * @param {Chunk} chunk chunk
875
+ * @param {ChunkGraph} chunkGraph chunk graph
876
+ * @returns {boolean} true, when the chunk has css
877
+ */
878
+ static chunkHasCss(chunk, chunkGraph) {
879
+ return (
880
+ Boolean(chunkGraph.getChunkModulesIterableBySourceType(chunk, "css")) ||
881
+ Boolean(
882
+ chunkGraph.getChunkModulesIterableBySourceType(chunk, "css-import")
883
+ )
884
+ );
885
+ }
886
+ }
887
+
888
+ module.exports = CssModulesPlugin;