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
@@ -7,25 +7,27 @@
7
7
 
8
8
  /**
9
9
  * @typedef {object} CssTokenCallbacks
10
- * @property {(function(string, number, number, number, number): number)=} url
11
- * @property {(function(string, number, number): number)=} comment
12
- * @property {(function(string, number, number): number)=} string
13
- * @property {(function(string, number, number): number)=} leftParenthesis
14
- * @property {(function(string, number, number): number)=} rightParenthesis
15
- * @property {(function(string, number, number): number)=} function
16
- * @property {(function(string, number, number): number)=} colon
17
- * @property {(function(string, number, number): number)=} atKeyword
18
- * @property {(function(string, number, number): number)=} delim
19
- * @property {(function(string, number, number): number)=} identifier
20
- * @property {(function(string, number, number, boolean): number)=} hash
21
- * @property {(function(string, number, number): number)=} leftCurlyBracket
22
- * @property {(function(string, number, number): number)=} rightCurlyBracket
23
- * @property {(function(string, number, number): number)=} semicolon
24
- * @property {(function(string, number, number): number)=} comma
25
- * @property {(function(): boolean)=} needTerminate
10
+ * @property {((input: string, start: number, end: number, innerStart: number, innerEnd: number) => number)=} url
11
+ * @property {((input: string, start: number, end: number) => number)=} comment
12
+ * @property {((input: string, start: number, end: number) => number)=} string
13
+ * @property {((input: string, start: number, end: number) => number)=} leftCurlyBracket
14
+ * @property {((input: string, start: number, end: number) => number)=} rightCurlyBracket
15
+ * @property {((input: string, start: number, end: number) => number)=} leftParenthesis
16
+ * @property {((input: string, start: number, end: number) => number)=} rightParenthesis
17
+ * @property {((input: string, start: number, end: number) => number)=} leftSquareBracket
18
+ * @property {((input: string, start: number, end: number) => number)=} rightSquareBracket
19
+ * @property {((input: string, start: number, end: number) => number)=} function
20
+ * @property {((input: string, start: number, end: number) => number)=} colon
21
+ * @property {((input: string, start: number, end: number) => number)=} atKeyword
22
+ * @property {((input: string, start: number, end: number) => number)=} delim
23
+ * @property {((input: string, start: number, end: number) => number)=} identifier
24
+ * @property {((input: string, start: number, end: number, isId: boolean) => number)=} hash
25
+ * @property {((input: string, start: number, end: number) => number)=} semicolon
26
+ * @property {((input: string, start: number, end: number) => number)=} comma
27
+ * @property {(() => boolean)=} needTerminate
26
28
  */
27
29
 
28
- /** @typedef {function(string, number, CssTokenCallbacks): number} CharHandler */
30
+ /** @typedef {(input: string, pos: number, callbacks: CssTokenCallbacks) => number} CharHandler */
29
31
 
30
32
  // spec: https://drafts.csswg.org/css-syntax/
31
33
 
@@ -66,7 +68,7 @@ const CC_LOWER_Z = "z".charCodeAt(0);
66
68
  const CC_UPPER_A = "A".charCodeAt(0);
67
69
  const CC_UPPER_F = "F".charCodeAt(0);
68
70
  const CC_UPPER_E = "E".charCodeAt(0);
69
- const CC_UPPER_U = "E".charCodeAt(0);
71
+ const CC_UPPER_U = "U".charCodeAt(0);
70
72
  const CC_UPPER_Z = "Z".charCodeAt(0);
71
73
  const CC_0 = "0".charCodeAt(0);
72
74
  const CC_9 = "9".charCodeAt(0);
