webpack 5.106.1 → 5.107.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 (600) hide show
  1. package/README.md +2 -2
  2. package/lib/APIPlugin.js +4 -2
  3. package/lib/AsyncDependenciesBlock.js +3 -0
  4. package/lib/AutomaticPrefetchPlugin.js +6 -1
  5. package/lib/BannerPlugin.js +10 -1
  6. package/lib/Cache.js +27 -5
  7. package/lib/CacheFacade.js +26 -0
  8. package/lib/Chunk.js +46 -0
  9. package/lib/ChunkGraph.js +111 -0
  10. package/lib/ChunkGroup.js +57 -13
  11. package/lib/ChunkTemplate.js +9 -0
  12. package/lib/CleanPlugin.js +14 -1
  13. package/lib/CodeGenerationResults.js +19 -0
  14. package/lib/CompatibilityPlugin.js +23 -8
  15. package/lib/Compilation.js +161 -27
  16. package/lib/Compiler.js +41 -17
  17. package/lib/ConcatenationScope.js +24 -1
  18. package/lib/ConditionalInitFragment.js +6 -0
  19. package/lib/ConstPlugin.js +4 -1
  20. package/lib/ContextExclusionPlugin.js +2 -1
  21. package/lib/ContextModule.js +14 -2
  22. package/lib/ContextModuleFactory.js +10 -0
  23. package/lib/ContextReplacementPlugin.js +4 -1
  24. package/lib/DefinePlugin.js +22 -9
  25. package/lib/DependenciesBlock.js +6 -1
  26. package/lib/Dependency.js +48 -4
  27. package/lib/DependencyTemplate.js +7 -1
  28. package/lib/DependencyTemplates.js +4 -0
  29. package/lib/DotenvPlugin.js +3 -0
  30. package/lib/DynamicEntryPlugin.js +3 -1
  31. package/lib/EntryOptionPlugin.js +3 -0
  32. package/lib/EntryPlugin.js +2 -1
  33. package/lib/Entrypoint.js +4 -0
  34. package/lib/EnvironmentPlugin.js +3 -2
  35. package/lib/ErrorHelpers.js +7 -0
  36. package/lib/EvalDevToolModulePlugin.js +3 -1
  37. package/lib/EvalSourceMapDevToolPlugin.js +11 -10
  38. package/lib/ExportsInfo.js +56 -2
  39. package/lib/ExportsInfoApiPlugin.js +2 -1
  40. package/lib/ExternalModule.js +114 -15
  41. package/lib/ExternalModuleFactoryPlugin.js +15 -0
  42. package/lib/ExternalsPlugin.js +2 -1
  43. package/lib/FileSystemInfo.js +291 -71
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
  45. package/lib/FlagDependencyExportsPlugin.js +4 -1
  46. package/lib/FlagDependencyUsagePlugin.js +5 -1
  47. package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
  48. package/lib/Generator.js +16 -3
  49. package/lib/HotModuleReplacementPlugin.js +35 -9
  50. package/lib/IgnorePlugin.js +4 -2
  51. package/lib/IgnoreWarningsPlugin.js +2 -1
  52. package/lib/InitFragment.js +10 -0
  53. package/lib/JavascriptMetaInfoPlugin.js +2 -1
  54. package/lib/LibraryTemplatePlugin.js +2 -1
  55. package/lib/LoaderOptionsPlugin.js +3 -1
  56. package/lib/LoaderTargetPlugin.js +2 -1
  57. package/lib/MainTemplate.js +15 -0
  58. package/lib/ManifestPlugin.js +9 -2
  59. package/lib/Module.js +101 -19
  60. package/lib/ModuleFactory.js +6 -1
  61. package/lib/ModuleFilenameHelpers.js +3 -0
  62. package/lib/ModuleGraph.js +66 -0
  63. package/lib/ModuleGraphConnection.js +9 -0
  64. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  65. package/lib/ModuleSourceTypeConstants.js +32 -1
  66. package/lib/ModuleTemplate.js +8 -0
  67. package/lib/ModuleTypeConstants.js +12 -3
  68. package/lib/MultiCompiler.js +30 -2
  69. package/lib/MultiStats.js +8 -0
  70. package/lib/MultiWatching.js +3 -0
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +11 -2
  73. package/lib/NormalModule.js +43 -33
  74. package/lib/NormalModuleFactory.js +35 -2
  75. package/lib/NormalModuleReplacementPlugin.js +1 -1
  76. package/lib/NullFactory.js +1 -0
  77. package/lib/OptionsApply.js +1 -0
  78. package/lib/Parser.js +3 -1
  79. package/lib/PlatformPlugin.js +2 -1
  80. package/lib/PrefetchPlugin.js +2 -1
  81. package/lib/ProgressPlugin.js +158 -68
  82. package/lib/ProvidePlugin.js +3 -1
  83. package/lib/RawModule.js +12 -0
  84. package/lib/RecordIdsPlugin.js +8 -0
  85. package/lib/RequestShortener.js +8 -0
  86. package/lib/ResolverFactory.js +5 -0
  87. package/lib/RuntimeGlobals.js +6 -5
  88. package/lib/RuntimeModule.js +22 -7
  89. package/lib/RuntimePlugin.js +13 -0
  90. package/lib/RuntimeTemplate.js +35 -1
  91. package/lib/SelfModuleFactory.js +2 -0
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  93. package/lib/SourceMapDevToolPlugin.js +3 -1
  94. package/lib/Stats.js +5 -0
  95. package/lib/Template.js +20 -0
  96. package/lib/TemplatedPathPlugin.js +10 -3
  97. package/lib/UseStrictPlugin.js +2 -1
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
  99. package/lib/WarnDeprecatedOptionPlugin.js +2 -2
  100. package/lib/WarnNoModeSetPlugin.js +17 -2
  101. package/lib/WatchIgnorePlugin.js +4 -1
  102. package/lib/Watching.js +16 -3
  103. package/lib/WebpackError.js +3 -74
  104. package/lib/WebpackIsIncludedPlugin.js +3 -1
  105. package/lib/WebpackOptionsApply.js +14 -1
  106. package/lib/WebpackOptionsDefaulter.js +1 -0
  107. package/lib/asset/AssetBytesGenerator.js +12 -2
  108. package/lib/asset/AssetBytesParser.js +1 -0
  109. package/lib/asset/AssetGenerator.js +42 -10
  110. package/lib/asset/AssetModulesPlugin.js +7 -2
  111. package/lib/asset/AssetParser.js +2 -0
  112. package/lib/asset/AssetSourceGenerator.js +12 -2
  113. package/lib/asset/AssetSourceParser.js +1 -0
  114. package/lib/asset/RawDataUrlModule.js +11 -0
  115. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  118. package/lib/buildChunkGraph.js +19 -6
  119. package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
  120. package/lib/cache/AddManagedPathsPlugin.js +2 -1
  121. package/lib/cache/IdleFileCachePlugin.js +2 -1
  122. package/lib/cache/MemoryCachePlugin.js +1 -1
  123. package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
  124. package/lib/cache/PackFileCacheStrategy.js +33 -4
  125. package/lib/cache/ResolverCachePlugin.js +10 -1
  126. package/lib/cache/getLazyHashedEtag.js +4 -0
  127. package/lib/cache/mergeEtags.js +2 -0
  128. package/lib/cli.js +33 -1
  129. package/lib/config/browserslistTargetHandler.js +2 -0
  130. package/lib/config/defaults.js +232 -12
  131. package/lib/config/normalization.js +15 -1
  132. package/lib/config/target.js +11 -0
  133. package/lib/container/ContainerEntryDependency.js +2 -0
  134. package/lib/container/ContainerEntryModule.js +12 -0
  135. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  136. package/lib/container/ContainerExposedDependency.js +4 -0
  137. package/lib/container/ContainerPlugin.js +2 -1
  138. package/lib/container/ContainerReferencePlugin.js +2 -1
  139. package/lib/container/FallbackDependency.js +4 -0
  140. package/lib/container/FallbackItemDependency.js +1 -0
  141. package/lib/container/FallbackModule.js +12 -0
  142. package/lib/container/FallbackModuleFactory.js +1 -0
  143. package/lib/container/ModuleFederationPlugin.js +3 -1
  144. package/lib/container/RemoteModule.js +13 -0
  145. package/lib/container/RemoteRuntimeModule.js +1 -0
  146. package/lib/container/RemoteToExternalDependency.js +1 -0
  147. package/lib/container/options.js +7 -0
  148. package/lib/css/CssGenerator.js +336 -100
  149. package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
  150. package/lib/css/CssLoadingRuntimeModule.js +23 -4
  151. package/lib/{CssModule.js → css/CssModule.js} +21 -15
  152. package/lib/css/CssModulesPlugin.js +235 -89
  153. package/lib/css/CssParser.js +616 -261
  154. package/lib/css/walkCssTokens.js +179 -2
  155. package/lib/debug/ProfilingPlugin.js +19 -1
  156. package/lib/dependencies/AMDDefineDependency.js +7 -0
  157. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
  158. package/lib/dependencies/AMDPlugin.js +4 -1
  159. package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
  160. package/lib/dependencies/AMDRequireContextDependency.js +3 -0
  161. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  162. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
  163. package/lib/dependencies/AMDRequireDependency.js +4 -0
  164. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  165. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  166. package/lib/dependencies/CachedConstDependency.js +6 -1
  167. package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
  168. package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
  169. package/lib/dependencies/CommonJsExportsDependency.js +4 -0
  170. package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
  171. package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
  172. package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
  173. package/lib/dependencies/CommonJsPlugin.js +4 -1
  174. package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
  175. package/lib/dependencies/CommonJsRequireDependency.js +70 -4
  176. package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
  177. package/lib/dependencies/ConstDependency.js +6 -1
  178. package/lib/dependencies/ContextDependency.js +9 -2
  179. package/lib/dependencies/ContextDependencyHelpers.js +4 -1
  180. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  181. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  182. package/lib/dependencies/ContextElementDependency.js +4 -0
  183. package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
  184. package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
  185. package/lib/dependencies/CriticalDependencyWarning.js +2 -1
  186. package/lib/dependencies/CssIcssExportDependency.js +339 -66
  187. package/lib/dependencies/CssIcssImportDependency.js +53 -8
  188. package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
  189. package/lib/dependencies/CssImportDependency.js +12 -0
  190. package/lib/dependencies/CssUrlDependency.js +32 -0
  191. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  192. package/lib/dependencies/DllEntryDependency.js +3 -0
  193. package/lib/dependencies/DynamicExports.js +5 -0
  194. package/lib/dependencies/EntryDependency.js +1 -0
  195. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  196. package/lib/dependencies/ExternalModuleDependency.js +5 -0
  197. package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
  198. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
  199. package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
  200. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  201. package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
  202. package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
  203. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
  204. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  205. package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
  206. package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
  207. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
  208. package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
  209. package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
  210. package/lib/dependencies/HarmonyExports.js +2 -0
  211. package/lib/dependencies/HarmonyImportDependency.js +21 -2
  212. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
  213. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
  214. package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
  215. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
  216. package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
  217. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
  218. package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
  219. package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
  220. package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
  221. package/lib/dependencies/HtmlSourceDependency.js +127 -0
  222. package/lib/dependencies/ImportContextDependency.js +4 -0
  223. package/lib/dependencies/ImportDependency.js +5 -0
  224. package/lib/dependencies/ImportEagerDependency.js +2 -0
  225. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  226. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
  227. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  228. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  229. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  230. package/lib/dependencies/ImportMetaPlugin.js +6 -0
  231. package/lib/dependencies/ImportParserPlugin.js +9 -2
  232. package/lib/dependencies/ImportPhase.js +7 -3
  233. package/lib/dependencies/ImportPlugin.js +2 -1
  234. package/lib/dependencies/ImportWeakDependency.js +2 -0
  235. package/lib/dependencies/JsonExportsDependency.js +6 -1
  236. package/lib/dependencies/LoaderDependency.js +2 -0
  237. package/lib/dependencies/LoaderImportDependency.js +2 -0
  238. package/lib/dependencies/LoaderPlugin.js +4 -1
  239. package/lib/dependencies/LocalModule.js +4 -0
  240. package/lib/dependencies/LocalModuleDependency.js +4 -0
  241. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  242. package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
  243. package/lib/dependencies/ModuleDependency.js +7 -0
  244. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  245. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  246. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  247. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  248. package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
  249. package/lib/dependencies/NullDependency.js +2 -0
  250. package/lib/dependencies/PrefetchDependency.js +1 -0
  251. package/lib/dependencies/ProvidedDependency.js +6 -1
  252. package/lib/dependencies/PureExpressionDependency.js +7 -1
  253. package/lib/dependencies/RequireContextDependency.js +1 -0
  254. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
  255. package/lib/dependencies/RequireContextPlugin.js +2 -1
  256. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  257. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
  258. package/lib/dependencies/RequireEnsureDependency.js +4 -0
  259. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  260. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  261. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  262. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  263. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
  264. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  265. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  266. package/lib/dependencies/RequireResolveContextDependency.js +3 -0
  267. package/lib/dependencies/RequireResolveDependency.js +1 -0
  268. package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
  269. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
  270. package/lib/dependencies/StaticExportsDependency.js +3 -0
  271. package/lib/dependencies/SystemPlugin.js +5 -2
  272. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  273. package/lib/dependencies/URLContextDependency.js +3 -0
  274. package/lib/dependencies/URLDependency.js +6 -0
  275. package/lib/dependencies/URLPlugin.js +2 -0
  276. package/lib/dependencies/UnsupportedDependency.js +4 -0
  277. package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
  278. package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
  279. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
  280. package/lib/dependencies/WorkerDependency.js +6 -1
  281. package/lib/dependencies/WorkerPlugin.js +11 -3
  282. package/lib/dependencies/getFunctionExpression.js +1 -0
  283. package/lib/dependencies/processExportInfo.js +1 -0
  284. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
  285. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
  286. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
  287. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
  288. package/lib/{DllModule.js → dll/DllModule.js} +35 -24
  289. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  290. package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
  291. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
  292. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
  293. package/lib/electron/ElectronTargetPlugin.js +2 -1
  294. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  295. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  296. package/lib/errors/BuildCycleError.js +1 -1
  297. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  298. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  299. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  300. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
  301. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
  302. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
  303. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
  304. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
  305. package/lib/errors/JSONParseError.js +114 -0
  306. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
  307. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
  308. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
  309. package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
  310. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
  311. package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
  312. package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
  313. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
  314. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
  315. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
  316. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
  317. package/lib/errors/NonErrorEmittedError.js +28 -0
  318. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
  319. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  320. package/lib/errors/WebpackError.js +84 -0
  321. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  322. package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
  323. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
  324. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  326. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  327. package/lib/hmr/LazyCompilationPlugin.js +20 -1
  328. package/lib/hmr/lazyCompilationBackend.js +2 -0
  329. package/lib/html/HtmlGenerator.js +379 -0
  330. package/lib/html/HtmlModulesPlugin.js +433 -0
  331. package/lib/html/HtmlParser.js +1489 -0
  332. package/lib/html/walkHtmlTokens.js +2733 -0
  333. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  334. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  335. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  336. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  337. package/lib/ids/IdHelpers.js +22 -1
  338. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  339. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  340. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  341. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  342. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  343. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  344. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  345. package/lib/index.js +39 -15
  346. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
  347. package/lib/javascript/BasicEvaluatedExpression.js +4 -2
  348. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  349. package/lib/javascript/ChunkHelpers.js +1 -0
  350. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  351. package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
  352. package/lib/javascript/JavascriptGenerator.js +10 -0
  353. package/lib/javascript/JavascriptModulesPlugin.js +112 -9
  354. package/lib/javascript/JavascriptParser.js +360 -16
  355. package/lib/javascript/JavascriptParserHelpers.js +7 -1
  356. package/lib/javascript/StartupHelpers.js +5 -0
  357. package/lib/json/JsonData.js +5 -0
  358. package/lib/json/JsonGenerator.js +21 -0
  359. package/lib/json/JsonModulesPlugin.js +1 -1
  360. package/lib/json/JsonParser.js +14 -25
  361. package/lib/library/AbstractLibraryPlugin.js +17 -2
  362. package/lib/library/AmdLibraryPlugin.js +8 -0
  363. package/lib/library/AssignLibraryPlugin.js +16 -0
  364. package/lib/library/EnableLibraryPlugin.js +8 -2
  365. package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
  366. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
  367. package/lib/library/JsonpLibraryPlugin.js +8 -0
  368. package/lib/library/ModuleLibraryPlugin.js +86 -1
  369. package/lib/library/SystemLibraryPlugin.js +8 -0
  370. package/lib/library/UmdLibraryPlugin.js +16 -0
  371. package/lib/logging/Logger.js +17 -0
  372. package/lib/logging/createConsoleLogger.js +7 -0
  373. package/lib/logging/runtime.js +2 -0
  374. package/lib/logging/truncateArgs.js +2 -0
  375. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  376. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  377. package/lib/node/NodeSourcePlugin.js +1 -1
  378. package/lib/node/NodeTargetPlugin.js +2 -1
  379. package/lib/node/NodeTemplatePlugin.js +3 -1
  380. package/lib/node/NodeWatchFileSystem.js +2 -0
  381. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
  382. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
  383. package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
  384. package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
  385. package/lib/node/nodeConsole.js +116 -64
  386. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  387. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  388. package/lib/optimize/ConcatenatedModule.js +62 -6
  389. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  390. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
  391. package/lib/optimize/InnerGraph.js +16 -1
  392. package/lib/optimize/InnerGraphPlugin.js +14 -2
  393. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  394. package/lib/optimize/MangleExportsPlugin.js +5 -1
  395. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  396. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  397. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  398. package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
  399. package/lib/optimize/RealContentHashPlugin.js +104 -26
  400. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  401. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  402. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  403. package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
  404. package/lib/optimize/SplitChunksPlugin.js +50 -2
  405. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  406. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  407. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  408. package/lib/performance/SizeLimitsPlugin.js +8 -2
  409. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  410. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
  411. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  412. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  413. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
  414. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  415. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  416. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  417. package/lib/rules/RuleSetCompiler.js +18 -0
  418. package/lib/rules/UseEffectRulePlugin.js +10 -3
  419. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
  420. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
  421. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  422. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  423. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
  424. package/lib/runtime/CompatRuntimeModule.js +2 -0
  425. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
  426. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  427. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  428. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
  429. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  430. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
  431. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  432. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  433. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
  434. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  435. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
  436. package/lib/runtime/HelperRuntimeModule.js +5 -0
  437. package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
  438. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
  439. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
  440. package/lib/runtime/NonceRuntimeModule.js +1 -0
  441. package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
  442. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  443. package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
  444. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  445. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
  446. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  447. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
  448. package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
  449. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  450. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  451. package/lib/schemes/DataUriPlugin.js +14 -2
  452. package/lib/schemes/FileUriPlugin.js +1 -1
  453. package/lib/schemes/HttpUriPlugin.js +43 -1
  454. package/lib/schemes/VirtualUrlPlugin.js +7 -2
  455. package/lib/serialization/AggregateErrorSerializer.js +2 -0
  456. package/lib/serialization/ArraySerializer.js +2 -0
  457. package/lib/serialization/BinaryMiddleware.js +20 -1
  458. package/lib/serialization/DateObjectSerializer.js +2 -0
  459. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  460. package/lib/serialization/FileMiddleware.js +21 -0
  461. package/lib/serialization/MapObjectSerializer.js +2 -0
  462. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
  463. package/lib/serialization/ObjectMiddleware.js +23 -0
  464. package/lib/serialization/PlainObjectSerializer.js +7 -0
  465. package/lib/serialization/RegExpObjectSerializer.js +2 -0
  466. package/lib/serialization/Serializer.js +5 -0
  467. package/lib/serialization/SerializerMiddleware.js +14 -2
  468. package/lib/serialization/SetObjectSerializer.js +2 -0
  469. package/lib/serialization/SingleItemMiddleware.js +3 -0
  470. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  471. package/lib/sharing/ConsumeSharedModule.js +15 -0
  472. package/lib/sharing/ConsumeSharedPlugin.js +8 -3
  473. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
  474. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  475. package/lib/sharing/ProvideSharedDependency.js +4 -0
  476. package/lib/sharing/ProvideSharedModule.js +12 -1
  477. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  478. package/lib/sharing/ProvideSharedPlugin.js +5 -2
  479. package/lib/sharing/SharePlugin.js +2 -1
  480. package/lib/sharing/ShareRuntimeModule.js +1 -0
  481. package/lib/sharing/resolveMatchedConfigs.js +4 -1
  482. package/lib/sharing/utils.js +8 -0
  483. package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
  484. package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
  485. package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
  486. package/lib/stats/StatsFactory.js +13 -1
  487. package/lib/stats/StatsPrinter.js +7 -0
  488. package/lib/typescript/TypeScriptPlugin.js +210 -0
  489. package/lib/url/URLParserPlugin.js +8 -2
  490. package/lib/util/AppendOnlyStackedSet.js +15 -0
  491. package/lib/util/ArrayHelpers.js +1 -0
  492. package/lib/util/ArrayQueue.js +10 -5
  493. package/lib/util/AsyncQueue.js +22 -2
  494. package/lib/util/Hash.js +2 -2
  495. package/lib/util/IterableHelpers.js +3 -0
  496. package/lib/util/LazyBucketSortedSet.js +21 -0
  497. package/lib/util/LazySet.js +39 -0
  498. package/lib/util/LocConverter.js +53 -0
  499. package/lib/util/ParallelismFactorCalculator.js +1 -0
  500. package/lib/util/Queue.js +6 -3
  501. package/lib/util/Semaphore.js +14 -1
  502. package/lib/util/SetHelpers.js +3 -0
  503. package/lib/util/SortableSet.js +7 -1
  504. package/lib/util/StackedCacheMap.js +20 -3
  505. package/lib/util/StackedMap.js +45 -0
  506. package/lib/util/StringXor.js +1 -1
  507. package/lib/util/TupleQueue.js +7 -3
  508. package/lib/util/TupleSet.js +13 -0
  509. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  510. package/lib/util/WeakTupleMap.js +33 -0
  511. package/lib/util/binarySearchBounds.js +1 -0
  512. package/lib/util/cleverMerge.js +19 -2
  513. package/lib/util/comparators.js +34 -3
  514. package/lib/util/compileBooleanMatcher.js +9 -0
  515. package/lib/util/concatenate.js +9 -3
  516. package/lib/util/conventions.js +46 -1
  517. package/lib/util/createMappings.js +118 -0
  518. package/lib/util/dataURL.js +1 -0
  519. package/lib/util/deprecation.js +19 -0
  520. package/lib/util/deterministicGrouping.js +20 -0
  521. package/lib/util/extractSourceMap.js +1 -0
  522. package/lib/util/extractUrlAndGlobal.js +1 -0
  523. package/lib/util/findGraphRoots.js +5 -0
  524. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  525. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
  526. package/lib/util/fs.js +71 -8
  527. package/lib/util/generateDebugId.js +1 -0
  528. package/lib/util/hash/BatchedHash.js +1 -0
  529. package/lib/util/hash/BulkUpdateHash.js +1 -0
  530. package/lib/util/hash/hash-digest.js +8 -0
  531. package/lib/util/hash/md4.js +1 -1
  532. package/lib/util/hash/wasm-hash.js +5 -0
  533. package/lib/util/hash/xxhash64.js +1 -1
  534. package/lib/util/identifier.js +67 -0
  535. package/lib/util/internalSerializables.js +35 -19
  536. package/lib/util/magicComment.js +10 -6
  537. package/lib/util/makeSerializable.js +6 -0
  538. package/lib/util/memoize.js +2 -0
  539. package/lib/util/mimeTypes.js +176 -0
  540. package/lib/util/nonNumericOnlyHash.js +1 -0
  541. package/lib/util/parseJson.js +41 -0
  542. package/lib/util/processAsyncTree.js +8 -0
  543. package/lib/util/property.js +1 -0
  544. package/lib/util/registerExternalSerializer.js +20 -0
  545. package/lib/util/removeBOM.js +1 -0
  546. package/lib/util/runtime.js +32 -0
  547. package/lib/util/semver.js +15 -0
  548. package/lib/util/serialization.js +2 -0
  549. package/lib/util/smartGrouping.js +8 -0
  550. package/lib/util/source.js +23 -0
  551. package/lib/util/topologicalSort.js +69 -0
  552. package/lib/validateSchema.js +1 -0
  553. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  554. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
  555. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
  556. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  557. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
  558. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
  559. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
  560. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
  561. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
  562. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
  563. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
  564. package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
  565. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
  566. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  567. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
  568. package/lib/wasm-sync/WebAssemblyParser.js +2 -0
  569. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  570. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
  571. package/lib/web/FetchCompileWasmPlugin.js +13 -1
  572. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  573. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
  574. package/lib/web/JsonpTemplatePlugin.js +2 -1
  575. package/lib/webpack.js +13 -1
  576. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  577. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
  578. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  579. package/package.json +31 -31
  580. package/schemas/WebpackOptions.check.js +1 -1
  581. package/schemas/WebpackOptions.json +161 -57
  582. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  583. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  584. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  585. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  586. package/schemas/plugins/ProgressPlugin.json +22 -0
  587. package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
  588. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  589. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  590. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  591. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  592. package/types.d.ts +5325 -353
  593. package/lib/CaseSensitiveModulesWarning.js +0 -72
  594. package/lib/GraphHelpers.js +0 -46
  595. package/lib/NoModeWarning.js +0 -23
  596. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  597. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  598. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  599. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  600. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SyncHook, SyncWaterfallHook } = require("tapable");
