webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -5,40 +5,117 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const WebpackError = require("../WebpackError");
9
+ const { cssExportConvention } = require("../util/conventions");
8
10
  const makeSerializable = require("../util/makeSerializable");
9
- const CssIcssExportDependency = require("./CssIcssExportDependency");
10
- const CssLocalIdentifierDependency = require("./CssLocalIdentifierDependency");
11
- const ModuleDependency = require("./ModuleDependency");
11
+ const memoize = require("../util/memoize");
12
+ const CssImportDependency = require("./CssImportDependency");
12
13
 
13
14
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
15
  /** @typedef {import("../Dependency")} Dependency */
15
- /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
16
16
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
17
+ /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../CssModule")} CssModule */
17
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
21
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
23
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
24
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
25
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
26
+ /** @typedef {import("./CssIcssExportDependency").ExportMode} ExportMode */
27
+ /** @typedef {import("./CssIcssExportDependency").ExportType} ExportType */
20
28
 
21
- class CssIcssImportDependency extends ModuleDependency {
29
+ const getCssIcssExportDependency = memoize(() =>
30
+ require("./CssIcssExportDependency")
31
+ );
32
+
33
+ class CssIcssImportDependency extends CssImportDependency {
22
34
  /**
23
35
  * Example of dependency:
24
36
  *
25
- *:import('./style.css') { IMPORTED_NAME: v-primary }
37
+ * :import('./style.css') { value: name }
26
38
  * @param {string} request request request path which needs resolving
27
- * @param {string} exportName export name
28
- * @param {[number, number]} range the range of dependency
39
+ * @param {Range} range the range of dependency
40
+ * @param {"local" | "global"} mode mode of the parsed CSS
41
+ * @param {string} name name
42
+ * @param {string=} exportName export value
43
+ * @param {ExportMode=} exportMode export mode
44
+ * @param {ExportType=} exportType export type
29
45
  */
30
- constructor(request, exportName, range) {
31
- super(request);
32
- this.range = range;
33
- this.exportName = exportName;
46
+ constructor(
47
+ request,
48
+ range,
49
+ mode,
50
+ name,
51
+ exportName = undefined,
52
+ exportMode = getCssIcssExportDependency().EXPORT_MODE.NONE,
53
+ exportType = getCssIcssExportDependency().EXPORT_TYPE.NORMAL
54
+ ) {
55
+ super(request, range, mode);
56
+ this.name = name;
57
+ this.value = exportName;
58
+ this.interpolate = true;
59
+ this.exportMode = exportMode;
60
+ this.exportType = exportType;
34
61
  }
35
62
 
36
63
  get type() {
37
64
  return "css :import";
38
65
  }
39
66
 
40
- get category() {
41
- return "css-import";
67
+ /**
68
+ * @returns {string | null} an identifier to merge equal requests
69
+ */
70
+ getResourceIdentifier() {
71
+ return `${super.getResourceIdentifier()}|mode${this.mode}|name${this.name}`;
72
+ }
73
+
74
+ /**
75
+ * @param {string} name export name
76
+ * @param {CssGeneratorExportsConvention} convention convention of the export name
77
+ * @returns {string[]} convention results
78
+ */
79
+ getExportsConventionNames(name, convention) {
80
+ return cssExportConvention(name, convention);
81
+ }
82
+
83
+ /**
84
+ * Returns list of exports referenced by this dependency
85
+ * @param {ModuleGraph} moduleGraph module graph
86
+ * @param {RuntimeSpec} runtime the runtime for which the module is analysed
87
+ * @returns {ReferencedExports} referenced exports
88
+ */
89
+ getReferencedExports(moduleGraph, runtime) {
90
+ return [
91
+ {
92
+ name: [this.name],
93
+ canMangle: true
94
+ }
95
+ ];
96
+ }
97
+
98
+ /**
99
+ * Returns warnings
100
+ * @param {ModuleGraph} moduleGraph module graph
101
+ * @returns {WebpackError[] | null | undefined} warnings
102
+ */
103
+ getWarnings(moduleGraph) {
104
+ const module = moduleGraph.getModule(this);
105
+
106
+ if (
107
+ module &&
108
+ !moduleGraph.getExportsInfo(module).isExportProvided(this.name)
109
+ ) {
110
+ const error = new WebpackError(
111
+ `Referenced name "${this.name}" in "${this.userRequest}" not found`
112
+ );
113
+ error.module = module;
114
+
115
+ return [error];
116
+ }
117
+
118
+ return null;
42
119
  }
43
120
 
44
121
  /**
@@ -46,8 +123,11 @@ class CssIcssImportDependency extends ModuleDependency {
46
123
  */
47
124
  serialize(context) {
48
125
  const { write } = context;
49
- write(this.range);
50
- write(this.exportName);
126
+ write(this.name);
127
+ write(this.value);
128
+ write(this.interpolate);
129
+ write(this.exportMode);
130
+ write(this.exportType);
51
131
  super.serialize(context);
52
132
  }
53
133
 
@@ -56,14 +136,17 @@ class CssIcssImportDependency extends ModuleDependency {
56
136
  */
57
137
  deserialize(context) {
58
138
  const { read } = context;
59
- this.range = read();
60
- this.exportName = read();
139
+ this.name = read();
140
+ this.value = read();
141
+ this.interpolate = read();
142
+ this.exportMode = read();
143
+ this.exportType = read();
61
144
  super.deserialize(context);
62
145
  }
63
146
  }
64
147
 
65
148
  CssIcssImportDependency.Template = class CssIcssImportDependencyTemplate extends (
66
- ModuleDependency.Template
149
+ CssImportDependency.Template
67
150
  ) {
68
151
  /**
69
152
  * @param {Dependency} dependency the dependency for which the template should be applied
@@ -73,40 +156,22 @@ CssIcssImportDependency.Template = class CssIcssImportDependencyTemplate extends
73
156
  */
74
157
  apply(dependency, source, templateContext) {
75
158
  const dep = /** @type {CssIcssImportDependency} */ (dependency);
76
- const { range } = dep;
77
- const module = templateContext.moduleGraph.getModule(dep);
78
- let value;
79
-
80
- for (const item of module.dependencies) {
81
- if (
82
- item instanceof CssLocalIdentifierDependency &&
83
- dep.exportName === item.name
84
- ) {
85
- value = CssLocalIdentifierDependency.Template.getIdentifier(
86
- item,
87
- dep.exportName,
88
- {
89
- ...templateContext,
90
- module
91
- }
92
- );
93
- break;
94
- } else if (
95
- item instanceof CssIcssExportDependency &&
96
- dep.exportName === item.name
97
- ) {
98
- value = item.value;
99
- break;
100
- }
101
- }
102
159
 
103
- if (!value) {
104
- throw new Error(
105
- `Imported '${dep.exportName}' name from '${dep.request}' not found`
106
- );
160
+ if (dep.value) {
161
+ const { moduleGraph } = templateContext;
162
+ const module =
163
+ /** @type {CssModule} */
164
+ (moduleGraph.getModule(dep));
165
+ const CssIcssExportDependency = getCssIcssExportDependency();
166
+ const template = new CssIcssExportDependency.Template();
167
+ const originalName = dep.name;
168
+ const originalExportName = dep.value;
169
+ dep.value = originalName;
170
+ dep.name = originalExportName;
171
+ template.apply(dep, source, { ...templateContext, module });
172
+ dep.name = originalName;
173
+ dep.value = originalExportName;
107
174
  }
108
-
109
- source.replace(range[0], range[1], value);
110
175
  }
111
176
  };
112
177
 
@@ -5,13 +5,15 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { CSS_TYPE } = require("../ModuleSourceTypeConstants");
8
9
  const makeSerializable = require("../util/makeSerializable");
10
+ const CssIcssExportDependency = require("./CssIcssExportDependency");
9
11
  const NullDependency = require("./NullDependency");
10
12
 
11
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
14
  /** @typedef {import("../Dependency")} Dependency */
13
15
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
16
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
15
17
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
16
18
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
17
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
@@ -24,23 +26,21 @@ const NullDependency = require("./NullDependency");
24
26
  class CssIcssSymbolDependency extends NullDependency {
25
27
  /**
26
28
  * @param {string} name name
27
- * @param {string} value value
29
+ * @param {string} symbol symbol
28
30
  * @param {Range} range range
31
+ * @param {boolean=} isReference true when is reference, otherwise false
29
32
  */
30
- constructor(name, value, range) {
33
+ constructor(name, symbol, range, isReference) {
31
34
  super();
32
35
  this.name = name;
33
- this.value = value;
36
+ this.symbol = symbol;
34
37
  this.range = range;
38
+ this.isReference = isReference;
35
39
  this._hashUpdate = undefined;
36
40
  }
37
41
 
38
42
  get type() {
39
- return "css @value identifier";
40
- }
41
-
42
- get category() {
43
- return "self";
43
+ return "css symbol identifier";
44
44
  }
45
45
 
46
46
  /**
@@ -56,31 +56,14 @@ class CssIcssSymbolDependency extends NullDependency {
56
56
  hash.update(this._hashUpdate);
57
57
  }
58
58
 
59
- /**
60
- * Returns the exported names
61
- * @param {ModuleGraph} moduleGraph module graph
62
- * @returns {ExportsSpec | undefined} export names
63
- */
64
- getExports(moduleGraph) {
65
- return {
66
- exports: [
67
- {
68
- name: this.name,
69
- canMangle: true
70
- }
71
- ],
72
- dependencies: undefined
73
- };
74
- }
75
-
76
59
  /**
77
60
  * Returns list of exports referenced by this dependency
78
61
  * @param {ModuleGraph} moduleGraph module graph
79
62
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
80
- * @returns {(string[] | ReferencedExport)[]} referenced exports
63
+ * @returns {ReferencedExports} referenced exports
81
64
  */
82
65
  getReferencedExports(moduleGraph, runtime) {
83
- return [[this.name]];
66
+ return [[this.symbol]];
84
67
  }
85
68
 
86
69
  /**
@@ -89,8 +72,10 @@ class CssIcssSymbolDependency extends NullDependency {
89
72
  serialize(context) {
90
73
  const { write } = context;
91
74
  write(this.name);
75
+ write(this.symbol);
92
76
  write(this.value);
93
77
  write(this.range);
78
+ write(this.isReference);
94
79
  super.serialize(context);
95
80
  }
96
81
 
@@ -100,13 +85,15 @@ class CssIcssSymbolDependency extends NullDependency {
100
85
  deserialize(context) {
101
86
  const { read } = context;
102
87
  this.name = read();
88
+ this.symbol = read();
103
89
  this.value = read();
104
90
  this.range = read();
91
+ this.isReference = read();
105
92
  super.deserialize(context);
106
93
  }
107
94
  }
108
95
 
109
- CssIcssSymbolDependency.Template = class CssValueAtRuleDependencyTemplate extends (
96
+ CssIcssSymbolDependency.Template = class CssIcssSymbolDependencyTemplate extends (
110
97
  NullDependency.Template
111
98
  ) {
112
99
  /**
@@ -115,12 +102,23 @@ CssIcssSymbolDependency.Template = class CssValueAtRuleDependencyTemplate extend
115
102
  * @param {DependencyTemplateContext} templateContext the context object
116
103
  * @returns {void}
117
104
  */
118
- apply(dependency, source, { cssData }) {
119
- const dep = /** @type {CssIcssSymbolDependency} */ (dependency);
120
-
121
- source.replace(dep.range[0], dep.range[1] - 1, dep.value);
122
-
123
- cssData.exports.set(dep.name, dep.value);
105
+ apply(dependency, source, templateContext) {
106
+ if (templateContext.type === CSS_TYPE) {
107
+ const dep = /** @type {CssIcssSymbolDependency} */ (dependency);
108
+ /** @type {string | undefined} */
109
+ const value = dep.isReference
110
+ ? CssIcssExportDependency.Template.findReference(
111
+ dep.symbol,
112
+ templateContext
113
+ )
114
+ : dep.symbol;
115
+
116
+ if (!value) {
117
+ return;
118
+ }
119
+
120
+ source.replace(dep.range[0], dep.range[1] - 1, value);
121
+ }
124
122
  }
125
123
  };
126
124
 
@@ -9,19 +9,11 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
 
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
12
  /** @typedef {import("../Dependency")} Dependency */
14
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
- /** @typedef {import("../Module")} Module */
17
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
18
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
19
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
13
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
20
14
  /** @typedef {import("../css/CssParser").Range} Range */
21
15
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
16
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
23
- /** @typedef {import("../util/Hash")} Hash */
24
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
25
17
 
26
18
  class CssImportDependency extends ModuleDependency {
27
19
  /**
@@ -29,13 +21,15 @@ class CssImportDependency extends ModuleDependency {
29
21
  * \@import url("landscape.css") layer(forms) screen and (orientation: landscape) screen and (orientation: landscape);
30
22
  * @param {string} request request
31
23
  * @param {Range} range range of the argument
32
- * @param {string | undefined} layer layer
33
- * @param {string | undefined} supports list of supports conditions
34
- * @param {string | undefined} media list of media conditions
24
+ * @param {"local" | "global"=} mode mode of the parsed CSS
25
+ * @param {string=} layer layer
26
+ * @param {string=} supports list of supports conditions
27
+ * @param {string=} media list of media conditions
35
28
  */
36
- constructor(request, range, layer, supports, media) {
29
+ constructor(request, range, mode, layer, supports, media) {
37
30
  super(request);
38
31
  this.range = range;
32
+ this.mode = mode;
39
33
  this.layer = layer;
40
34
  this.supports = supports;
41
35
  this.media = media;
@@ -46,7 +40,7 @@ class CssImportDependency extends ModuleDependency {
46
40
  }
47
41
 
48
42
  get category() {
49
- return "css-import";
43
+ return `css-import${this.mode ? `-${this.mode}-module` : ""}`;
50
44
  }
51
45
 
52
46
  /**
@@ -55,6 +49,10 @@ class CssImportDependency extends ModuleDependency {
55
49
  getResourceIdentifier() {
56
50
  let str = `context${this._context || ""}|module${this.request}`;
57
51
 
52
+ if (this.mode) {
53
+ str += `|mode${this.mode}`;
54
+ }
55
+
58
56
  if (this.layer) {
59
57
  str += `|layer${this.layer}`;
60
58
  }
@@ -75,6 +73,8 @@ class CssImportDependency extends ModuleDependency {
75
73
  */
76
74
  serialize(context) {
77
75
  const { write } = context;
76
+ write(this.range);
77
+ write(this.mode);
78
78
  write(this.layer);
79
79
  write(this.supports);
80
80
  write(this.media);
@@ -86,6 +86,8 @@ class CssImportDependency extends ModuleDependency {
86
86
  */
87
87
  deserialize(context) {
88
88
  const { read } = context;
89
+ this.range = read();
90
+ this.mode = read();
89
91
  this.layer = read();
90
92
  this.supports = read();
91
93
  this.media = read();
@@ -103,6 +105,7 @@ CssImportDependency.Template = class CssImportDependencyTemplate extends (
103
105
  * @returns {void}
104
106
  */
105
107
  apply(dependency, source, templateContext) {
108
+ if (templateContext.type === "javascript") return;
106
109
  const dep = /** @type {CssImportDependency} */ (dependency);
107
110
 
108
111
  source.replace(dep.range[0], dep.range[1] - 1, "");
@@ -11,20 +11,14 @@ const memoize = require("../util/memoize");
11
11
  const ModuleDependency = require("./ModuleDependency");
12
12
 
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
14
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
16
15
  /** @typedef {import("../Dependency")} Dependency */
17
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
18
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
19
17
  /** @typedef {import("../Module")} Module */
20
18
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
21
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
22
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
23
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
24
19
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
25
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
26
21
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
- /** @typedef {import("../util/Hash")} Hash */
28
22
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
29
23
 
30
24
  const getIgnoredRawDataUrlModule = memoize(
@@ -53,7 +47,7 @@ class CssUrlDependency extends ModuleDependency {
53
47
 
54
48
  /**
55
49
  * @param {string} context context directory
56
- * @returns {Module | null} a module
50
+ * @returns {Module} ignored module
57
51
  */
58
52
  createIgnoredModule(context) {
59
53
  return getIgnoredRawDataUrlModule();
@@ -82,7 +76,7 @@ class CssUrlDependency extends ModuleDependency {
82
76
  * @param {string} str string
83
77
  * @returns {string} string in quotes if needed
84
78
  */
85
- const cssEscapeString = str => {
79
+ const cssEscapeString = (str) => {
86
80
  let countWhiteOrBracket = 0;
87
81
  let countQuotation = 0;
88
82
  let countApostrophe = 0;
@@ -105,11 +99,11 @@ const cssEscapeString = str => {
105
99
  }
106
100
  }
107
101
  if (countWhiteOrBracket < 2) {
108
- return str.replace(/[\n\t ()'"\\]/g, m => `\\${m}`);
102
+ return str.replace(/[\n\t ()'"\\]/g, (m) => `\\${m}`);
109
103
  } else if (countQuotation <= countApostrophe) {
110
- return `"${str.replace(/[\n"\\]/g, m => `\\${m}`)}"`;
104
+ return `"${str.replace(/[\n"\\]/g, (m) => `\\${m}`)}"`;
111
105
  }
112
- return `'${str.replace(/[\n'\\]/g, m => `\\${m}`)}'`;
106
+ return `'${str.replace(/[\n'\\]/g, (m) => `\\${m}`)}'`;
113
107
  };
114
108
 
115
109
  CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
@@ -124,8 +118,9 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
124
118
  apply(
125
119
  dependency,
126
120
  source,
127
- { moduleGraph, runtimeTemplate, codeGenerationResults }
121
+ { type, moduleGraph, runtimeTemplate, codeGenerationResults }
128
122
  ) {
123
+ if (type === "javascript") return;
129
124
  const dep = /** @type {CssUrlDependency} */ (dependency);
130
125
  const module = /** @type {Module} */ (moduleGraph.getModule(dep));
131
126
 
@@ -6,16 +6,16 @@
6
6
  "use strict";
7
7
 
8
8
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
9
- /** @typedef {import("../Parser").ParserState} ParserState */
9
+ /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
10
10
 
11
- /** @type {WeakMap<ParserState, boolean>} */
11
+ /** @type {WeakMap<JavascriptParserState, boolean>} */
12
12
  const parserStateExportsState = new WeakMap();
13
13
 
14
14
  /**
15
- * @param {ParserState} parserState parser state
15
+ * @param {JavascriptParserState} parserState parser state
16
16
  * @returns {void}
17
17
  */
18
- module.exports.bailout = parserState => {
18
+ module.exports.bailout = (parserState) => {
19
19
  const value = parserStateExportsState.get(parserState);
20
20
  parserStateExportsState.set(parserState, false);
21
21
  if (value === true) {
@@ -26,10 +26,10 @@ module.exports.bailout = parserState => {
26
26
  };
27
27
 
28
28
  /**
29
- * @param {ParserState} parserState parser state
29
+ * @param {JavascriptParserState} parserState parser state
30
30
  * @returns {void}
31
31
  */
32
- module.exports.enable = parserState => {
32
+ module.exports.enable = (parserState) => {
33
33
  const value = parserStateExportsState.get(parserState);
34
34
  if (value === false) return;
35
35
  parserStateExportsState.set(parserState, true);
@@ -41,22 +41,19 @@ module.exports.enable = parserState => {
41
41
  };
42
42
 
43
43
  /**
44
- * @param {ParserState} parserState parser state
45
- * @returns {void}
44
+ * @param {JavascriptParserState} parserState parser state
45
+ * @returns {boolean} true, when enabled
46
46
  */
47
- module.exports.setFlagged = parserState => {
47
+ module.exports.isEnabled = (parserState) => {
48
48
  const value = parserStateExportsState.get(parserState);
49
- if (value !== true) return;
50
- const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
51
- if (buildMeta.exportsType === "dynamic") return;
52
- buildMeta.exportsType = "flagged";
49
+ return value === true;
53
50
  };
54
51
 
55
52
  /**
56
- * @param {ParserState} parserState parser state
53
+ * @param {JavascriptParserState} parserState parser state
57
54
  * @returns {void}
58
55
  */
59
- module.exports.setDynamic = parserState => {
56
+ module.exports.setDynamic = (parserState) => {
60
57
  const value = parserStateExportsState.get(parserState);
61
58
  if (value !== true) return;
62
59
  /** @type {BuildMeta} */
@@ -64,10 +61,13 @@ module.exports.setDynamic = parserState => {
64
61
  };
65
62
 
66
63
  /**
67
- * @param {ParserState} parserState parser state
68
- * @returns {boolean} true, when enabled
64
+ * @param {JavascriptParserState} parserState parser state
65
+ * @returns {void}
69
66
  */
70
- module.exports.isEnabled = parserState => {
67
+ module.exports.setFlagged = (parserState) => {
71
68
  const value = parserStateExportsState.get(parserState);
72
- return value === true;
69
+ if (value !== true) return;
70
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
71
+ if (buildMeta.exportsType === "dynamic") return;
72
+ buildMeta.exportsType = "flagged";
73
73
  };
@@ -10,28 +10,31 @@ const makeSerializable = require("../util/makeSerializable");
10
10
  const NullDependency = require("./NullDependency");
11
11
 
12
12
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
14
13
  /** @typedef {import("../Dependency")} Dependency */
15
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
16
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
15
  /** @typedef {import("../Module")} Module */
18
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
+ /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
19
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
20
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
21
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
- /** @typedef {import("../util/Hash")} Hash */
23
21
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
24
22
 
23
+ /**
24
+ * @template T
25
+ * @typedef {import("../util/SortableSet")<T>} SortableSet
26
+ */
27
+
25
28
  /**
26
29
  * @param {ModuleGraph} moduleGraph the module graph
27
30
  * @param {Module} module the module
28
- * @param {string[] | null} _exportName name of the export if any
31
+ * @param {ExportInfoName[] | null} exportName_ name of the export if any
29
32
  * @param {string | null} property name of the requested property
30
33
  * @param {RuntimeSpec} runtime for which runtime
31
- * @returns {any} value of the property
34
+ * @returns {undefined | null | boolean | ExportInfoName[]} value of the property
32
35
  */
33
- const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
34
- if (!_exportName) {
36
+ const getProperty = (moduleGraph, module, exportName_, property, runtime) => {
37
+ if (!exportName_) {
35
38
  switch (property) {
36
39
  case "usedExports": {
37
40
  const usedExports = moduleGraph
@@ -44,11 +47,11 @@ const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
44
47
  ) {
45
48
  return usedExports;
46
49
  }
47
- return Array.from(usedExports).sort();
50
+ return [...usedExports].sort();
48
51
  }
49
52
  }
50
53
  }
51
- const exportName = /** @type {string[]} */ (_exportName);
54
+ const exportName = /** @type {ExportInfoName[]} */ (exportName_);
52
55
  switch (property) {
53
56
  case "canMangle": {
54
57
  const exportsInfo = moduleGraph.getExportsInfo(module);
@@ -87,7 +90,7 @@ const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
87
90
  class ExportsInfoDependency extends NullDependency {
88
91
  /**
89
92
  * @param {Range} range range
90
- * @param {string[] | null} exportName export name
93
+ * @param {ExportInfoName[] | null} exportName export name
91
94
  * @param {string | null} property property
92
95
  */
93
96
  constructor(range, exportName, property) {