@@ -98,7 +100,7 @@ const consumeSpace = (input, pos, _callbacks) => {
98
100
  * @param {number} cc char code
99
101
  * @returns {boolean} true, if cc is a newline
100
102
  */
101
- const _isNewline = cc =>
103
+ const _isNewline = (cc) =>
102
104
  cc === CC_LINE_FEED || cc === CC_CARRIAGE_RETURN || cc === CC_FORM_FEED;
103
105
 
104
106
  /**
@@ -119,13 +121,13 @@ const consumeExtraNewline = (cc, input, pos) => {
119
121
  * @param {number} cc char code
120
122
  * @returns {boolean} true, if cc is a space (U+0009 CHARACTER TABULATION or U+0020 SPACE)
121
123
  */
122
- const _isSpace = cc => cc === CC_TAB || cc === CC_SPACE;
124
+ const _isSpace = (cc) => cc === CC_TAB || cc === CC_SPACE;
123
125
 
124
126
  /**
125
127
  * @param {number} cc char code
126
128
  * @returns {boolean} true, if cc is a whitespace
127
129
  */
128
- const _isWhiteSpace = cc => _isNewline(cc) || _isSpace(cc);
130
+ const _isWhiteSpace = (cc) => _isNewline(cc) || _isSpace(cc);
129
131
 
130
132
  /**
131
133
  * ident-start code point
@@ -134,7 +136,7 @@ const _isWhiteSpace = cc => _isNewline(cc) || _isSpace(cc);
134
136
  * @param {number} cc char code
135
137
  * @returns {boolean} true, if cc is a start code point of an identifier
136
138
  */
137
- const isIdentStartCodePoint = cc =>
139
+ const isIdentStartCodePoint = (cc) =>
138
140
  (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
139
141
  (cc >= CC_UPPER_A && cc <= CC_UPPER_Z) ||
140
142
  cc === CC_LOW_LINE ||
@@ -189,7 +191,7 @@ const consumeComments = (input, pos, callbacks) => {
189
191
  * @param {number} cc char code
190
192
  * @returns {boolean} true, if cc is a hex digit
191
193
  */
192
- const _isHexDigit = cc =>
194
+ const _isHexDigit = (cc) =>
193
195
  _isDigit(cc) ||
194
196
  (cc >= CC_UPPER_A && cc <= CC_UPPER_F) ||
195
197
  (cc >= CC_LOWER_A && cc <= CC_LOWER_F);
@@ -320,11 +322,12 @@ const consumeAStringToken = (input, pos, callbacks) => {
320
322
  const isNonASCIICodePoint = (cc, q) =>
321
323
  // Simplify
322
324
  cc > 0x80;
325
+
323
326
  /**
324
327
  * @param {number} cc char code
325
328
  * @returns {boolean} is letter
326
329
  */
327
- const isLetter = cc =>
330
+ const isLetter = (cc) =>
328
331
  (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
329
332
  (cc >= CC_UPPER_A && cc <= CC_UPPER_Z);
330
333
 
@@ -347,7 +350,7 @@ const _isIdentCodePoint = (cc, q) =>
347
350
  * @param {number} cc char code
348
351
  * @returns {boolean} is digit
349
352
  */
350
- const _isDigit = cc => cc >= CC_0 && cc <= CC_9;
353
+ const _isDigit = (cc) => cc >= CC_0 && cc <= CC_9;
351
354
 
352
355
  /**
353
356
  * @param {string} input input
@@ -716,14 +719,22 @@ const consumeRightParenthesis = (input, pos, callbacks) => {
716
719
  };
717
720
 
718
721
  /** @type {CharHandler} */
719
- const consumeLeftSquareBracket = (input, pos, callbacks) =>
722
+ const consumeLeftSquareBracket = (input, pos, callbacks) => {
720
723
  // Return a <]-token>.
721
- pos;
724
+ if (callbacks.leftSquareBracket !== undefined) {
725
+ return callbacks.leftSquareBracket(input, pos - 1, pos);
726
+ }
727
+ return pos;
728
+ };
722
729
 
723
730
  /** @type {CharHandler} */
724
- const consumeRightSquareBracket = (input, pos, callbacks) =>
731
+ const consumeRightSquareBracket = (input, pos, callbacks) => {
725
732
  // Return a <]-token>.
726
- pos;
733
+ if (callbacks.rightSquareBracket !== undefined) {
734
+ return callbacks.rightSquareBracket(input, pos - 1, pos);
735
+ }
736
+ return pos;
737
+ };
727
738
 
728
739
  /** @type {CharHandler} */
729
740
  const consumeLeftCurlyBracket = (input, pos, callbacks) => {
@@ -798,7 +809,7 @@ const _consumeAnIdentSequence = (input, pos) => {
798
809
  * @param {number} cc char code
799
810
  * @returns {boolean} true, when cc is the non-printable code point, otherwise false
800
811
  */
801
- const _isNonPrintableCodePoint = cc =>
812
+ const _isNonPrintableCodePoint = (cc) =>
802
813
  (cc >= 0x00 && cc <= 0x08) ||
803
814
  cc === 0x0b ||
804
815
  (cc >= 0x0e && cc <= 0x1f) ||
@@ -1196,14 +1207,112 @@ module.exports = (input, pos = 0, callbacks = {}) => {
1196
1207
  return pos;
1197
1208
  };
1198
1209
 
1199
- module.exports.isIdentStartCodePoint = isIdentStartCodePoint;
1210
+ /**
1211
+ * @param {string} input input css
1212
+ * @param {number} pos pos
1213
+ * @param {CssTokenCallbacks} callbacks callbacks
1214
+ * @param {CssTokenCallbacks=} additional additional callbacks
1215
+ * @param {{ onlyTopLevel?: boolean, declarationValue?: boolean, atRulePrelude?: boolean, functionValue?: boolean }=} options options
1216
+ * @returns {number} pos
1217
+ */
1218
+ const consumeUntil = (input, pos, callbacks, additional, options = {}) => {
1219
+ let needHandle = true;
1220
+ let needTerminate = false;
1221
+
1222
+ /** @type {CssTokenCallbacks} */
1223
+ const servicedCallbacks = {};
1224
+
1225
+ let balanced = 0;
1226
+
1227
+ if (options.onlyTopLevel) {
1228
+ servicedCallbacks.function = (input, start, end) => {
1229
+ balanced++;
1230
+ if (!options.functionValue) {
1231
+ needHandle = false;
1232
+ }
1233
+
1234
+ if (additional && additional.function !== undefined) {
1235
+ return additional.function(input, start, end);
1236
+ }
1237
+
1238
+ return end;
1239
+ };
1240
+
1241
+ servicedCallbacks.leftParenthesis = (_input, _start, end) => {
1242
+ balanced++;
1243
+ needHandle = false;
1244
+ return end;
1245
+ };
1246
+ servicedCallbacks.rightParenthesis = (_input, _start, end) => {
1247
+ balanced--;
1248
+ if (balanced === 0) {
1249
+ needHandle = true;
1250
+ }
1251
+ return end;
1252
+ };
1253
+ }
1254
+
1255
+ if (options.declarationValue) {
1256
+ servicedCallbacks.semicolon = (_input, _start, end) => {
1257
+ needTerminate = true;
1258
+ return end;
1259
+ };
1260
+
1261
+ servicedCallbacks.rightCurlyBracket = (_input, _start, end) => {
1262
+ needTerminate = true;
1263
+ return end;
1264
+ };
1265
+ } else if (options.functionValue) {
1266
+ servicedCallbacks.rightParenthesis = (_input, _start, end) => {
1267
+ balanced--;
1268
+ if (balanced === 0) {
1269
+ needTerminate = true;
1270
+ }
1271
+ return end;
1272
+ };
1273
+ } else if (options.atRulePrelude) {
1274
+ servicedCallbacks.leftCurlyBracket = (_input, _start, end) => {
1275
+ needTerminate = true;
1276
+ return end;
1277
+ };
1278
+ servicedCallbacks.semicolon = (_input, _start, end) => {
1279
+ needTerminate = true;
1280
+ return end;
1281
+ };
1282
+ }
1283
+
1284
+ while (pos < input.length) {
1285
+ // Consume comments.
1286
+ pos = consumeComments(
1287
+ input,
1288
+ pos,
1289
+ needHandle ? { ...servicedCallbacks, ...callbacks } : servicedCallbacks
1290
+ );
1291
+
1292
+ const start = pos;
1293
+
1294
+ // Consume the next input code point.
1295
+ pos++;
1296
+ pos = consumeAToken(
1297
+ input,
1298
+ pos,
1299
+ needHandle ? { ...servicedCallbacks, ...callbacks } : servicedCallbacks
1300
+ );
1301
+
1302
+ if (needTerminate) {
1303
+ return start;
1304
+ }
1305
+ }
1306
+
1307
+ return pos;
1308
+ };
1200
1309
 
1201
1310
  /**
1202
1311
  * @param {string} input input
1203
1312
  * @param {number} pos position
1204
1313
  * @returns {number} position after comments
1205
1314
  */
1206
- module.exports.eatComments = (input, pos) => {
1315
+ const eatComments = (input, pos) => {
1207
1316
  for (;;) {
1208
1317
  const originalPos = pos;
1209
1318
  pos = consumeComments(input, pos, {});
@@ -1220,7 +1329,7 @@ module.exports.eatComments = (input, pos) => {
1220
1329
  * @param {number} pos position
1221
1330
  * @returns {number} position after whitespace
1222
1331
  */
1223
- module.exports.eatWhitespace = (input, pos) => {
1332
+ const eatWhitespace = (input, pos) => {
1224
1333
  while (_isWhiteSpace(input.charCodeAt(pos))) {
1225
1334
  pos++;
1226
1335
  }
@@ -1231,13 +1340,18 @@ module.exports.eatWhitespace = (input, pos) => {
1231
1340
  /**
1232
1341
  * @param {string} input input
1233
1342
  * @param {number} pos position
1234
- * @returns {number} position after whitespace and comments
1343
+ * @returns {[number, boolean]} position after whitespace and comments
1235
1344
  */
1236
- module.exports.eatWhitespaceAndComments = (input, pos) => {
1345
+ const eatWhitespaceAndComments = (input, pos) => {
1346
+ let foundWhitespace = false;
1347
+
1237
1348
  for (;;) {
1238
1349
  const originalPos = pos;
1239
1350
  pos = consumeComments(input, pos, {});
1240
1351
  while (_isWhiteSpace(input.charCodeAt(pos))) {
1352
+ if (!foundWhitespace) {
1353
+ foundWhitespace = true;
1354
+ }
1241
1355
  pos++;
1242
1356
  }
1243
1357
  if (originalPos === pos) {
@@ -1245,24 +1359,7 @@ module.exports.eatWhitespaceAndComments = (input, pos) => {
1245
1359
  }
1246
1360
  }
1247
1361
 
1248
- return pos;
1249
- };
1250
-
1251
- /**
1252
- * @param {string} input input
1253
- * @param {number} pos position
1254
- * @returns {number} position after whitespace and comments
1255
- */
1256
- module.exports.eatComments = (input, pos) => {
1257
- for (;;) {
1258
- const originalPos = pos;
1259
- pos = consumeComments(input, pos, {});
1260
- if (originalPos === pos) {
1261
- break;
1262
- }
1263
- }
1264
-
1265
- return pos;
1362
+ return [pos, foundWhitespace];
1266
1363
  };
1267
1364
 
1268
1365
  /**
@@ -1270,7 +1367,7 @@ module.exports.eatComments = (input, pos) => {
1270
1367
  * @param {number} pos position
1271
1368
  * @returns {number} position after whitespace
1272
1369
  */
1273
- module.exports.eatWhiteLine = (input, pos) => {
1370
+ const eatWhiteLine = (input, pos) => {
1274
1371
  for (;;) {
1275
1372
  const cc = input.charCodeAt(pos);
1276
1373
  if (_isSpace(cc)) {
@@ -1290,8 +1387,8 @@ module.exports.eatWhiteLine = (input, pos) => {
1290
1387
  * @param {number} pos position
1291
1388
  * @returns {[number, number] | undefined} positions of ident sequence
1292
1389
  */
1293
- module.exports.skipCommentsAndEatIdentSequence = (input, pos) => {
1294
- pos = module.exports.eatComments(input, pos);
1390
+ const skipCommentsAndEatIdentSequence = (input, pos) => {
1391
+ pos = eatComments(input, pos);
1295
1392
 
1296
1393
  const start = pos;
1297
1394
 
@@ -1315,8 +1412,8 @@ module.exports.skipCommentsAndEatIdentSequence = (input, pos) => {
1315
1412
  * @param {number} pos position
1316
1413
  * @returns {[number, number] | undefined} positions of ident sequence
1317
1414
  */
1318
- module.exports.eatString = (input, pos) => {
1319
- pos = module.exports.eatWhitespaceAndComments(input, pos);
1415
+ const eatString = (input, pos) => {
1416
+ pos = eatWhitespaceAndComments(input, pos)[0];
1320
1417
 
1321
1418
  const start = pos;
1322
1419
 
@@ -1336,7 +1433,7 @@ module.exports.eatString = (input, pos) => {
1336
1433
  * @param {CssTokenCallbacks} cbs callbacks
1337
1434
  * @returns {[number, number][]} positions of ident sequence
1338
1435
  */
1339
- module.exports.eatImageSetStrings = (input, pos, cbs) => {
1436
+ const eatImageSetStrings = (input, pos, cbs) => {
1340
1437
  /** @type {[number, number][]} */
1341
1438
  const result = [];
1342
1439
 
@@ -1406,10 +1503,10 @@ module.exports.eatImageSetStrings = (input, pos, cbs) => {
1406
1503
  * @param {CssTokenCallbacks} cbs callbacks
1407
1504
  * @returns {[[number, number, number, number] | undefined, [number, number] | undefined, [number, number] | undefined, [number, number] | undefined]} positions of top level tokens
1408
1505
  */
1409
- module.exports.eatImportTokens = (input, pos, cbs) => {
1506
+ const eatImportTokens = (input, pos, cbs) => {
1410
1507
  const result =
1411
1508
  /** @type {[[number, number, number, number] | undefined, [number, number] | undefined, [number, number] | undefined, [number, number] | undefined]} */
1412
- (new Array(4));
1509
+ (Array.from({ length: 4 }));
1413
1510
 
1414
1511
  /** @type {0 | 1 | 2 | undefined} */
1415
1512
  let scope;
@@ -1548,8 +1645,8 @@ module.exports.eatImportTokens = (input, pos, cbs) => {
1548
1645
  * @param {number} pos position
1549
1646
  * @returns {[number, number] | undefined} positions of ident sequence
1550
1647
  */
1551
- module.exports.eatIdentSequence = (input, pos) => {
1552
- pos = module.exports.eatWhitespaceAndComments(input, pos);
1648
+ const eatIdentSequence = (input, pos) => {
1649
+ pos = eatWhitespaceAndComments(input, pos)[0];
1553
1650
 
1554
1651
  const start = pos;
1555
1652
 
@@ -1573,8 +1670,8 @@ module.exports.eatIdentSequence = (input, pos) => {
1573
1670
  * @param {number} pos position
1574
1671
  * @returns {[number, number, boolean] | undefined} positions of ident sequence or string
1575
1672
  */
1576
- module.exports.eatIdentSequenceOrString = (input, pos) => {
1577
- pos = module.exports.eatWhitespaceAndComments(input, pos);
1673
+ const eatIdentSequenceOrString = (input, pos) => {
1674
+ pos = eatWhitespaceAndComments(input, pos)[0];
1578
1675
 
1579
1676
  const start = pos;
1580
1677
 
@@ -1602,12 +1699,12 @@ module.exports.eatIdentSequenceOrString = (input, pos) => {
1602
1699
  * @param {string} chars characters
1603
1700
  * @returns {(input: string, pos: number) => number} function to eat characters
1604
1701
  */
1605
- module.exports.eatUntil = chars => {
1702
+ const eatUntil = (chars) => {
1606
1703
  const charCodes = Array.from({ length: chars.length }, (_, i) =>
1607
1704
  chars.charCodeAt(i)
1608
1705
  );
1609
1706
  const arr = Array.from(
1610
- { length: charCodes.reduce((a, b) => Math.max(a, b), 0) + 1 },
1707
+ { length: Math.max(...charCodes, 0) + 1 },
1611
1708
  () => false
1612
1709
  );
1613
1710
  for (const cc of charCodes) {
@@ -1625,3 +1722,19 @@ module.exports.eatUntil = chars => {
1625
1722
  }
1626
1723
  };
1627
1724
  };
1725
+
1726
+ module.exports.consumeUntil = consumeUntil;
1727
+ module.exports.eatComments = eatComments;
1728
+ module.exports.eatIdentSequence = eatIdentSequence;
1729
+ module.exports.eatIdentSequenceOrString = eatIdentSequenceOrString;
1730
+ module.exports.eatImageSetStrings = eatImageSetStrings;
1731
+ module.exports.eatImportTokens = eatImportTokens;
1732
+ module.exports.eatString = eatString;
1733
+ module.exports.eatUntil = eatUntil;
1734
+ module.exports.eatWhiteLine = eatWhiteLine;
1735
+ module.exports.eatWhitespace = eatWhitespace;
1736
+ module.exports.eatWhitespaceAndComments = eatWhitespaceAndComments;
1737
+ module.exports.isIdentStartCodePoint = isIdentStartCodePoint;
1738
+ module.exports.isWhiteSpace = _isWhiteSpace;
1739
+ module.exports.skipCommentsAndEatIdentSequence =
1740
+ skipCommentsAndEatIdentSequence;