8
+ const { SyncBailHook, SyncHook, SyncWaterfallHook } = require("tapable");
9
9
  const {
10
10
  CachedSource,
11
11
  ConcatSource,
@@ -14,8 +14,6 @@ const {
14
14
  ReplaceSource
15
15
  } = require("webpack-sources");
16
16
  const Compilation = require("../Compilation");
17
- const CssModule = require("../CssModule");
18
- const { tryRunOrWebpackError } = require("../HookWebpackError");
19
17
  const HotUpdateChunk = require("../HotUpdateChunk");
20
18
  const { CSS_IMPORT_TYPE, CSS_TYPE } = require("../ModuleSourceTypeConstants");
21
19
  const {
@@ -27,14 +25,16 @@ const {
27
25
  const NormalModule = require("../NormalModule");
28
26
  const RuntimeGlobals = require("../RuntimeGlobals");
29
27
  const Template = require("../Template");
30
- const WebpackError = require("../WebpackError");
31
28
  const CssIcssExportDependency = require("../dependencies/CssIcssExportDependency");
32
29
  const CssIcssImportDependency = require("../dependencies/CssIcssImportDependency");
33
30
  const CssIcssSymbolDependency = require("../dependencies/CssIcssSymbolDependency");
34
31
  const CssImportDependency = require("../dependencies/CssImportDependency");
35
32
  const CssUrlDependency = require("../dependencies/CssUrlDependency");
36
33
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
34
+ const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
35
+ const WebpackError = require("../errors/WebpackError");
37
36
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
37
+ const ConcatenatedModule = require("../optimize/ConcatenatedModule");
38
38
  const { compareModulesByFullName } = require("../util/comparators");
39
39
  const createHash = require("../util/createHash");
40
40
  const { getUndoPath } = require("../util/identifier");
@@ -42,10 +42,9 @@ const memoize = require("../util/memoize");
42
42
  const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
43
43
  const removeBOM = require("../util/removeBOM");
44
44
  const CssGenerator = require("./CssGenerator");
45
+ const CssModule = require("./CssModule");
45
46
  const CssParser = require("./CssParser");
46
47
 
47
- const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
48
-
49
48
  /** @typedef {import("webpack-sources").Source} Source */
50
49
  /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
51
50
  /** @typedef {import("../Chunk")} Chunk */
@@ -53,8 +52,8 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
53
52
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
54
53
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
55
54
  /** @typedef {import("../Compiler")} Compiler */
56
- /** @typedef {import("../CssModule").Inheritance} Inheritance */
57
- /** @typedef {import("../CssModule").CSSModuleCreateData} CSSModuleCreateData */
55
+ /** @typedef {import("./CssModule").Inheritance} Inheritance */
56
+ /** @typedef {import("./CssModule").CssModuleCreateData} CssModuleCreateData */
58
57
  /** @typedef {import("../Module")} Module */
59
58
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
60
59
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
@@ -64,6 +63,7 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
64
63
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
65
64
 
66
65
  /**
66
+ * Defines the render context type used by this module.
67
67
  * @typedef {object} RenderContext
68
68
  * @property {Chunk} chunk the chunk
69
69
  * @property {ChunkGraph} chunkGraph the chunk graph
@@ -71,29 +71,36 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
71
71
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
72
72
  * @property {string} uniqueName the unique name
73
73
  * @property {string} undoPath undo path to css file
74
+ * @property {string=} hash compilation hash
74
75
  * @property {CssModule[]} modules modules
75
76
  */
76
77
 
77
78
  /**
79
+ * Defines the chunk render context type used by this module.
78
80
  * @typedef {object} ChunkRenderContext
79
81
  * @property {Chunk=} chunk the chunk
80
82
  * @property {ChunkGraph=} chunkGraph the chunk graph
81
83
  * @property {CodeGenerationResults=} codeGenerationResults results of code generation
82
84
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
83
85
  * @property {string} undoPath undo path to css file
86
+ * @property {string=} hash compilation hash
84
87
  * @property {WeakMap<Source, ModuleFactoryCacheEntry>} moduleFactoryCache moduleFactoryCache
85
88
  * @property {Source} moduleSourceContent content
86
89
  */
87
90
 
88
91
  /**
92
+ * Defines the compilation hooks type used by this module.
89
93
  * @typedef {object} CompilationHooks
90
94
  * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModulePackage
91
95
  * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
96
+ * @property {SyncBailHook<[Chunk, Module[], Compilation], Module[] | undefined | void>} orderModules called for each CSS source type (CSS_IMPORT_TYPE, CSS_TYPE) with the chunk's modules pre-sorted by full module name; return an ordered `Module[]` to override the default import-order topological sort, or return `undefined` to keep the default
92
97
  */
93
98
 
94
99
  /**
100
+ * Defines the module factory cache entry type used by this module.
95
101
  * @typedef {object} ModuleFactoryCacheEntry
96
102
  * @property {string} undoPath - The undo path to the CSS file
103
+ * @property {string | undefined} hash - The compilation hash
97
104
  * @property {Inheritance} inheritance - The inheritance chain
98
105
  * @property {CachedSource} source - The cached source
99
106
  */
@@ -101,14 +108,12 @@ const publicPathAutoRegex = new RegExp(CssUrlDependency.PUBLIC_PATH_AUTO, "g");
101
108
  const getCssLoadingRuntimeModule = memoize(() =>
102
109
  require("./CssLoadingRuntimeModule")
103
110
  );
104
- const getCssMergeStyleSheetsRuntimeModule = memoize(() =>
105
- require("./CssMergeStyleSheetsRuntimeModule")
106
- );
107
111
  const getCssInjectStyleRuntimeModule = memoize(() =>
108
112
  require("./CssInjectStyleRuntimeModule")
109
113
  );
110
114
 
111
115
  /**
116
+ * Returns ], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema.
112
117
  * @param {string} name name
113
118
  * @returns {{ oneOf: [{ $ref: string }], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} schema
114
119
  */
@@ -138,6 +143,7 @@ const PLUGIN_NAME = "CssModulesPlugin";
138
143
 
139
144
  class CssModulesPlugin {
140
145
  /**
146
+ * Returns the attached hooks.
141
147
  * @param {Compilation} compilation the compilation
142
148
  * @returns {CompilationHooks} the attached hooks
143
149
  */
@@ -155,7 +161,8 @@ class CssModulesPlugin {
155
161
  "module",
156
162
  "renderContext"
157
163
  ]),
158
- chunkHash: new SyncHook(["chunk", "hash", "context"])
164
+ chunkHash: new SyncHook(["chunk", "hash", "context"]),
165
+ orderModules: new SyncBailHook(["chunk", "modules", "compilation"])
159
166
  };
160
167
  compilationHooksMap.set(compilation, hooks);
161
168
  }
@@ -168,7 +175,7 @@ class CssModulesPlugin {
168
175
  }
169
176
 
170
177
  /**
171
- * Apply the plugin
178
+ * Applies the plugin by registering its hooks on the compiler.
172
179
  * @param {Compiler} compiler the compiler instance
173
180
  * @returns {void}
174
181
  */
@@ -255,11 +262,11 @@ class CssModulesPlugin {
255
262
  case CSS_MODULE_TYPE_MODULE: {
256
263
  defaultMode = "local";
257
264
  compiler.validate(
258
- () => getSchema("CssModuleParserOptions"),
265
+ () => getSchema("CssAutoOrModuleParserOptions"),
259
266
  parserOptions,
260
267
  parserValidationOptions,
261
268
  (options) =>
262
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
269
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
263
270
  options
264
271
  )
265
272
  );
@@ -268,11 +275,11 @@ class CssModulesPlugin {
268
275
  case CSS_MODULE_TYPE_AUTO: {
269
276
  defaultMode = "auto";
270
277
  compiler.validate(
271
- () => getSchema("CssModuleParserOptions"),
278
+ () => getSchema("CssAutoOrModuleParserOptions"),
272
279
  parserOptions,
273
280
  parserValidationOptions,
274
281
  (options) =>
275
- require("../../schemas/plugins/css/CssModuleParserOptions.check")(
282
+ require("../../schemas/plugins/css/CssAutoOrModuleParserOptions.check")(
276
283
  options
277
284
  )
278
285
  );
@@ -392,20 +399,20 @@ class CssModulesPlugin {
392
399
  }
393
400
 
394
401
  return new CssModule(
395
- /** @type {CSSModuleCreateData} */
402
+ /** @type {CssModuleCreateData} */
396
403
  ({
397
404
  ...createData,
398
405
  cssLayer: dependency.layer,
399
406
  supports: dependency.supports,
400
407
  media: dependency.media,
401
408
  inheritance,
402
- exportType: exportType || parent.exportType
409
+ exportType: parent.exportType || exportType
403
410
  })
404
411
  );
405
412
  }
406
413
 
407
414
  return new CssModule(
408
- /** @type {CSSModuleCreateData} */
415
+ /** @type {CssModuleCreateData} */
409
416
  ({
410
417
  ...createData,
411
418
  cssLayer: dependency.layer,
@@ -418,7 +425,7 @@ class CssModulesPlugin {
418
425
  }
419
426
 
420
427
  return new CssModule(
421
- /** @type {CSSModuleCreateData} */
428
+ /** @type {CssModuleCreateData} */
422
429
  (
423
430
  /** @type {unknown} */ ({
424
431
  ...createData,
@@ -445,44 +452,76 @@ class CssModulesPlugin {
445
452
  JavascriptModulesPlugin.getCompilationHooks(
446
453
  compilation
447
454
  ).renderModuleContent.tap(PLUGIN_NAME, (source, module) => {
448
- if (module instanceof CssModule && module.hot) {
449
- const exportType = module.exportType;
455
+ const injectCssStylesVar =
456
+ module instanceof ConcatenatedModule &&
457
+ module.modules.find(
458
+ (m) =>
459
+ m instanceof CssModule &&
460
+ m.exportType === "style" &&
461
+ !(/** @type {CssGenerator} */ (m.generator)._exportsOnly)
462
+ );
463
+ const injectHMRCode =
464
+ (module instanceof CssModule && module.hot) ||
465
+ (module instanceof ConcatenatedModule &&
466
+ module.rootModule instanceof CssModule &&
467
+ module.rootModule.hot);
468
+
469
+ if (injectCssStylesVar) {
470
+ source = new ConcatSource(
471
+ "var __webpack_css_styles__ = [];",
472
+ "\n",
473
+ source
474
+ );
475
+ }
476
+ if (injectHMRCode) {
477
+ const currentModule = /** @type {CssModule} */ (
478
+ module instanceof ConcatenatedModule ? module.rootModule : module
479
+ );
480
+ const exportType = currentModule.exportType || "link";
450
481
  // When exportType !== "link", modules behave like JavaScript modules
451
- if (exportType && !["link", "style"].includes(exportType)) {
452
- return source;
453
- }
454
- // For exportType === "link", we can optimize with self-acceptance
455
- const cssData = /** @type {BuildInfo} */ (module.buildInfo).cssData;
456
- if (!cssData) {
457
- return source;
458
- }
459
- const exports = cssData.exports;
460
- /** @type {Record<string, string>} */
461
- const exportsObj = {};
462
- for (const [key, value] of exports) {
463
- exportsObj[key] = value;
482
+ if (["link", "style"].includes(exportType)) {
483
+ // For exportType === "link", we can optimize with self-acceptance
484
+ const cssData = /** @type {BuildInfo} */ (module.buildInfo)
485
+ .cssData;
486
+ if (!cssData) {
487
+ return source;
488
+ }
489
+ const exports = cssData.exports;
490
+ /** @type {Record<string, string>} */
491
+ const exportsObj = {};
492
+ for (const [key, value] of exports) {
493
+ exportsObj[key] = value;
494
+ }
495
+ const stringifiedExports = JSON.stringify(
496
+ JSON.stringify(exportsObj)
497
+ );
498
+
499
+ const hmrCode = Template.asString([
500
+ "",
501
+ `var __webpack_css_exports__ = ${stringifiedExports};`,
502
+ "// only invalidate when locals change",
503
+ "if (module.hot.data && module.hot.data.__webpack_css_exports__ && module.hot.data.__webpack_css_exports__ != __webpack_css_exports__) {",
504
+ Template.indent("module.hot.invalidate();"),
505
+ "} else {",
506
+ Template.indent("module.hot.accept();"),
507
+ "}",
508
+ "module.hot.dispose(function(data) {",
509
+ Template.indent([
510
+ "data.__webpack_css_exports__ = __webpack_css_exports__;"
511
+ ]),
512
+ "});"
513
+ ]);
514
+
515
+ source = new ConcatSource(source, "\n", new RawSource(hmrCode));
464
516
  }
465
- const stringifiedExports = JSON.stringify(
466
- JSON.stringify(exportsObj)
517
+ }
518
+ if (injectCssStylesVar) {
519
+ /** @type {ConcatSource} */
520
+ (source).add(
521
+ "for (let i = 0; i < __webpack_css_styles__.length; i++) {\n" +
522
+ `${RuntimeGlobals.cssInjectStyle}(__webpack_css_styles__[i][0], __webpack_css_styles__[i][1]);\n` +
523
+ "}"
467
524
  );
468
-
469
- const hmrCode = Template.asString([
470
- "",
471
- `var __webpack_css_exports__ = ${stringifiedExports};`,
472
- "// only invalidate when locals change",
473
- "if (module.hot.data && module.hot.data.__webpack_css_exports__ && module.hot.data.__webpack_css_exports__ != __webpack_css_exports__) {",
474
- Template.indent("module.hot.invalidate();"),
475
- "} else {",
476
- Template.indent("module.hot.accept();"),
477
- "}",
478
- "module.hot.dispose(function(data) {",
479
- Template.indent([
480
- "data.__webpack_css_exports__ = __webpack_css_exports__;"
481
- ]),
482
- "});"
483
- ]);
484
-
485
- return new ConcatSource(source, "\n", new RawSource(hmrCode));
486
525
  }
487
526
 
488
527
  return source;
@@ -571,6 +610,7 @@ class CssModulesPlugin {
571
610
  codeGenerationResults,
572
611
  uniqueName: compilation.outputOptions.uniqueName,
573
612
  undoPath,
613
+ hash,
574
614
  modules,
575
615
  runtimeTemplate
576
616
  },
@@ -586,6 +626,7 @@ class CssModulesPlugin {
586
626
  });
587
627
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
588
628
  /**
629
+ * Checks whether this css modules plugin is enabled for chunk.
589
630
  * @param {Chunk} chunk the chunk
590
631
  * @returns {boolean} true, when enabled
591
632
  */
@@ -600,6 +641,7 @@ class CssModulesPlugin {
600
641
  /** @type {WeakSet<Chunk>} */
601
642
  const onceForChunkSet = new WeakSet();
602
643
  /**
644
+ * Handles the hook callback for this code path.
603
645
  * @param {Chunk} chunk chunk to check
604
646
  * @param {RuntimeRequirements} set runtime requirements
605
647
  */
@@ -655,20 +697,11 @@ class CssModulesPlugin {
655
697
  set.add(RuntimeGlobals.getChunkCssFilename);
656
698
  });
657
699
 
658
- compilation.hooks.runtimeRequirementInTree
659
- .for(RuntimeGlobals.cssMergeStyleSheets)
660
- .tap(PLUGIN_NAME, (chunk) => {
661
- const CssMergeStyleSheetsRuntimeModule =
662
- getCssMergeStyleSheetsRuntimeModule();
663
- compilation.addRuntimeModule(
664
- chunk,
665
- new CssMergeStyleSheetsRuntimeModule()
666
- );
667
- });
668
-
669
700
  compilation.hooks.runtimeRequirementInTree
670
701
  .for(RuntimeGlobals.cssInjectStyle)
671
702
  .tap(PLUGIN_NAME, (chunk, set) => {
703
+ // Same as above: namespace stub is enough.
704
+ set.add(RuntimeGlobals.requireScope);
672
705
  const CssInjectStyleRuntimeModule =
673
706
  getCssInjectStyleRuntimeModule();
674
707
  compilation.addRuntimeModule(
@@ -681,6 +714,7 @@ class CssModulesPlugin {
681
714
  }
682
715
 
683
716
  /**
717
+ * Gets modules in order.
684
718
  * @param {Chunk} chunk chunk
685
719
  * @param {Iterable<Module> | undefined} modules unordered modules
686
720
  * @param {Compilation} compilation compilation
@@ -722,6 +756,7 @@ class CssModulesPlugin {
722
756
  );
723
757
 
724
758
  /**
759
+ * Compares module lists.
725
760
  * @param {{ list: Module[] }} a a
726
761
  * @param {{ list: Module[] }} b b
727
762
  * @returns {-1 | 0 | 1} result
@@ -826,42 +861,87 @@ class CssModulesPlugin {
826
861
  }
827
862
 
828
863
  /**
864
+ * Gets ordered chunk css modules.
829
865
  * @param {Chunk} chunk chunk
830
866
  * @param {ChunkGraph} chunkGraph chunk graph
831
867
  * @param {Compilation} compilation compilation
832
868
  * @returns {CssModule[]} ordered css modules
833
869
  */
834
870
  getOrderedChunkCssModules(chunk, chunkGraph, compilation) {
871
+ /** @type {string | undefined} */
872
+ let charset;
873
+
874
+ const hooks = CssModulesPlugin.getCompilationHooks(compilation);
875
+
876
+ /**
877
+ * @param {Iterable<Module> | undefined} iter modules pre-sorted by full module name
878
+ * @returns {Module[]} ordered modules
879
+ */
880
+ const orderModules = (iter) => {
881
+ const modules = iter ? [...iter] : [];
882
+ const result = hooks.orderModules.call(chunk, modules, compilation);
883
+ if (result !== undefined) return result;
884
+ return this.getModulesInOrder(chunk, modules, compilation);
885
+ };
886
+
835
887
  return /** @type {CssModule[]} */ ([
836
- ...this.getModulesInOrder(
837
- chunk,
888
+ ...orderModules(
838
889
  chunkGraph.getOrderedChunkModulesIterableBySourceType(
839
890
  chunk,
840
891
  CSS_IMPORT_TYPE,
841
892
  compareModulesByFullName(compilation.compiler)
842
- ),
843
- compilation
893
+ )
844
894
  ),
845
- ...this.getModulesInOrder(
846
- chunk,
895
+ ...orderModules(
847
896
  chunkGraph.getOrderedChunkModulesIterableBySourceType(
848
897
  chunk,
849
898
  CSS_TYPE,
850
899
  compareModulesByFullName(compilation.compiler)
851
- ),
852
- compilation
853
- )
900
+ )
901
+ ).map((module) => {
902
+ if (
903
+ typeof (/** @type {BuildInfo} */ (module.buildInfo).charset) !==
904
+ "undefined"
905
+ ) {
906
+ if (
907
+ typeof charset !== "undefined" &&
908
+ charset !== /** @type {BuildInfo} */ (module.buildInfo).charset
909
+ ) {
910
+ const err = new WebpackError(
911
+ `Conflicting @charset at-rules detected: the module ${module.readableIdentifier(
912
+ compilation.requestShortener
913
+ )} (in chunk ${chunk.name || chunk.id}) specifies "${
914
+ /** @type {BuildInfo} */ (module.buildInfo).charset
915
+ }", but "${charset}" was expected, all modules must use the same character set`
916
+ );
917
+
918
+ err.chunk = chunk;
919
+ err.module = module;
920
+ err.hideStack = true;
921
+
922
+ compilation.warnings.push(err);
923
+ }
924
+
925
+ if (typeof charset === "undefined") {
926
+ charset = /** @type {BuildInfo} */ (module.buildInfo).charset;
927
+ }
928
+ }
929
+
930
+ return module;
931
+ })
854
932
  ]);
855
933
  }
856
934
 
857
935
  /**
936
+ * Renders css module source.
858
937
  * @param {CssModule} module css module
859
938
  * @param {ChunkRenderContext} renderContext options object
860
939
  * @param {CompilationHooks} hooks hooks
861
940
  * @returns {Source | null} css module source
862
941
  */
863
942
  static renderModule(module, renderContext, hooks) {
864
- const { undoPath, moduleFactoryCache, moduleSourceContent } = renderContext;
943
+ const { undoPath, hash, moduleFactoryCache, moduleSourceContent } =
944
+ renderContext;
865
945
  const cacheEntry = moduleFactoryCache.get(moduleSourceContent);
866
946
 
867
947
  /** @type {Inheritance} */
@@ -875,6 +955,7 @@ class CssModulesPlugin {
875
955
  if (
876
956
  cacheEntry &&
877
957
  cacheEntry.undoPath === undoPath &&
958
+ cacheEntry.hash === hash &&
878
959
  cacheEntry.inheritance.length === inheritance.length &&
879
960
  cacheEntry.inheritance.every(([layer, supports, media], i) => {
880
961
  const item = inheritance[i];
@@ -890,19 +971,60 @@ class CssModulesPlugin {
890
971
  const moduleSourceCode =
891
972
  /** @type {string} */
892
973
  (moduleSourceContent.source());
893
- publicPathAutoRegex.lastIndex = 0;
894
- /** @type {Source} */
895
- let moduleSource = new ReplaceSource(moduleSourceContent);
896
- /** @type {null | RegExpExecArray} */
897
- let match;
898
- while ((match = publicPathAutoRegex.exec(moduleSourceCode))) {
899
- /** @type {ReplaceSource} */ (moduleSource).replace(
900
- match.index,
901
- match.index + match[0].length - 1,
902
- undoPath
903
- );
974
+ const replaceSource = new ReplaceSource(moduleSourceContent);
975
+
976
+ const autoPlaceholder = CssUrlDependency.PUBLIC_PATH_AUTO;
977
+ const autoPlaceholderLen = autoPlaceholder.length;
978
+ for (
979
+ let idx = moduleSourceCode.indexOf(autoPlaceholder);
980
+ idx !== -1;
981
+ idx = moduleSourceCode.indexOf(
982
+ autoPlaceholder,
983
+ idx + autoPlaceholderLen
984
+ )
985
+ ) {
986
+ replaceSource.replace(idx, idx + autoPlaceholderLen - 1, undoPath);
904
987
  }
905
988
 
989
+ if (hash) {
990
+ const hashPrefix = CssUrlDependency.PUBLIC_PATH_FULL_HASH;
991
+ const hashPrefixLen = hashPrefix.length;
992
+ const sourceLen = moduleSourceCode.length;
993
+ let idx = moduleSourceCode.indexOf(hashPrefix);
994
+ while (idx !== -1) {
995
+ let digitEnd = idx + hashPrefixLen;
996
+ while (digitEnd < sourceLen) {
997
+ const cc = moduleSourceCode.charCodeAt(digitEnd);
998
+ if (cc < 48 || cc > 57) break;
999
+ digitEnd++;
1000
+ }
1001
+ let nextSearch;
1002
+ if (
1003
+ digitEnd > idx + hashPrefixLen &&
1004
+ digitEnd + 1 < sourceLen &&
1005
+ moduleSourceCode.charCodeAt(digitEnd) === 95 &&
1006
+ moduleSourceCode.charCodeAt(digitEnd + 1) === 95
1007
+ ) {
1008
+ const length = Number.parseInt(
1009
+ moduleSourceCode.slice(idx + hashPrefixLen, digitEnd),
1010
+ 10
1011
+ );
1012
+ replaceSource.replace(
1013
+ idx,
1014
+ digitEnd + 1,
1015
+ length === 0 ? hash : hash.slice(0, length)
1016
+ );
1017
+ nextSearch = digitEnd + 2;
1018
+ } else {
1019
+ nextSearch = idx + hashPrefixLen;
1020
+ }
1021
+ idx = moduleSourceCode.indexOf(hashPrefix, nextSearch);
1022
+ }
1023
+ }
1024
+
1025
+ /** @type {Source} */
1026
+ let moduleSource = replaceSource;
1027
+
906
1028
  for (let i = 0; i < inheritance.length; i++) {
907
1029
  const layer = inheritance[i][0];
908
1030
  const supports = inheritance[i][1];
@@ -942,6 +1064,7 @@ class CssModulesPlugin {
942
1064
  moduleFactoryCache.set(moduleSourceContent, {
943
1065
  inheritance,
944
1066
  undoPath,
1067
+ hash,
945
1068
  source
946
1069
  });
947
1070
  }
@@ -953,6 +1076,7 @@ class CssModulesPlugin {
953
1076
  }
954
1077
 
955
1078
  /**
1079
+ * Renders generated source.
956
1080
  * @param {RenderContext} renderContext the render context
957
1081
  * @param {CompilationHooks} hooks hooks
958
1082
  * @returns {Source} generated source
@@ -964,12 +1088,25 @@ class CssModulesPlugin {
964
1088
  codeGenerationResults,
965
1089
  modules,
966
1090
  runtimeTemplate,
967
- chunkGraph
1091
+ chunkGraph,
1092
+ hash
968
1093
  },
969
1094
  hooks
970
1095
  ) {
971
1096
  const source = new ConcatSource();
1097
+
1098
+ /** @type {string | undefined} */
1099
+ let charset;
1100
+
972
1101
  for (const module of modules) {
1102
+ if (
1103
+ typeof (/** @type {BuildInfo} */ (module.buildInfo).charset) !==
1104
+ "undefined" &&
1105
+ typeof charset === "undefined"
1106
+ ) {
1107
+ charset = /** @type {BuildInfo} */ (module.buildInfo).charset;
1108
+ }
1109
+
973
1110
  try {
974
1111
  const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
975
1112
  const moduleSourceContent =
@@ -982,6 +1119,7 @@ class CssModulesPlugin {
982
1119
  module,
983
1120
  {
984
1121
  undoPath,
1122
+ hash,
985
1123
  chunk,
986
1124
  chunkGraph,
987
1125
  codeGenerationResults,
@@ -1000,11 +1138,18 @@ class CssModulesPlugin {
1000
1138
  throw err;
1001
1139
  }
1002
1140
  }
1141
+
1003
1142
  chunk.rendered = true;
1143
+
1144
+ if (charset) {
1145
+ return new ConcatSource(`@charset "${charset}";\n`, source);
1146
+ }
1147
+
1004
1148
  return source;
1005
1149
  }
1006
1150
 
1007
1151
  /**
1152
+ * Gets chunk filename template.
1008
1153
  * @param {Chunk} chunk chunk
1009
1154
  * @param {OutputOptions} outputOptions output options
1010
1155
  * @returns {TemplatePath} used filename template
@@ -1019,6 +1164,7 @@ class CssModulesPlugin {
1019
1164
  }
1020
1165
 
1021
1166
  /**
1167
+ * Returns true, when the chunk has css.
1022
1168
  * @param {Chunk} chunk chunk
1023
1169
  * @param {ChunkGraph} chunkGraph chunk graph
1024
1170
  * @returns {boolean} true, when the chunk has css