webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -0,0 +1,1049 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const ModuleDependencyWarning = require("../ModuleDependencyWarning");
9
+ const { CSS_MODULE_TYPE_AUTO } = require("../ModuleTypeConstants");
10
+ const Parser = require("../Parser");
11
+ const WebpackError = require("../WebpackError");
12
+ const ConstDependency = require("../dependencies/ConstDependency");
13
+ const CssExportDependency = require("../dependencies/CssExportDependency");
14
+ const CssImportDependency = require("../dependencies/CssImportDependency");
15
+ const CssLocalIdentifierDependency = require("../dependencies/CssLocalIdentifierDependency");
16
+ const CssSelfLocalIdentifierDependency = require("../dependencies/CssSelfLocalIdentifierDependency");
17
+ const CssUrlDependency = require("../dependencies/CssUrlDependency");
18
+ const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
19
+ const { parseResource } = require("../util/identifier");
20
+ const walkCssTokens = require("./walkCssTokens");
21
+
22
+ /** @typedef {import("../Parser").ParserState} ParserState */
23
+ /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
24
+ /** @typedef {[number, number]} Range */
25
+
26
+ const CC_LEFT_CURLY = "{".charCodeAt(0);
27
+ const CC_RIGHT_CURLY = "}".charCodeAt(0);
28
+ const CC_COLON = ":".charCodeAt(0);
29
+ const CC_SLASH = "/".charCodeAt(0);
30
+ const CC_SEMICOLON = ";".charCodeAt(0);
31
+
32
+ // https://www.w3.org/TR/css-syntax-3/#newline
33
+ // We don't have `preprocessing` stage, so we need specify all of them
34
+ const STRING_MULTILINE = /\\[\n\r\f]/g;
35
+ // https://www.w3.org/TR/css-syntax-3/#whitespace
36
+ const TRIM_WHITE_SPACES = /(^[ \t\n\r\f]*|[ \t\n\r\f]*$)/g;
37
+ const UNESCAPE = /\\([0-9a-fA-F]{1,6}[ \t\n\r\f]?|[\s\S])/g;
38
+ const IMAGE_SET_FUNCTION = /^(-\w+-)?image-set$/i;
39
+ const OPTIONALLY_VENDOR_PREFIXED_KEYFRAMES_AT_RULE = /^@(-\w+-)?keyframes$/;
40
+ const OPTIONALLY_VENDOR_PREFIXED_ANIMATION_PROPERTY =
41
+ /^(-\w+-)?animation(-name)?$/i;
42
+ const IS_MODULES = /\.module(s)?\.[^.]+$/i;
43
+
44
+ /**
45
+ * @param {string} str url string
46
+ * @param {boolean} isString is url wrapped in quotes
47
+ * @returns {string} normalized url
48
+ */
49
+ const normalizeUrl = (str, isString) => {
50
+ // Remove extra spaces and newlines:
51
+ // `url("im\
52
+ // g.png")`
53
+ if (isString) {
54
+ str = str.replace(STRING_MULTILINE, "");
55
+ }
56
+
57
+ str = str
58
+ // Remove unnecessary spaces from `url(" img.png ")`
59
+ .replace(TRIM_WHITE_SPACES, "")
60
+ // Unescape
61
+ .replace(UNESCAPE, match => {
62
+ if (match.length > 2) {
63
+ return String.fromCharCode(Number.parseInt(match.slice(1).trim(), 16));
64
+ }
65
+ return match[1];
66
+ });
67
+
68
+ if (/^data:/i.test(str)) {
69
+ return str;
70
+ }
71
+
72
+ if (str.includes("%")) {
73
+ // Convert `url('%2E/img.png')` -> `url('./img.png')`
74
+ try {
75
+ str = decodeURIComponent(str);
76
+ } catch (_err) {
77
+ // Ignore
78
+ }
79
+ }
80
+
81
+ return str;
82
+ };
83
+
84
+ class LocConverter {
85
+ /**
86
+ * @param {string} input input
87
+ */
88
+ constructor(input) {
89
+ this._input = input;
90
+ this.line = 1;
91
+ this.column = 0;
92
+ this.pos = 0;
93
+ }
94
+
95
+ /**
96
+ * @param {number} pos position
97
+ * @returns {LocConverter} location converter
98
+ */
99
+ get(pos) {
100
+ if (this.pos !== pos) {
101
+ if (this.pos < pos) {
102
+ const str = this._input.slice(this.pos, pos);
103
+ let i = str.lastIndexOf("\n");
104
+ if (i === -1) {
105
+ this.column += str.length;
106
+ } else {
107
+ this.column = str.length - i - 1;
108
+ this.line++;
109
+ while (i > 0 && (i = str.lastIndexOf("\n", i - 1)) !== -1)
110
+ this.line++;
111
+ }
112
+ } else {
113
+ let i = this._input.lastIndexOf("\n", this.pos);
114
+ while (i >= pos) {
115
+ this.line--;
116
+ i = i > 0 ? this._input.lastIndexOf("\n", i - 1) : -1;
117
+ }
118
+ this.column = pos - i;
119
+ }
120
+ this.pos = pos;
121
+ }
122
+ return this;
123
+ }
124
+ }
125
+
126
+ const CSS_MODE_TOP_LEVEL = 0;
127
+ const CSS_MODE_IN_BLOCK = 1;
128
+ const CSS_MODE_IN_AT_IMPORT = 2;
129
+ const CSS_MODE_AT_IMPORT_INVALID = 3;
130
+ const CSS_MODE_AT_NAMESPACE_INVALID = 4;
131
+
132
+ class CssParser extends Parser {
133
+ constructor({
134
+ allowModeSwitch = true,
135
+ defaultMode = "global",
136
+ namedExports = true
137
+ } = {}) {
138
+ super();
139
+ this.allowModeSwitch = allowModeSwitch;
140
+ this.defaultMode = defaultMode;
141
+ this.namedExports = namedExports;
142
+ }
143
+
144
+ /**
145
+ * @param {ParserState} state parser state
146
+ * @param {string} message warning message
147
+ * @param {LocConverter} locConverter location converter
148
+ * @param {number} start start offset
149
+ * @param {number} end end offset
150
+ */
151
+ _emitWarning(state, message, locConverter, start, end) {
152
+ const { line: sl, column: sc } = locConverter.get(start);
153
+ const { line: el, column: ec } = locConverter.get(end);
154
+
155
+ state.current.addWarning(
156
+ new ModuleDependencyWarning(state.module, new WebpackError(message), {
157
+ start: { line: sl, column: sc },
158
+ end: { line: el, column: ec }
159
+ })
160
+ );
161
+ }
162
+
163
+ /**
164
+ * @param {string | Buffer | PreparsedAst} source the source to parse
165
+ * @param {ParserState} state the parser state
166
+ * @returns {ParserState} the parser state
167
+ */
168
+ parse(source, state) {
169
+ if (Buffer.isBuffer(source)) {
170
+ source = source.toString("utf-8");
171
+ } else if (typeof source === "object") {
172
+ throw new Error("webpackAst is unexpected for the CssParser");
173
+ }
174
+ if (source[0] === "\uFEFF") {
175
+ source = source.slice(1);
176
+ }
177
+
178
+ const module = state.module;
179
+
180
+ /** @type {string | undefined} */
181
+ let oldDefaultMode;
182
+
183
+ if (
184
+ module.type === CSS_MODULE_TYPE_AUTO &&
185
+ IS_MODULES.test(
186
+ parseResource(module.matchResource || module.resource).path
187
+ )
188
+ ) {
189
+ oldDefaultMode = this.defaultMode;
190
+
191
+ this.defaultMode = "local";
192
+ }
193
+
194
+ const locConverter = new LocConverter(source);
195
+ /** @type {Set<string>} */
196
+ const declaredCssVariables = new Set();
197
+ /** @type {number} */
198
+ let scope = CSS_MODE_TOP_LEVEL;
199
+ /** @type {number} */
200
+ let blockNestingLevel = 0;
201
+ /** @type {boolean} */
202
+ let allowImportAtRule = true;
203
+ /** @type {"local" | "global" | undefined} */
204
+ let modeData;
205
+ /** @type {[number, number] | undefined} */
206
+ let lastIdentifier;
207
+ /** @type [string, number, number][] */
208
+ const balanced = [];
209
+ /** @type {undefined | { start: number, url?: string, urlStart?: number, urlEnd?: number, layer?: string, layerStart?: number, layerEnd?: number, supports?: string, supportsStart?: number, supportsEnd?: number, inSupports?:boolean, media?: string }} */
210
+ let importData;
211
+ /** @type {boolean} */
212
+ let inAnimationProperty = false;
213
+ /** @type {boolean} */
214
+ let isNextRulePrelude = true;
215
+
216
+ /**
217
+ * @param {string} input input
218
+ * @param {number} pos position
219
+ * @returns {boolean} true, when next is nested syntax
220
+ */
221
+ const isNextNestedSyntax = (input, pos) => {
222
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
223
+
224
+ if (input[pos] === "}") {
225
+ return false;
226
+ }
227
+
228
+ // According spec only identifier can be used as a property name
229
+ const isIdentifier = walkCssTokens.isIdentStartCodePoint(
230
+ input.charCodeAt(pos)
231
+ );
232
+
233
+ return !isIdentifier;
234
+ };
235
+ /**
236
+ * @returns {boolean} true, when in local scope
237
+ */
238
+ const isLocalMode = () =>
239
+ modeData === "local" ||
240
+ (this.defaultMode === "local" && modeData === undefined);
241
+ /**
242
+ * @param {string} chars characters
243
+ * @returns {(input: string, pos: number) => number} function to eat characters
244
+ */
245
+ const eatUntil = chars => {
246
+ const charCodes = Array.from({ length: chars.length }, (_, i) =>
247
+ chars.charCodeAt(i)
248
+ );
249
+ const arr = Array.from(
250
+ { length: charCodes.reduce((a, b) => Math.max(a, b), 0) + 1 },
251
+ () => false
252
+ );
253
+ for (const cc of charCodes) {
254
+ arr[cc] = true;
255
+ }
256
+ return (input, pos) => {
257
+ for (;;) {
258
+ const cc = input.charCodeAt(pos);
259
+ if (cc < arr.length && arr[cc]) {
260
+ return pos;
261
+ }
262
+ pos++;
263
+ if (pos === input.length) return pos;
264
+ }
265
+ };
266
+ };
267
+ /**
268
+ * @param {string} input input
269
+ * @param {number} pos start position
270
+ * @param {(input: string, pos: number) => number} eater eater
271
+ * @returns {[number,string]} new position and text
272
+ */
273
+ const eatText = (input, pos, eater) => {
274
+ let text = "";
275
+ for (;;) {
276
+ if (input.charCodeAt(pos) === CC_SLASH) {
277
+ const newPos = walkCssTokens.eatComments(input, pos);
278
+ if (pos !== newPos) {
279
+ pos = newPos;
280
+ if (pos === input.length) break;
281
+ } else {
282
+ text += "/";
283
+ pos++;
284
+ if (pos === input.length) break;
285
+ }
286
+ }
287
+ const newPos = eater(input, pos);
288
+ if (pos !== newPos) {
289
+ text += input.slice(pos, newPos);
290
+ pos = newPos;
291
+ } else {
292
+ break;
293
+ }
294
+ if (pos === input.length) break;
295
+ }
296
+ return [pos, text.trimEnd()];
297
+ };
298
+ const eatExportName = eatUntil(":};/");
299
+ const eatExportValue = eatUntil("};/");
300
+ /**
301
+ * @param {string} input input
302
+ * @param {number} pos start position
303
+ * @returns {number} position after parse
304
+ */
305
+ const parseExports = (input, pos) => {
306
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
307
+ const cc = input.charCodeAt(pos);
308
+ if (cc !== CC_LEFT_CURLY) {
309
+ this._emitWarning(
310
+ state,
311
+ `Unexpected '${input[pos]}' at ${pos} during parsing of ':export' (expected '{')`,
312
+ locConverter,
313
+ pos,
314
+ pos
315
+ );
316
+ return pos;
317
+ }
318
+ pos++;
319
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
320
+ for (;;) {
321
+ if (input.charCodeAt(pos) === CC_RIGHT_CURLY) break;
322
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
323
+ if (pos === input.length) return pos;
324
+ const start = pos;
325
+ let name;
326
+ [pos, name] = eatText(input, pos, eatExportName);
327
+ if (pos === input.length) return pos;
328
+ if (input.charCodeAt(pos) !== CC_COLON) {
329
+ this._emitWarning(
330
+ state,
331
+ `Unexpected '${input[pos]}' at ${pos} during parsing of export name in ':export' (expected ':')`,
332
+ locConverter,
333
+ start,
334
+ pos
335
+ );
336
+ return pos;
337
+ }
338
+ pos++;
339
+ if (pos === input.length) return pos;
340
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
341
+ if (pos === input.length) return pos;
342
+ let value;
343
+ [pos, value] = eatText(input, pos, eatExportValue);
344
+ if (pos === input.length) return pos;
345
+ const cc = input.charCodeAt(pos);
346
+ if (cc === CC_SEMICOLON) {
347
+ pos++;
348
+ if (pos === input.length) return pos;
349
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
350
+ if (pos === input.length) return pos;
351
+ } else if (cc !== CC_RIGHT_CURLY) {
352
+ this._emitWarning(
353
+ state,
354
+ `Unexpected '${input[pos]}' at ${pos} during parsing of export value in ':export' (expected ';' or '}')`,
355
+ locConverter,
356
+ start,
357
+ pos
358
+ );
359
+ return pos;
360
+ }
361
+ const dep = new CssExportDependency(name, value);
362
+ const { line: sl, column: sc } = locConverter.get(start);
363
+ const { line: el, column: ec } = locConverter.get(pos);
364
+ dep.setLoc(sl, sc, el, ec);
365
+ module.addDependency(dep);
366
+ }
367
+ pos++;
368
+ if (pos === input.length) return pos;
369
+ pos = walkCssTokens.eatWhiteLine(input, pos);
370
+ return pos;
371
+ };
372
+ const eatPropertyName = eatUntil(":{};");
373
+ /**
374
+ * @param {string} input input
375
+ * @param {number} pos name start position
376
+ * @param {number} end name end position
377
+ * @returns {number} position after handling
378
+ */
379
+ const processLocalDeclaration = (input, pos, end) => {
380
+ modeData = undefined;
381
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
382
+ const propertyNameStart = pos;
383
+ const [propertyNameEnd, propertyName] = eatText(
384
+ input,
385
+ pos,
386
+ eatPropertyName
387
+ );
388
+ if (input.charCodeAt(propertyNameEnd) !== CC_COLON) return end;
389
+ pos = propertyNameEnd + 1;
390
+ if (propertyName.startsWith("--")) {
391
+ // CSS Variable
392
+ const { line: sl, column: sc } = locConverter.get(propertyNameStart);
393
+ const { line: el, column: ec } = locConverter.get(propertyNameEnd);
394
+ const name = propertyName.slice(2);
395
+ const dep = new CssLocalIdentifierDependency(
396
+ name,
397
+ [propertyNameStart, propertyNameEnd],
398
+ "--"
399
+ );
400
+ dep.setLoc(sl, sc, el, ec);
401
+ module.addDependency(dep);
402
+ declaredCssVariables.add(name);
403
+ } else if (
404
+ !propertyName.startsWith("--") &&
405
+ OPTIONALLY_VENDOR_PREFIXED_ANIMATION_PROPERTY.test(propertyName)
406
+ ) {
407
+ inAnimationProperty = true;
408
+ }
409
+ return pos;
410
+ };
411
+ /**
412
+ * @param {string} input input
413
+ */
414
+ const processDeclarationValueDone = input => {
415
+ if (inAnimationProperty && lastIdentifier) {
416
+ const { line: sl, column: sc } = locConverter.get(lastIdentifier[0]);
417
+ const { line: el, column: ec } = locConverter.get(lastIdentifier[1]);
418
+ const name = input.slice(lastIdentifier[0], lastIdentifier[1]);
419
+ const dep = new CssSelfLocalIdentifierDependency(name, lastIdentifier);
420
+ dep.setLoc(sl, sc, el, ec);
421
+ module.addDependency(dep);
422
+ lastIdentifier = undefined;
423
+ }
424
+ };
425
+ const eatKeyframes = eatUntil("{};/");
426
+ const eatNameInVar = eatUntil(",)};/");
427
+ walkCssTokens(source, {
428
+ isSelector: () => isNextRulePrelude,
429
+ url: (input, start, end, contentStart, contentEnd) => {
430
+ const value = normalizeUrl(
431
+ input.slice(contentStart, contentEnd),
432
+ false
433
+ );
434
+
435
+ switch (scope) {
436
+ case CSS_MODE_IN_AT_IMPORT: {
437
+ // Do not parse URLs in `supports(...)`
438
+ if (importData.inSupports) {
439
+ break;
440
+ }
441
+
442
+ if (importData.url) {
443
+ this._emitWarning(
444
+ state,
445
+ `Duplicate of 'url(...)' in '${input.slice(
446
+ importData.start,
447
+ end
448
+ )}'`,
449
+ locConverter,
450
+ start,
451
+ end
452
+ );
453
+
454
+ break;
455
+ }
456
+
457
+ importData.url = value;
458
+ importData.urlStart = start;
459
+ importData.urlEnd = end;
460
+ break;
461
+ }
462
+ // Do not parse URLs in import between rules
463
+ case CSS_MODE_AT_NAMESPACE_INVALID:
464
+ case CSS_MODE_AT_IMPORT_INVALID: {
465
+ break;
466
+ }
467
+ case CSS_MODE_IN_BLOCK: {
468
+ // Ignore `url()`, `url('')` and `url("")`, they are valid by spec
469
+ if (value.length === 0) {
470
+ break;
471
+ }
472
+
473
+ const dep = new CssUrlDependency(value, [start, end], "url");
474
+ const { line: sl, column: sc } = locConverter.get(start);
475
+ const { line: el, column: ec } = locConverter.get(end);
476
+ dep.setLoc(sl, sc, el, ec);
477
+ module.addDependency(dep);
478
+ module.addCodeGenerationDependency(dep);
479
+ break;
480
+ }
481
+ }
482
+ return end;
483
+ },
484
+ string: (input, start, end) => {
485
+ switch (scope) {
486
+ case CSS_MODE_IN_AT_IMPORT: {
487
+ const insideURLFunction =
488
+ balanced[balanced.length - 1] &&
489
+ balanced[balanced.length - 1][0] === "url";
490
+
491
+ // Do not parse URLs in `supports(...)` and other strings if we already have a URL
492
+ if (
493
+ importData.inSupports ||
494
+ (!insideURLFunction && importData.url)
495
+ ) {
496
+ break;
497
+ }
498
+
499
+ if (insideURLFunction && importData.url) {
500
+ this._emitWarning(
501
+ state,
502
+ `Duplicate of 'url(...)' in '${input.slice(
503
+ importData.start,
504
+ end
505
+ )}'`,
506
+ locConverter,
507
+ start,
508
+ end
509
+ );
510
+
511
+ break;
512
+ }
513
+
514
+ importData.url = normalizeUrl(
515
+ input.slice(start + 1, end - 1),
516
+ true
517
+ );
518
+
519
+ if (!insideURLFunction) {
520
+ importData.urlStart = start;
521
+ importData.urlEnd = end;
522
+ }
523
+
524
+ break;
525
+ }
526
+ case CSS_MODE_IN_BLOCK: {
527
+ // TODO move escaped parsing to tokenizer
528
+ const last = balanced[balanced.length - 1];
529
+
530
+ if (
531
+ last &&
532
+ (last[0].replace(/\\/g, "").toLowerCase() === "url" ||
533
+ IMAGE_SET_FUNCTION.test(last[0].replace(/\\/g, "")))
534
+ ) {
535
+ const value = normalizeUrl(input.slice(start + 1, end - 1), true);
536
+
537
+ // Ignore `url()`, `url('')` and `url("")`, they are valid by spec
538
+ if (value.length === 0) {
539
+ break;
540
+ }
541
+
542
+ const isUrl = last[0].replace(/\\/g, "").toLowerCase() === "url";
543
+ const dep = new CssUrlDependency(
544
+ value,
545
+ [start, end],
546
+ isUrl ? "string" : "url"
547
+ );
548
+ const { line: sl, column: sc } = locConverter.get(start);
549
+ const { line: el, column: ec } = locConverter.get(end);
550
+ dep.setLoc(sl, sc, el, ec);
551
+ module.addDependency(dep);
552
+ module.addCodeGenerationDependency(dep);
553
+ }
554
+ }
555
+ }
556
+ return end;
557
+ },
558
+ atKeyword: (input, start, end) => {
559
+ const name = input.slice(start, end).toLowerCase();
560
+ if (name === "@namespace") {
561
+ scope = CSS_MODE_AT_NAMESPACE_INVALID;
562
+ this._emitWarning(
563
+ state,
564
+ "'@namespace' is not supported in bundled CSS",
565
+ locConverter,
566
+ start,
567
+ end
568
+ );
569
+ return end;
570
+ } else if (name === "@import") {
571
+ if (!allowImportAtRule) {
572
+ scope = CSS_MODE_AT_IMPORT_INVALID;
573
+ this._emitWarning(
574
+ state,
575
+ "Any '@import' rules must precede all other rules",
576
+ locConverter,
577
+ start,
578
+ end
579
+ );
580
+ return end;
581
+ }
582
+
583
+ scope = CSS_MODE_IN_AT_IMPORT;
584
+ importData = { start };
585
+ } else if (
586
+ this.allowModeSwitch &&
587
+ OPTIONALLY_VENDOR_PREFIXED_KEYFRAMES_AT_RULE.test(name)
588
+ ) {
589
+ let pos = end;
590
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
591
+ if (pos === input.length) return pos;
592
+ const [newPos, name] = eatText(input, pos, eatKeyframes);
593
+ if (newPos === input.length) return newPos;
594
+ if (input.charCodeAt(newPos) !== CC_LEFT_CURLY) {
595
+ this._emitWarning(
596
+ state,
597
+ `Unexpected '${input[newPos]}' at ${newPos} during parsing of @keyframes (expected '{')`,
598
+ locConverter,
599
+ start,
600
+ end
601
+ );
602
+
603
+ return newPos;
604
+ }
605
+ if (isLocalMode()) {
606
+ const { line: sl, column: sc } = locConverter.get(pos);
607
+ const { line: el, column: ec } = locConverter.get(newPos);
608
+ const dep = new CssLocalIdentifierDependency(name, [pos, newPos]);
609
+ dep.setLoc(sl, sc, el, ec);
610
+ module.addDependency(dep);
611
+ }
612
+ pos = newPos;
613
+ return pos + 1;
614
+ } else if (this.allowModeSwitch && name === "@property") {
615
+ let pos = end;
616
+ pos = walkCssTokens.eatWhitespaceAndComments(input, pos);
617
+ if (pos === input.length) return pos;
618
+ const propertyNameStart = pos;
619
+ const [propertyNameEnd, propertyName] = eatText(
620
+ input,
621
+ pos,
622
+ eatKeyframes
623
+ );
624
+ if (propertyNameEnd === input.length) return propertyNameEnd;
625
+ if (!propertyName.startsWith("--")) return propertyNameEnd;
626
+ if (input.charCodeAt(propertyNameEnd) !== CC_LEFT_CURLY) {
627
+ this._emitWarning(
628
+ state,
629
+ `Unexpected '${input[propertyNameEnd]}' at ${propertyNameEnd} during parsing of @property (expected '{')`,
630
+ locConverter,
631
+ start,
632
+ end
633
+ );
634
+
635
+ return propertyNameEnd;
636
+ }
637
+ const name = propertyName.slice(2);
638
+ declaredCssVariables.add(name);
639
+ if (isLocalMode()) {
640
+ const { line: sl, column: sc } = locConverter.get(pos);
641
+ const { line: el, column: ec } = locConverter.get(propertyNameEnd);
642
+ const dep = new CssLocalIdentifierDependency(
643
+ name,
644
+ [propertyNameStart, propertyNameEnd],
645
+ "--"
646
+ );
647
+ dep.setLoc(sl, sc, el, ec);
648
+ module.addDependency(dep);
649
+ }
650
+ pos = propertyNameEnd;
651
+ return pos + 1;
652
+ } else if (
653
+ name === "@media" ||
654
+ name === "@supports" ||
655
+ name === "@layer" ||
656
+ name === "@container"
657
+ ) {
658
+ modeData = isLocalMode() ? "local" : "global";
659
+ isNextRulePrelude = true;
660
+ return end;
661
+ } else if (this.allowModeSwitch) {
662
+ modeData = "global";
663
+ isNextRulePrelude = false;
664
+ }
665
+ return end;
666
+ },
667
+ semicolon: (input, start, end) => {
668
+ switch (scope) {
669
+ case CSS_MODE_IN_AT_IMPORT: {
670
+ const { start } = importData;
671
+
672
+ if (importData.url === undefined) {
673
+ this._emitWarning(
674
+ state,
675
+ `Expected URL in '${input.slice(start, end)}'`,
676
+ locConverter,
677
+ start,
678
+ end
679
+ );
680
+ importData = undefined;
681
+ scope = CSS_MODE_TOP_LEVEL;
682
+ return end;
683
+ }
684
+ if (
685
+ importData.urlStart > importData.layerStart ||
686
+ importData.urlStart > importData.supportsStart
687
+ ) {
688
+ this._emitWarning(
689
+ state,
690
+ `An URL in '${input.slice(
691
+ start,
692
+ end
693
+ )}' should be before 'layer(...)' or 'supports(...)'`,
694
+ locConverter,
695
+ start,
696
+ end
697
+ );
698
+ importData = undefined;
699
+ scope = CSS_MODE_TOP_LEVEL;
700
+ return end;
701
+ }
702
+ if (importData.layerStart > importData.supportsStart) {
703
+ this._emitWarning(
704
+ state,
705
+ `The 'layer(...)' in '${input.slice(
706
+ start,
707
+ end
708
+ )}' should be before 'supports(...)'`,
709
+ locConverter,
710
+ start,
711
+ end
712
+ );
713
+ importData = undefined;
714
+ scope = CSS_MODE_TOP_LEVEL;
715
+ return end;
716
+ }
717
+
718
+ const semicolonPos = end;
719
+ end = walkCssTokens.eatWhiteLine(input, end);
720
+ const { line: sl, column: sc } = locConverter.get(start);
721
+ const { line: el, column: ec } = locConverter.get(end);
722
+ const lastEnd =
723
+ importData.supportsEnd ||
724
+ importData.layerEnd ||
725
+ importData.urlEnd ||
726
+ start;
727
+ const pos = walkCssTokens.eatWhitespaceAndComments(input, lastEnd);
728
+ // Prevent to consider comments as a part of media query
729
+ if (pos !== semicolonPos - 1) {
730
+ importData.media = input.slice(lastEnd, semicolonPos - 1).trim();
731
+ }
732
+
733
+ const url = importData.url.trim();
734
+
735
+ if (url.length === 0) {
736
+ const dep = new ConstDependency("", [start, end]);
737
+ module.addPresentationalDependency(dep);
738
+ dep.setLoc(sl, sc, el, ec);
739
+ } else {
740
+ const dep = new CssImportDependency(
741
+ url,
742
+ [start, end],
743
+ importData.layer,
744
+ importData.supports,
745
+ importData.media && importData.media.length > 0
746
+ ? importData.media
747
+ : undefined
748
+ );
749
+ dep.setLoc(sl, sc, el, ec);
750
+ module.addDependency(dep);
751
+ }
752
+
753
+ importData = undefined;
754
+ scope = CSS_MODE_TOP_LEVEL;
755
+
756
+ break;
757
+ }
758
+ case CSS_MODE_AT_IMPORT_INVALID:
759
+ case CSS_MODE_AT_NAMESPACE_INVALID: {
760
+ scope = CSS_MODE_TOP_LEVEL;
761
+
762
+ break;
763
+ }
764
+ case CSS_MODE_IN_BLOCK: {
765
+ if (this.allowModeSwitch) {
766
+ processDeclarationValueDone(input);
767
+ inAnimationProperty = false;
768
+ isNextRulePrelude = isNextNestedSyntax(input, end);
769
+ }
770
+ break;
771
+ }
772
+ }
773
+ return end;
774
+ },
775
+ leftCurlyBracket: (input, start, end) => {
776
+ switch (scope) {
777
+ case CSS_MODE_TOP_LEVEL: {
778
+ allowImportAtRule = false;
779
+ scope = CSS_MODE_IN_BLOCK;
780
+ blockNestingLevel = 1;
781
+
782
+ if (this.allowModeSwitch) {
783
+ isNextRulePrelude = isNextNestedSyntax(input, end);
784
+ }
785
+
786
+ break;
787
+ }
788
+ case CSS_MODE_IN_BLOCK: {
789
+ blockNestingLevel++;
790
+
791
+ if (this.allowModeSwitch) {
792
+ isNextRulePrelude = isNextNestedSyntax(input, end);
793
+ }
794
+ break;
795
+ }
796
+ }
797
+ return end;
798
+ },
799
+ rightCurlyBracket: (input, start, end) => {
800
+ switch (scope) {
801
+ case CSS_MODE_IN_BLOCK: {
802
+ if (isLocalMode()) {
803
+ processDeclarationValueDone(input);
804
+ inAnimationProperty = false;
805
+ }
806
+ if (--blockNestingLevel === 0) {
807
+ scope = CSS_MODE_TOP_LEVEL;
808
+
809
+ if (this.allowModeSwitch) {
810
+ isNextRulePrelude = true;
811
+ modeData = undefined;
812
+ }
813
+ } else if (this.allowModeSwitch) {
814
+ isNextRulePrelude = isNextNestedSyntax(input, end);
815
+ }
816
+ break;
817
+ }
818
+ }
819
+ return end;
820
+ },
821
+ identifier: (input, start, end) => {
822
+ switch (scope) {
823
+ case CSS_MODE_IN_BLOCK: {
824
+ if (isLocalMode()) {
825
+ // Handle only top level values and not inside functions
826
+ if (inAnimationProperty && balanced.length === 0) {
827
+ lastIdentifier = [start, end];
828
+ } else {
829
+ return processLocalDeclaration(input, start, end);
830
+ }
831
+ }
832
+ break;
833
+ }
834
+ case CSS_MODE_IN_AT_IMPORT: {
835
+ if (input.slice(start, end).toLowerCase() === "layer") {
836
+ importData.layer = "";
837
+ importData.layerStart = start;
838
+ importData.layerEnd = end;
839
+ }
840
+ break;
841
+ }
842
+ }
843
+ return end;
844
+ },
845
+ class: (input, start, end) => {
846
+ if (isLocalMode()) {
847
+ const name = input.slice(start + 1, end);
848
+ const dep = new CssLocalIdentifierDependency(name, [start + 1, end]);
849
+ const { line: sl, column: sc } = locConverter.get(start);
850
+ const { line: el, column: ec } = locConverter.get(end);
851
+ dep.setLoc(sl, sc, el, ec);
852
+ module.addDependency(dep);
853
+ }
854
+
855
+ return end;
856
+ },
857
+ id: (input, start, end) => {
858
+ if (isLocalMode()) {
859
+ const name = input.slice(start + 1, end);
860
+ const dep = new CssLocalIdentifierDependency(name, [start + 1, end]);
861
+ const { line: sl, column: sc } = locConverter.get(start);
862
+ const { line: el, column: ec } = locConverter.get(end);
863
+ dep.setLoc(sl, sc, el, ec);
864
+ module.addDependency(dep);
865
+ }
866
+ return end;
867
+ },
868
+ function: (input, start, end) => {
869
+ let name = input.slice(start, end - 1);
870
+
871
+ balanced.push([name, start, end]);
872
+
873
+ if (
874
+ scope === CSS_MODE_IN_AT_IMPORT &&
875
+ name.toLowerCase() === "supports"
876
+ ) {
877
+ importData.inSupports = true;
878
+ }
879
+
880
+ if (isLocalMode()) {
881
+ name = name.toLowerCase();
882
+
883
+ // Don't rename animation name when we have `var()` function
884
+ if (inAnimationProperty && balanced.length === 1) {
885
+ lastIdentifier = undefined;
886
+ }
887
+
888
+ if (name === "var") {
889
+ const pos = walkCssTokens.eatWhitespaceAndComments(input, end);
890
+ if (pos === input.length) return pos;
891
+ const [newPos, name] = eatText(input, pos, eatNameInVar);
892
+ if (!name.startsWith("--")) return end;
893
+ const { line: sl, column: sc } = locConverter.get(pos);
894
+ const { line: el, column: ec } = locConverter.get(newPos);
895
+ const dep = new CssSelfLocalIdentifierDependency(
896
+ name.slice(2),
897
+ [pos, newPos],
898
+ "--",
899
+ declaredCssVariables
900
+ );
901
+ dep.setLoc(sl, sc, el, ec);
902
+ module.addDependency(dep);
903
+ return newPos;
904
+ }
905
+ }
906
+
907
+ return end;
908
+ },
909
+ leftParenthesis: (input, start, end) => {
910
+ balanced.push(["(", start, end]);
911
+
912
+ return end;
913
+ },
914
+ rightParenthesis: (input, start, end) => {
915
+ const last = balanced[balanced.length - 1];
916
+ const popped = balanced.pop();
917
+
918
+ if (
919
+ this.allowModeSwitch &&
920
+ popped &&
921
+ (popped[0] === ":local" || popped[0] === ":global")
922
+ ) {
923
+ modeData = balanced[balanced.length - 1]
924
+ ? /** @type {"local" | "global"} */
925
+ (balanced[balanced.length - 1][0])
926
+ : undefined;
927
+ const dep = new ConstDependency("", [start, end]);
928
+ module.addPresentationalDependency(dep);
929
+
930
+ return end;
931
+ }
932
+
933
+ switch (scope) {
934
+ case CSS_MODE_IN_AT_IMPORT: {
935
+ if (last && last[0] === "url" && !importData.inSupports) {
936
+ importData.urlStart = last[1];
937
+ importData.urlEnd = end;
938
+ } else if (
939
+ last &&
940
+ last[0].toLowerCase() === "layer" &&
941
+ !importData.inSupports
942
+ ) {
943
+ importData.layer = input.slice(last[2], end - 1).trim();
944
+ importData.layerStart = last[1];
945
+ importData.layerEnd = end;
946
+ } else if (last && last[0].toLowerCase() === "supports") {
947
+ importData.supports = input.slice(last[2], end - 1).trim();
948
+ importData.supportsStart = last[1];
949
+ importData.supportsEnd = end;
950
+ importData.inSupports = false;
951
+ }
952
+ break;
953
+ }
954
+ }
955
+
956
+ return end;
957
+ },
958
+ pseudoClass: (input, start, end) => {
959
+ if (this.allowModeSwitch) {
960
+ const name = input.slice(start, end).toLowerCase();
961
+
962
+ if (name === ":global") {
963
+ modeData = "global";
964
+ // Eat extra whitespace and comments
965
+ end = walkCssTokens.eatWhitespace(input, end);
966
+ const dep = new ConstDependency("", [start, end]);
967
+ module.addPresentationalDependency(dep);
968
+ return end;
969
+ } else if (name === ":local") {
970
+ modeData = "local";
971
+ // Eat extra whitespace and comments
972
+ end = walkCssTokens.eatWhitespace(input, end);
973
+ const dep = new ConstDependency("", [start, end]);
974
+ module.addPresentationalDependency(dep);
975
+ return end;
976
+ }
977
+
978
+ switch (scope) {
979
+ case CSS_MODE_TOP_LEVEL: {
980
+ if (name === ":export") {
981
+ const pos = parseExports(input, end);
982
+ const dep = new ConstDependency("", [start, pos]);
983
+ module.addPresentationalDependency(dep);
984
+ return pos;
985
+ }
986
+ break;
987
+ }
988
+ }
989
+ }
990
+
991
+ return end;
992
+ },
993
+ pseudoFunction: (input, start, end) => {
994
+ let name = input.slice(start, end - 1);
995
+
996
+ balanced.push([name, start, end]);
997
+
998
+ if (this.allowModeSwitch) {
999
+ name = name.toLowerCase();
1000
+
1001
+ if (name === ":global") {
1002
+ modeData = "global";
1003
+ const dep = new ConstDependency("", [start, end]);
1004
+ module.addPresentationalDependency(dep);
1005
+ } else if (name === ":local") {
1006
+ modeData = "local";
1007
+ const dep = new ConstDependency("", [start, end]);
1008
+ module.addPresentationalDependency(dep);
1009
+ }
1010
+ }
1011
+
1012
+ return end;
1013
+ },
1014
+ comma: (input, start, end) => {
1015
+ if (this.allowModeSwitch) {
1016
+ // Reset stack for `:global .class :local .class-other` selector after
1017
+ modeData = undefined;
1018
+
1019
+ switch (scope) {
1020
+ case CSS_MODE_IN_BLOCK: {
1021
+ if (isLocalMode()) {
1022
+ processDeclarationValueDone(input);
1023
+ }
1024
+
1025
+ break;
1026
+ }
1027
+ }
1028
+ }
1029
+ return end;
1030
+ }
1031
+ });
1032
+
1033
+ if (oldDefaultMode) {
1034
+ this.defaultMode = oldDefaultMode;
1035
+ }
1036
+
1037
+ module.buildInfo.strict = true;
1038
+ module.buildMeta.exportsType = this.namedExports ? "namespace" : "default";
1039
+
1040
+ if (!this.namedExports) {
1041
+ module.buildMeta.defaultObject = "redirect";
1042
+ }
1043
+
1044
+ module.addDependency(new StaticExportsDependency([], true));
1045
+ return state;
1046
+ }
1047
+ }
1048
+
1049
+ module.exports = CssParser;