webpack 5.76.1 → 5.88.2

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -19,6 +19,11 @@ const Template = require("../Template");
19
19
  /** @typedef {import("../NormalModule")} NormalModule */
20
20
  /** @typedef {import("../util/Hash")} Hash */
21
21
 
22
+ /**
23
+ * @template T
24
+ * @typedef {import("../InitFragment")<T>} InitFragment
25
+ */
26
+
22
27
  const TYPES = new Set(["javascript"]);
23
28
 
24
29
  class CssExportsGenerator extends Generator {
@@ -36,6 +41,7 @@ class CssExportsGenerator extends Generator {
36
41
  */
37
42
  generate(module, generateContext) {
38
43
  const source = new ReplaceSource(new RawSource(""));
44
+ /** @type {InitFragment<TODO>[]} */
39
45
  const initFragments = [];
40
46
  const cssExports = new Map();
41
47
 
@@ -57,6 +63,9 @@ class CssExportsGenerator extends Generator {
57
63
  cssExports
58
64
  };
59
65
 
66
+ /**
67
+ * @param {Dependency} dependency the dependency
68
+ */
60
69
  const handleDependency = dependency => {
61
70
  const constructor = /** @type {new (...args: any[]) => Dependency} */ (
62
71
  dependency.constructor
@@ -30,8 +30,9 @@ class CssGenerator extends Generator {
30
30
  * @returns {Source} generated code
31
31
  */
32
32
  generate(module, generateContext) {
33
- const originalSource = module.originalSource();
33
+ const originalSource = /** @type {Source} */ (module.originalSource());
34
34
  const source = new ReplaceSource(originalSource);
35
+ /** @type {InitFragment[]} */
35
36
  const initFragments = [];
36
37
  const cssExports = new Map();
37
38
 
@@ -51,6 +52,9 @@ class CssGenerator extends Generator {
51
52
  cssExports
52
53
  };
53
54
 
55
+ /**
56
+ * @param {Dependency} dependency dependency
57
+ */
54
58
  const handleDependency = dependency => {
55
59
  const constructor = /** @type {new (...args: any[]) => Dependency} */ (
56
60
  dependency.constructor
@@ -14,6 +14,8 @@ const compileBooleanMatcher = require("../util/compileBooleanMatcher");
14
14
  const { chunkHasCss } = require("./CssModulesPlugin");
15
15
 
16
16
  /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
+ /** @typedef {import("../Compilation").RuntimeRequirementsContext} RuntimeRequirementsContext */
17
19
 
18
20
  /**
19
21
  * @typedef {Object} JsonpCompilationPluginHooks
@@ -44,15 +46,17 @@ class CssLoadingRuntimeModule extends RuntimeModule {
44
46
  return hooks;
45
47
  }
46
48
 
47
- constructor(runtimeRequirements, runtimeOptions) {
49
+ /**
50
+ * @param {Set<string>} runtimeRequirements runtime requirements
51
+ */
52
+ constructor(runtimeRequirements) {
48
53
  super("css loading", 10);
49
54
 
50
55
  this._runtimeRequirements = runtimeRequirements;
51
- this.runtimeOptions = runtimeOptions;
52
56
  }
53
57
 
54
58
  /**
55
- * @returns {string} runtime code
59
+ * @returns {string | null} runtime code
56
60
  */
57
61
  generate() {
58
62
  const { compilation, chunk, _runtimeRequirements } = this;
@@ -64,10 +68,15 @@ class CssLoadingRuntimeModule extends RuntimeModule {
64
68
  uniqueName,
65
69
  chunkLoadTimeout: loadTimeout
66
70
  }
67
- } = compilation;
71
+ } = /** @type {Compilation} */ (compilation);
68
72
  const fn = RuntimeGlobals.ensureChunkHandlers;
69
73
  const conditionMap = chunkGraph.getChunkConditionMap(
70
- chunk,
74
+ /** @type {Chunk} */ (chunk),
75
+ /**
76
+ * @param {Chunk} chunk the chunk
77
+ * @param {ChunkGraph} chunkGraph the chunk graph
78
+ * @returns {boolean} true, if the chunk has css
79
+ */
71
80
  (chunk, chunkGraph) =>
72
81
  !!chunkGraph.getChunkModulesIterableBySourceType(chunk, "css")
73
82
  );
@@ -76,12 +85,15 @@ class CssLoadingRuntimeModule extends RuntimeModule {
76
85
  const withLoading =
77
86
  _runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) &&
78
87
  hasCssMatcher !== false;
88
+ /** @type {boolean} */
79
89
  const withHmr = _runtimeRequirements.has(
80
90
  RuntimeGlobals.hmrDownloadUpdateHandlers
81
91
  );
92
+ /** @type {Set<number | string | null>} */
82
93
  const initialChunkIdsWithCss = new Set();
94
+ /** @type {Set<number | string | null>} */
83
95
  const initialChunkIdsWithoutCss = new Set();
84
- for (const c of chunk.getAllInitialChunks()) {
96
+ for (const c of /** @type {Chunk} */ (chunk).getAllInitialChunks()) {
85
97
  (chunkHasCss(c, chunkGraph)
86
98
  ? initialChunkIdsWithCss
87
99
  : initialChunkIdsWithoutCss
@@ -92,8 +104,9 @@ class CssLoadingRuntimeModule extends RuntimeModule {
92
104
  return null;
93
105
  }
94
106
 
95
- const { createStylesheet } =
96
- CssLoadingRuntimeModule.getCompilationHooks(compilation);
107
+ const { createStylesheet } = CssLoadingRuntimeModule.getCompilationHooks(
108
+ /** @type {Compilation} */ (compilation)
109
+ );
97
110
 
98
111
  const stateExpression = withHmr
99
112
  ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_css`
@@ -111,7 +124,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
111
124
  ? crossOriginLoading === "use-credentials"
112
125
  ? 'link.crossOrigin = "use-credentials";'
113
126
  : Template.asString([
114
- "if (link.src.indexOf(window.location.origin + '/') !== 0) {",
127
+ "if (link.href.indexOf(window.location.origin + '/') !== 0) {",
115
128
  Template.indent(
116
129
  `link.crossOrigin = ${JSON.stringify(crossOriginLoading)};`
117
130
  ),
@@ -120,7 +133,16 @@ class CssLoadingRuntimeModule extends RuntimeModule {
120
133
  : ""
121
134
  ]);
122
135
 
136
+ /** @type {(str: string) => number} */
123
137
  const cc = str => str.charCodeAt(0);
138
+ const name = uniqueName
139
+ ? runtimeTemplate.concatenation(
140
+ "--webpack-",
141
+ { expr: "uniqueName" },
142
+ "-",
143
+ { expr: "chunkId" }
144
+ )
145
+ : runtimeTemplate.concatenation("--webpack-", { expr: "chunkId" });
124
146
 
125
147
  return Template.asString([
126
148
  "// object to store loaded and loading chunks",
@@ -143,18 +165,27 @@ class CssLoadingRuntimeModule extends RuntimeModule {
143
165
  [
144
166
  `var data, token = "", token2, exports = {}, exportsWithId = [], exportsWithDashes = [], ${
145
167
  withHmr ? "moduleIds = [], " : ""
146
- }i = 0, cc = 1;`,
147
- "try { if(!link) link = loadStylesheet(chunkId); data = link.sheet.cssRules; data = data[data.length - 1].style; } catch(e) { data = getComputedStyle(document.head); }",
148
- `data = data.getPropertyValue(${
149
- uniqueName
150
- ? runtimeTemplate.concatenation(
151
- "--webpack-",
152
- { expr: "uniqueName" },
153
- "-",
154
- { expr: "chunkId" }
155
- )
156
- : runtimeTemplate.concatenation("--webpack-", { expr: "chunkId" })
157
- });`,
168
+ }name = ${name}, i = 0, cc = 1;`,
169
+ "try {",
170
+ Template.indent([
171
+ "if(!link) link = loadStylesheet(chunkId);",
172
+ // `link.sheet.rules` for legacy browsers
173
+ "var cssRules = link.sheet.cssRules || link.sheet.rules;",
174
+ "var j = cssRules.length - 1;",
175
+ "while(j > -1 && !data) {",
176
+ Template.indent([
177
+ "var style = cssRules[j--].style;",
178
+ "if(!style) continue;",
179
+ `data = style.getPropertyValue(name);`
180
+ ]),
181
+ "}"
182
+ ]),
183
+ "}catch(e){}",
184
+ "if(!data) {",
185
+ Template.indent([
186
+ "data = getComputedStyle(document.head).getPropertyValue(name);"
187
+ ]),
188
+ "}",
158
189
  "if(!data) return [];",
159
190
  "for(; cc; i++) {",
160
191
  Template.indent([
@@ -232,7 +263,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
232
263
  "if(!link) {",
233
264
  Template.indent([
234
265
  "needAttach = true;",
235
- createStylesheet.call(code, this.chunk)
266
+ createStylesheet.call(code, /** @type {Chunk} */ (this.chunk))
236
267
  ]),
237
268
  "}",
238
269
  `var onLinkComplete = ${runtimeTemplate.basicFunction(
@@ -5,10 +5,18 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { ConcatSource } = require("webpack-sources");
8
+ const { ConcatSource, PrefixSource } = require("webpack-sources");
9
+ const CssModule = require("../CssModule");
9
10
  const HotUpdateChunk = require("../HotUpdateChunk");
11
+ const {
12
+ CSS_MODULE_TYPE,
13
+ CSS_MODULE_TYPE_GLOBAL,
14
+ CSS_MODULE_TYPE_MODULE,
15
+ CSS_MODULE_TYPE_AUTO
16
+ } = require("../ModuleTypeConstants");
10
17
  const RuntimeGlobals = require("../RuntimeGlobals");
11
18
  const SelfModuleFactory = require("../SelfModuleFactory");
19
+ const WebpackError = require("../WebpackError");
12
20
  const CssExportDependency = require("../dependencies/CssExportDependency");
13
21
  const CssImportDependency = require("../dependencies/CssImportDependency");
14
22
  const CssLocalIdentifierDependency = require("../dependencies/CssLocalIdentifierDependency");
@@ -26,14 +34,23 @@ const CssParser = require("./CssParser");
26
34
 
27
35
  /** @typedef {import("webpack-sources").Source} Source */
28
36
  /** @typedef {import("../../declarations/WebpackOptions").CssExperimentOptions} CssExperimentOptions */
37
+ /** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
29
38
  /** @typedef {import("../Chunk")} Chunk */
39
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
40
+ /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
41
+ /** @typedef {import("../Compilation")} Compilation */
30
42
  /** @typedef {import("../Compiler")} Compiler */
31
43
  /** @typedef {import("../Module")} Module */
44
+ /** @typedef {import("../util/memoize")} Memoize */
32
45
 
33
46
  const getCssLoadingRuntimeModule = memoize(() =>
34
47
  require("./CssLoadingRuntimeModule")
35
48
  );
36
49
 
50
+ /**
51
+ * @param {string} name name
52
+ * @returns {{oneOf: [{$ref: string}], definitions: *}} schema
53
+ */
37
54
  const getSchema = name => {
38
55
  const { definitions } = require("../../schemas/WebpackOptions.json");
39
56
  return {
@@ -59,6 +76,11 @@ const validateParserOptions = createSchemaValidation(
59
76
  }
60
77
  );
61
78
 
79
+ /**
80
+ * @param {string} str string
81
+ * @param {boolean=} omitOptionalUnderscore if true, optional underscore is not added
82
+ * @returns {string} escaped string
83
+ */
62
84
  const escapeCss = (str, omitOptionalUnderscore) => {
63
85
  const escaped = `${str}`.replace(
64
86
  // cspell:word uffff
@@ -125,53 +147,101 @@ class CssModulesPlugin {
125
147
  StaticExportsDependency,
126
148
  new StaticExportsDependency.Template()
127
149
  );
128
- normalModuleFactory.hooks.createParser
129
- .for("css")
130
- .tap(plugin, parserOptions => {
131
- validateParserOptions(parserOptions);
132
- return new CssParser();
133
- });
134
- normalModuleFactory.hooks.createParser
135
- .for("css/global")
136
- .tap(plugin, parserOptions => {
137
- validateParserOptions(parserOptions);
138
- return new CssParser({
139
- allowPseudoBlocks: false,
140
- allowModeSwitch: false
150
+ for (const type of [
151
+ CSS_MODULE_TYPE,
152
+ CSS_MODULE_TYPE_GLOBAL,
153
+ CSS_MODULE_TYPE_MODULE,
154
+ CSS_MODULE_TYPE_AUTO
155
+ ]) {
156
+ normalModuleFactory.hooks.createParser
157
+ .for(type)
158
+ .tap(plugin, parserOptions => {
159
+ validateParserOptions(parserOptions);
160
+
161
+ switch (type) {
162
+ case CSS_MODULE_TYPE:
163
+ case CSS_MODULE_TYPE_AUTO:
164
+ return new CssParser();
165
+ case CSS_MODULE_TYPE_GLOBAL:
166
+ return new CssParser({
167
+ allowModeSwitch: false
168
+ });
169
+ case CSS_MODULE_TYPE_MODULE:
170
+ return new CssParser({
171
+ defaultMode: "local"
172
+ });
173
+ }
174
+ });
175
+ normalModuleFactory.hooks.createGenerator
176
+ .for(type)
177
+ .tap(plugin, generatorOptions => {
178
+ validateGeneratorOptions(generatorOptions);
179
+ return this._exportsOnly
180
+ ? new CssExportsGenerator()
181
+ : new CssGenerator();
141
182
  });
142
- });
143
- normalModuleFactory.hooks.createParser
144
- .for("css/module")
145
- .tap(plugin, parserOptions => {
146
- validateParserOptions(parserOptions);
147
- return new CssParser({
148
- defaultMode: "local"
183
+ normalModuleFactory.hooks.createModuleClass
184
+ .for(type)
185
+ .tap(plugin, (createData, resolveData) => {
186
+ if (resolveData.dependencies.length > 0) {
187
+ // When CSS is imported from CSS there is only one dependency
188
+ const dependency = resolveData.dependencies[0];
189
+
190
+ if (dependency instanceof CssImportDependency) {
191
+ const parent =
192
+ /** @type {CssModule} */
193
+ (compilation.moduleGraph.getParentModule(dependency));
194
+
195
+ if (parent instanceof CssModule) {
196
+ /** @type {import("../CssModule").Inheritance | undefined} */
197
+ let inheritance;
198
+
199
+ if (
200
+ (parent.cssLayer !== null &&
201
+ parent.cssLayer !== undefined) ||
202
+ parent.supports ||
203
+ parent.media
204
+ ) {
205
+ if (!inheritance) {
206
+ inheritance = [];
207
+ }
208
+
209
+ inheritance.push([
210
+ parent.cssLayer,
211
+ parent.supports,
212
+ parent.media
213
+ ]);
214
+ }
215
+
216
+ if (parent.inheritance) {
217
+ if (!inheritance) {
218
+ inheritance = [];
219
+ }
220
+
221
+ inheritance.push(...parent.inheritance);
222
+ }
223
+
224
+ return new CssModule({
225
+ ...createData,
226
+ cssLayer: dependency.layer,
227
+ supports: dependency.supports,
228
+ media: dependency.media,
229
+ inheritance
230
+ });
231
+ }
232
+
233
+ return new CssModule({
234
+ ...createData,
235
+ cssLayer: dependency.layer,
236
+ supports: dependency.supports,
237
+ media: dependency.media
238
+ });
239
+ }
240
+ }
241
+
242
+ return new CssModule(createData);
149
243
  });
150
- });
151
- normalModuleFactory.hooks.createGenerator
152
- .for("css")
153
- .tap(plugin, generatorOptions => {
154
- validateGeneratorOptions(generatorOptions);
155
- return this._exportsOnly
156
- ? new CssExportsGenerator()
157
- : new CssGenerator();
158
- });
159
- normalModuleFactory.hooks.createGenerator
160
- .for("css/global")
161
- .tap(plugin, generatorOptions => {
162
- validateGeneratorOptions(generatorOptions);
163
- return this._exportsOnly
164
- ? new CssExportsGenerator()
165
- : new CssGenerator();
166
- });
167
- normalModuleFactory.hooks.createGenerator
168
- .for("css/module")
169
- .tap(plugin, generatorOptions => {
170
- validateGeneratorOptions(generatorOptions);
171
- return this._exportsOnly
172
- ? new CssExportsGenerator()
173
- : new CssGenerator();
174
- });
244
+ }
175
245
  const orderedCssModulesPerChunk = new WeakMap();
176
246
  compilation.hooks.afterCodeGeneration.tap("CssModulesPlugin", () => {
177
247
  const { chunkGraph } = compilation;
@@ -210,6 +280,7 @@ class CssModulesPlugin {
210
280
 
211
281
  if (chunk instanceof HotUpdateChunk) return result;
212
282
 
283
+ /** @type {CssModule[] | undefined} */
213
284
  const modules = orderedCssModulesPerChunk.get(chunk);
214
285
  if (modules !== undefined) {
215
286
  result.push({
@@ -237,12 +308,28 @@ class CssModulesPlugin {
237
308
  }
238
309
  return result;
239
310
  });
240
- const enabledChunks = new WeakSet();
311
+ const globalChunkLoading = compilation.outputOptions.chunkLoading;
312
+ /**
313
+ * @param {Chunk} chunk the chunk
314
+ * @returns {boolean} true, when enabled
315
+ */
316
+ const isEnabledForChunk = chunk => {
317
+ const options = chunk.getEntryOptions();
318
+ const chunkLoading =
319
+ options && options.chunkLoading !== undefined
320
+ ? options.chunkLoading
321
+ : globalChunkLoading;
322
+ return chunkLoading === "jsonp";
323
+ };
324
+ const onceForChunkSet = new WeakSet();
325
+ /**
326
+ * @param {Chunk} chunk chunk to check
327
+ * @param {Set<string>} set runtime requirements
328
+ */
241
329
  const handler = (chunk, set) => {
242
- if (enabledChunks.has(chunk)) {
243
- return;
244
- }
245
- enabledChunks.add(chunk);
330
+ if (onceForChunkSet.has(chunk)) return;
331
+ onceForChunkSet.add(chunk);
332
+ if (!isEnabledForChunk(chunk)) return;
246
333
 
247
334
  set.add(RuntimeGlobals.publicPath);
248
335
  set.add(RuntimeGlobals.getChunkCssFilename);
@@ -266,9 +353,16 @@ class CssModulesPlugin {
266
353
  );
267
354
  }
268
355
 
356
+ /**
357
+ * @param {Chunk} chunk chunk
358
+ * @param {Iterable<Module>} modules unordered modules
359
+ * @param {Compilation} compilation compilation
360
+ * @returns {Module[]} ordered modules
361
+ */
269
362
  getModulesInOrder(chunk, modules, compilation) {
270
363
  if (!modules) return [];
271
364
 
365
+ /** @type {Module[]} */
272
366
  const modulesList = [...modules];
273
367
 
274
368
  // Get ordered list of modules per chunk group
@@ -282,7 +376,10 @@ class CssModulesPlugin {
282
376
  };
283
377
  })
284
378
  .filter(item => item.index !== undefined)
285
- .sort((a, b) => b.index - a.index)
379
+ .sort(
380
+ (a, b) =>
381
+ /** @type {number} */ (b.index) - /** @type {number} */ (a.index)
382
+ )
286
383
  .map(item => item.module);
287
384
 
288
385
  return { list: sortedModules, set: new Set(sortedModules) };
@@ -302,6 +399,7 @@ class CssModulesPlugin {
302
399
 
303
400
  modulesByChunkGroup.sort(compareModuleLists);
304
401
 
402
+ /** @type {Module[]} */
305
403
  const finalModules = [];
306
404
 
307
405
  for (;;) {
@@ -311,6 +409,7 @@ class CssModulesPlugin {
311
409
  // done, everything empty
312
410
  break;
313
411
  }
412
+ /** @type {Module} */
314
413
  let selectedModule = list[list.length - 1];
315
414
  let hasFailed = undefined;
316
415
  outer: for (;;) {
@@ -336,18 +435,17 @@ class CssModulesPlugin {
336
435
  if (compilation) {
337
436
  // TODO print better warning
338
437
  compilation.warnings.push(
339
- new Error(
340
- `chunk ${
341
- chunk.name || chunk.id
342
- }\nConflicting order between ${hasFailed.readableIdentifier(
343
- compilation.requestShortener
344
- )} and ${selectedModule.readableIdentifier(
438
+ new WebpackError(
439
+ `chunk ${chunk.name || chunk.id}\nConflicting order between ${
440
+ /** @type {Module} */
441
+ (hasFailed).readableIdentifier(compilation.requestShortener)
442
+ } and ${selectedModule.readableIdentifier(
345
443
  compilation.requestShortener
346
444
  )}`
347
445
  )
348
446
  );
349
447
  }
350
- selectedModule = hasFailed;
448
+ selectedModule = /** @type {Module} */ (hasFailed);
351
449
  }
352
450
  // Insert the selected module into the final modules list
353
451
  finalModules.push(selectedModule);
@@ -365,29 +463,50 @@ class CssModulesPlugin {
365
463
  return finalModules;
366
464
  }
367
465
 
466
+ /**
467
+ * @param {Chunk} chunk chunk
468
+ * @param {ChunkGraph} chunkGraph chunk graph
469
+ * @param {Compilation} compilation compilation
470
+ * @returns {Module[]} ordered css modules
471
+ */
368
472
  getOrderedChunkCssModules(chunk, chunkGraph, compilation) {
369
473
  return [
370
474
  ...this.getModulesInOrder(
371
475
  chunk,
372
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
373
- chunk,
374
- "css-import",
375
- compareModulesByIdentifier
476
+ /** @type {Iterable<Module>} */
477
+ (
478
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
479
+ chunk,
480
+ "css-import",
481
+ compareModulesByIdentifier
482
+ )
376
483
  ),
377
484
  compilation
378
485
  ),
379
486
  ...this.getModulesInOrder(
380
487
  chunk,
381
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
382
- chunk,
383
- "css",
384
- compareModulesByIdentifier
488
+ /** @type {Iterable<Module>} */
489
+ (
490
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
491
+ chunk,
492
+ "css",
493
+ compareModulesByIdentifier
494
+ )
385
495
  ),
386
496
  compilation
387
497
  )
388
498
  ];
389
499
  }
390
500
 
501
+ /**
502
+ * @param {Object} options options
503
+ * @param {string | undefined} options.uniqueName unique name
504
+ * @param {Chunk} options.chunk chunk
505
+ * @param {ChunkGraph} options.chunkGraph chunk graph
506
+ * @param {CodeGenerationResults} options.codeGenerationResults code generation results
507
+ * @param {CssModule[]} options.modules ordered css modules
508
+ * @returns {Source} generated source
509
+ */
391
510
  renderChunk({
392
511
  uniqueName,
393
512
  chunk,
@@ -396,21 +515,70 @@ class CssModulesPlugin {
396
515
  modules
397
516
  }) {
398
517
  const source = new ConcatSource();
518
+ /** @type {string[]} */
399
519
  const metaData = [];
400
520
  for (const module of modules) {
401
521
  try {
402
522
  const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
403
523
 
404
- const s =
405
- codeGenResult.sources.get("css") ||
406
- codeGenResult.sources.get("css-import");
407
- if (s) {
408
- source.add(s);
524
+ let moduleSource =
525
+ /** @type {Source} */
526
+ (
527
+ codeGenResult.sources.get("css") ||
528
+ codeGenResult.sources.get("css-import")
529
+ );
530
+
531
+ let inheritance = [[module.cssLayer, module.supports, module.media]];
532
+
533
+ if (module.inheritance) {
534
+ inheritance.push(...module.inheritance);
535
+ }
536
+
537
+ for (let i = 0; i < inheritance.length; i++) {
538
+ const layer = inheritance[i][0];
539
+ const supports = inheritance[i][1];
540
+ const media = inheritance[i][2];
541
+
542
+ if (media) {
543
+ moduleSource = new ConcatSource(
544
+ `@media ${media} {\n`,
545
+ new PrefixSource("\t", moduleSource),
546
+ "}\n"
547
+ );
548
+ }
549
+
550
+ if (supports) {
551
+ moduleSource = new ConcatSource(
552
+ `@supports (${supports}) {\n`,
553
+ new PrefixSource("\t", moduleSource),
554
+ "}\n"
555
+ );
556
+ }
557
+
558
+ // Layer can be anonymous
559
+ if (layer !== undefined && layer !== null) {
560
+ moduleSource = new ConcatSource(
561
+ `@layer${layer ? ` ${layer}` : ""} {\n`,
562
+ new PrefixSource("\t", moduleSource),
563
+ "}\n"
564
+ );
565
+ }
566
+ }
567
+
568
+ if (moduleSource) {
569
+ source.add(moduleSource);
409
570
  source.add("\n");
410
571
  }
572
+ /** @type {Map<string, string> | undefined} */
411
573
  const exports =
412
574
  codeGenResult.data && codeGenResult.data.get("css-exports");
413
- const moduleId = chunkGraph.getModuleId(module) + "";
575
+ let moduleId = chunkGraph.getModuleId(module) + "";
576
+
577
+ // When `optimization.moduleIds` is `named` the module id is a path, so we need to normalize it between platforms
578
+ if (typeof moduleId === "string") {
579
+ moduleId = moduleId.replace(/\\/g, "/");
580
+ }
581
+
414
582
  metaData.push(
415
583
  `${
416
584
  exports
@@ -428,7 +596,8 @@ class CssModulesPlugin {
428
596
  }${escapeCss(moduleId)}`
429
597
  );
430
598
  } catch (e) {
431
- e.message += `\nduring rendering of css ${module.identifier()}`;
599
+ /** @type {Error} */
600
+ (e).message += `\nduring rendering of css ${module.identifier()}`;
432
601
  throw e;
433
602
  }
434
603
  }
@@ -441,6 +610,11 @@ class CssModulesPlugin {
441
610
  return source;
442
611
  }
443
612
 
613
+ /**
614
+ * @param {Chunk} chunk chunk
615
+ * @param {OutputOptions} outputOptions output options
616
+ * @returns {Chunk["cssFilenameTemplate"] | OutputOptions["cssFilename"] | OutputOptions["cssChunkFilename"]} used filename template
617
+ */
444
618
  static getChunkFilenameTemplate(chunk, outputOptions) {
445
619
  if (chunk.cssFilenameTemplate) {
446
620
  return chunk.cssFilenameTemplate;
@@ -451,6 +625,11 @@ class CssModulesPlugin {
451
625
  }
452
626
  }
453
627
 
628
+ /**
629
+ * @param {Chunk} chunk chunk
630
+ * @param {ChunkGraph} chunkGraph chunk graph
631
+ * @returns {boolean} true, when the chunk has css
632
+ */
454
633
  static chunkHasCss(chunk, chunkGraph) {
455
634
  return (
456
635
  !!chunkGraph.getChunkModulesIterableBySourceType(chunk, "css") ||