webpack 5.76.1 → 5.88.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.

Potentially problematic release.


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

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -7,7 +7,7 @@
7
7
 
8
8
  /**
9
9
  * @typedef {Object} CssTokenCallbacks
10
- * @property {function(string, number): boolean} isSelector
10
+ * @property {function(string, number): boolean=} isSelector
11
11
  * @property {function(string, number, number, number, number): number=} url
12
12
  * @property {function(string, number, number): number=} string
13
13
  * @property {function(string, number, number): number=} leftParenthesis
@@ -36,14 +36,16 @@ const CC_FORM_FEED = "\f".charCodeAt(0);
36
36
  const CC_TAB = "\t".charCodeAt(0);
37
37
  const CC_SPACE = " ".charCodeAt(0);
38
38
 
39
- const CC_SLASH = "/".charCodeAt(0);
40
- const CC_BACK_SLASH = "\\".charCodeAt(0);
39
+ const CC_SOLIDUS = "/".charCodeAt(0);
40
+ const CC_REVERSE_SOLIDUS = "\\".charCodeAt(0);
41
41
  const CC_ASTERISK = "*".charCodeAt(0);
42
42
 
43
43
  const CC_LEFT_PARENTHESIS = "(".charCodeAt(0);
44
44
  const CC_RIGHT_PARENTHESIS = ")".charCodeAt(0);
45
45
  const CC_LEFT_CURLY = "{".charCodeAt(0);
46
46
  const CC_RIGHT_CURLY = "}".charCodeAt(0);
47
+ const CC_LEFT_SQUARE = "[".charCodeAt(0);
48
+ const CC_RIGHT_SQUARE = "]".charCodeAt(0);
47
49
 
48
50
  const CC_QUOTATION_MARK = '"'.charCodeAt(0);
49
51
  const CC_APOSTROPHE = "'".charCodeAt(0);
@@ -62,6 +64,7 @@ const CC_LOWER_E = "e".charCodeAt(0);
62
64
  const CC_LOWER_Z = "z".charCodeAt(0);
63
65
  const CC_UPPER_A = "A".charCodeAt(0);
64
66
  const CC_UPPER_E = "E".charCodeAt(0);
67
+ const CC_UPPER_U = "U".charCodeAt(0);
65
68
  const CC_UPPER_Z = "Z".charCodeAt(0);
66
69
  const CC_0 = "0".charCodeAt(0);
67
70
  const CC_9 = "9".charCodeAt(0);
@@ -73,6 +76,10 @@ const CC_HYPHEN_MINUS = "-".charCodeAt(0);
73
76
  const CC_LESS_THAN_SIGN = "<".charCodeAt(0);
74
77
  const CC_GREATER_THAN_SIGN = ">".charCodeAt(0);
75
78
 
79
+ /**
80
+ * @param {number} cc char code
81
+ * @returns {boolean} true, if cc is a newline
82
+ */
76
83
  const _isNewLine = cc => {
77
84
  return (
78
85
  cc === CC_LINE_FEED || cc === CC_CARRIAGE_RETURN || cc === CC_FORM_FEED
@@ -81,6 +88,7 @@ const _isNewLine = cc => {
81
88
 
82
89
  /** @type {CharHandler} */
83
90
  const consumeSpace = (input, pos, callbacks) => {
91
+ /** @type {number} */
84
92
  let cc;
85
93
  do {
86
94
  pos++;
@@ -89,61 +97,109 @@ const consumeSpace = (input, pos, callbacks) => {
89
97
  return pos;
90
98
  };
91
99
 
100
+ /**
101
+ * @param {number} cc char code
102
+ * @returns {boolean} true, if cc is a newline
103
+ */
104
+ const _isNewline = cc => {
105
+ return (
106
+ cc === CC_LINE_FEED || cc === CC_CARRIAGE_RETURN || cc === CC_FORM_FEED
107
+ );
108
+ };
109
+
110
+ /**
111
+ * @param {number} cc char code
112
+ * @returns {boolean} true, if cc is a space (U+0009 CHARACTER TABULATION or U+0020 SPACE)
113
+ */
114
+ const _isSpace = cc => {
115
+ return cc === CC_TAB || cc === CC_SPACE;
116
+ };
117
+
118
+ /**
119
+ * @param {number} cc char code
120
+ * @returns {boolean} true, if cc is a whitespace
121
+ */
92
122
  const _isWhiteSpace = cc => {
123
+ return _isNewline(cc) || _isSpace(cc);
124
+ };
125
+
126
+ /**
127
+ * ident-start code point
128
+ *
129
+ * A letter, a non-ASCII code point, or U+005F LOW LINE (_).
130
+ *
131
+ * @param {number} cc char code
132
+ * @returns {boolean} true, if cc is a start code point of an identifier
133
+ */
134
+ const isIdentStartCodePoint = cc => {
93
135
  return (
94
- cc === CC_LINE_FEED ||
95
- cc === CC_CARRIAGE_RETURN ||
96
- cc === CC_FORM_FEED ||
97
- cc === CC_TAB ||
98
- cc === CC_SPACE
136
+ (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
137
+ (cc >= CC_UPPER_A && cc <= CC_UPPER_Z) ||
138
+ cc === CC_LOW_LINE ||
139
+ cc >= 0x80
99
140
  );
100
141
  };
101
142
 
102
143
  /** @type {CharHandler} */
103
- const consumeSingleCharToken = (input, pos, callbacks) => {
144
+ const consumeDelimToken = (input, pos, callbacks) => {
104
145
  return pos + 1;
105
146
  };
106
147
 
107
148
  /** @type {CharHandler} */
108
- const consumePotentialComment = (input, pos, callbacks) => {
109
- pos++;
110
- if (pos === input.length) return pos;
111
- let cc = input.charCodeAt(pos);
112
- if (cc !== CC_ASTERISK) return pos;
113
- for (;;) {
114
- pos++;
115
- if (pos === input.length) return pos;
116
- cc = input.charCodeAt(pos);
117
- while (cc === CC_ASTERISK) {
149
+ const consumeComments = (input, pos, callbacks) => {
150
+ // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A
151
+ // ASTERISK (*), consume them and all following code points up to and including
152
+ // the first U+002A ASTERISK (*) followed by a U+002F SOLIDUS (/), or up to an
153
+ // EOF code point. Return to the start of this step.
154
+ //
155
+ // If the preceding paragraph ended by consuming an EOF code point, this is a parse error.
156
+ // But we are silent on errors.
157
+ if (
158
+ input.charCodeAt(pos) === CC_SOLIDUS &&
159
+ input.charCodeAt(pos + 1) === CC_ASTERISK
160
+ ) {
161
+ pos += 1;
162
+ while (pos < input.length) {
163
+ if (
164
+ input.charCodeAt(pos) === CC_ASTERISK &&
165
+ input.charCodeAt(pos + 1) === CC_SOLIDUS
166
+ ) {
167
+ pos += 2;
168
+ break;
169
+ }
118
170
  pos++;
119
- if (pos === input.length) return pos;
120
- cc = input.charCodeAt(pos);
121
- if (cc === CC_SLASH) return pos + 1;
122
171
  }
123
172
  }
173
+ return pos;
124
174
  };
125
175
 
126
176
  /** @type {function(number): CharHandler} */
127
- const consumeString = end => (input, pos, callbacks) => {
177
+ const consumeString = quote_cc => (input, pos, callbacks) => {
128
178
  const start = pos;
129
- pos = _consumeString(input, pos, end);
179
+ pos = _consumeString(input, pos, quote_cc);
130
180
  if (callbacks.string !== undefined) {
131
181
  pos = callbacks.string(input, start, pos);
132
182
  }
133
183
  return pos;
134
184
  };
135
185
 
136
- const _consumeString = (input, pos, end) => {
186
+ /**
187
+ * @param {string} input input
188
+ * @param {number} pos position
189
+ * @param {number} quote_cc quote char code
190
+ * @returns {number} new position
191
+ */
192
+ const _consumeString = (input, pos, quote_cc) => {
137
193
  pos++;
138
194
  for (;;) {
139
195
  if (pos === input.length) return pos;
140
196
  const cc = input.charCodeAt(pos);
141
- if (cc === end) return pos + 1;
197
+ if (cc === quote_cc) return pos + 1;
142
198
  if (_isNewLine(cc)) {
143
199
  // bad string
144
200
  return pos;
145
201
  }
146
- if (cc === CC_BACK_SLASH) {
202
+ if (cc === CC_REVERSE_SOLIDUS) {
147
203
  // we don't need to fully parse the escaped code point
148
204
  // just skip over a potential new line
149
205
  pos++;
@@ -155,6 +211,10 @@ const _consumeString = (input, pos, end) => {
155
211
  }
156
212
  };
157
213
 
214
+ /**
215
+ * @param {number} cc char code
216
+ * @returns {boolean} is identifier start code
217
+ */
158
218
  const _isIdentifierStartCode = cc => {
159
219
  return (
160
220
  cc === CC_LOW_LINE ||
@@ -164,23 +224,43 @@ const _isIdentifierStartCode = cc => {
164
224
  );
165
225
  };
166
226
 
227
+ /**
228
+ * @param {number} first first code point
229
+ * @param {number} second second code point
230
+ * @returns {boolean} true if two code points are a valid escape
231
+ */
232
+ const _isTwoCodePointsAreValidEscape = (first, second) => {
233
+ if (first !== CC_REVERSE_SOLIDUS) return false;
234
+ if (_isNewLine(second)) return false;
235
+ return true;
236
+ };
237
+
238
+ /**
239
+ * @param {number} cc char code
240
+ * @returns {boolean} is digit
241
+ */
167
242
  const _isDigit = cc => {
168
243
  return cc >= CC_0 && cc <= CC_9;
169
244
  };
170
245
 
246
+ /**
247
+ * @param {string} input input
248
+ * @param {number} pos position
249
+ * @returns {boolean} true, if input at pos starts an identifier
250
+ */
171
251
  const _startsIdentifier = (input, pos) => {
172
252
  const cc = input.charCodeAt(pos);
173
253
  if (cc === CC_HYPHEN_MINUS) {
174
254
  if (pos === input.length) return false;
175
255
  const cc = input.charCodeAt(pos + 1);
176
256
  if (cc === CC_HYPHEN_MINUS) return true;
177
- if (cc === CC_BACK_SLASH) {
257
+ if (cc === CC_REVERSE_SOLIDUS) {
178
258
  const cc = input.charCodeAt(pos + 2);
179
259
  return !_isNewLine(cc);
180
260
  }
181
261
  return _isIdentifierStartCode(cc);
182
262
  }
183
- if (cc === CC_BACK_SLASH) {
263
+ if (cc === CC_REVERSE_SOLIDUS) {
184
264
  const cc = input.charCodeAt(pos + 1);
185
265
  return !_isNewLine(cc);
186
266
  }
@@ -193,7 +273,7 @@ const consumeNumberSign = (input, pos, callbacks) => {
193
273
  pos++;
194
274
  if (pos === input.length) return pos;
195
275
  if (callbacks.isSelector(input, pos) && _startsIdentifier(input, pos)) {
196
- pos = _consumeIdentifier(input, pos);
276
+ pos = _consumeIdentifier(input, pos, callbacks);
197
277
  if (callbacks.id !== undefined) {
198
278
  return callbacks.id(input, start, pos);
199
279
  }
@@ -207,6 +287,7 @@ const consumeMinus = (input, pos, callbacks) => {
207
287
  pos++;
208
288
  if (pos === input.length) return pos;
209
289
  const cc = input.charCodeAt(pos);
290
+ // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.
210
291
  if (cc === CC_FULL_STOP || _isDigit(cc)) {
211
292
  return consumeNumericToken(input, pos, callbacks);
212
293
  } else if (cc === CC_HYPHEN_MINUS) {
@@ -216,25 +297,21 @@ const consumeMinus = (input, pos, callbacks) => {
216
297
  if (cc === CC_GREATER_THAN_SIGN) {
217
298
  return pos + 1;
218
299
  } else {
219
- pos = _consumeIdentifier(input, pos);
300
+ pos = _consumeIdentifier(input, pos, callbacks);
220
301
  if (callbacks.identifier !== undefined) {
221
302
  return callbacks.identifier(input, start, pos);
222
303
  }
223
304
  }
224
- } else if (cc === CC_BACK_SLASH) {
305
+ } else if (cc === CC_REVERSE_SOLIDUS) {
225
306
  if (pos + 1 === input.length) return pos;
226
307
  const cc = input.charCodeAt(pos + 1);
227
308
  if (_isNewLine(cc)) return pos;
228
- pos = _consumeIdentifier(input, pos);
309
+ pos = _consumeIdentifier(input, pos, callbacks);
229
310
  if (callbacks.identifier !== undefined) {
230
311
  return callbacks.identifier(input, start, pos);
231
312
  }
232
313
  } else if (_isIdentifierStartCode(cc)) {
233
- pos++;
234
- pos = _consumeIdentifier(input, pos);
235
- if (callbacks.identifier !== undefined) {
236
- return callbacks.identifier(input, start, pos);
237
- }
314
+ pos = consumeOtherIdentifier(input, pos - 1, callbacks);
238
315
  }
239
316
  return pos;
240
317
  };
@@ -248,16 +325,17 @@ const consumeDot = (input, pos, callbacks) => {
248
325
  if (_isDigit(cc)) return consumeNumericToken(input, pos - 2, callbacks);
249
326
  if (!callbacks.isSelector(input, pos) || !_startsIdentifier(input, pos))
250
327
  return pos;
251
- pos = _consumeIdentifier(input, pos);
328
+ pos = _consumeIdentifier(input, pos, callbacks);
252
329
  if (callbacks.class !== undefined) return callbacks.class(input, start, pos);
253
330
  return pos;
254
331
  };
255
332
 
256
333
  /** @type {CharHandler} */
257
334
  const consumeNumericToken = (input, pos, callbacks) => {
258
- pos = _consumeNumber(input, pos);
335
+ pos = _consumeNumber(input, pos, callbacks);
259
336
  if (pos === input.length) return pos;
260
- if (_startsIdentifier(input, pos)) return _consumeIdentifier(input, pos);
337
+ if (_startsIdentifier(input, pos))
338
+ return _consumeIdentifier(input, pos, callbacks);
261
339
  const cc = input.charCodeAt(pos);
262
340
  if (cc === CC_PERCENTAGE) return pos + 1;
263
341
  return pos;
@@ -266,12 +344,8 @@ const consumeNumericToken = (input, pos, callbacks) => {
266
344
  /** @type {CharHandler} */
267
345
  const consumeOtherIdentifier = (input, pos, callbacks) => {
268
346
  const start = pos;
269
- pos = _consumeIdentifier(input, pos);
270
- if (
271
- pos !== input.length &&
272
- !callbacks.isSelector(input, pos) &&
273
- input.charCodeAt(pos) === CC_LEFT_PARENTHESIS
274
- ) {
347
+ pos = _consumeIdentifier(input, pos, callbacks);
348
+ if (pos !== input.length && input.charCodeAt(pos) === CC_LEFT_PARENTHESIS) {
275
349
  pos++;
276
350
  if (callbacks.function !== undefined) {
277
351
  return callbacks.function(input, start, pos);
@@ -287,8 +361,12 @@ const consumeOtherIdentifier = (input, pos, callbacks) => {
287
361
  /** @type {CharHandler} */
288
362
  const consumePotentialUrl = (input, pos, callbacks) => {
289
363
  const start = pos;
290
- pos = _consumeIdentifier(input, pos);
291
- if (pos === start + 3 && input.slice(start, pos + 1) === "url(") {
364
+ pos = _consumeIdentifier(input, pos, callbacks);
365
+ const nextPos = pos + 1;
366
+ if (
367
+ pos === start + 3 &&
368
+ input.slice(start, nextPos).toLowerCase() === "url("
369
+ ) {
292
370
  pos++;
293
371
  let cc = input.charCodeAt(pos);
294
372
  while (_isWhiteSpace(cc)) {
@@ -297,26 +375,16 @@ const consumePotentialUrl = (input, pos, callbacks) => {
297
375
  cc = input.charCodeAt(pos);
298
376
  }
299
377
  if (cc === CC_QUOTATION_MARK || cc === CC_APOSTROPHE) {
300
- pos++;
301
- const contentStart = pos;
302
- pos = _consumeString(input, pos, cc);
303
- const contentEnd = pos - 1;
304
- cc = input.charCodeAt(pos);
305
- while (_isWhiteSpace(cc)) {
306
- pos++;
307
- if (pos === input.length) return pos;
308
- cc = input.charCodeAt(pos);
378
+ if (callbacks.function !== undefined) {
379
+ return callbacks.function(input, start, nextPos);
309
380
  }
310
- if (cc !== CC_RIGHT_PARENTHESIS) return pos;
311
- pos++;
312
- if (callbacks.url !== undefined)
313
- return callbacks.url(input, start, pos, contentStart, contentEnd);
314
- return pos;
381
+ return nextPos;
315
382
  } else {
316
383
  const contentStart = pos;
384
+ /** @type {number} */
317
385
  let contentEnd;
318
386
  for (;;) {
319
- if (cc === CC_BACK_SLASH) {
387
+ if (cc === CC_REVERSE_SOLIDUS) {
320
388
  pos++;
321
389
  if (pos === input.length) return pos;
322
390
  pos++;
@@ -363,7 +431,7 @@ const consumePotentialPseudo = (input, pos, callbacks) => {
363
431
  pos++;
364
432
  if (!callbacks.isSelector(input, pos) || !_startsIdentifier(input, pos))
365
433
  return pos;
366
- pos = _consumeIdentifier(input, pos);
434
+ pos = _consumeIdentifier(input, pos, callbacks);
367
435
  let cc = input.charCodeAt(pos);
368
436
  if (cc === CC_LEFT_PARENTHESIS) {
369
437
  pos++;
@@ -432,10 +500,11 @@ const consumeComma = (input, pos, callbacks) => {
432
500
  return pos;
433
501
  };
434
502
 
503
+ /** @type {CharHandler} */
435
504
  const _consumeIdentifier = (input, pos) => {
436
505
  for (;;) {
437
506
  const cc = input.charCodeAt(pos);
438
- if (cc === CC_BACK_SLASH) {
507
+ if (cc === CC_REVERSE_SOLIDUS) {
439
508
  pos++;
440
509
  if (pos === input.length) return pos;
441
510
  pos++;
@@ -451,6 +520,7 @@ const _consumeIdentifier = (input, pos) => {
451
520
  }
452
521
  };
453
522
 
523
+ /** @type {CharHandler} */
454
524
  const _consumeNumber = (input, pos) => {
455
525
  pos++;
456
526
  if (pos === input.length) return pos;
@@ -515,7 +585,7 @@ const consumeAt = (input, pos, callbacks) => {
515
585
  pos++;
516
586
  if (pos === input.length) return pos;
517
587
  if (_startsIdentifier(input, pos)) {
518
- pos = _consumeIdentifier(input, pos);
588
+ pos = _consumeIdentifier(input, pos, callbacks);
519
589
  if (callbacks.atKeyword !== undefined) {
520
590
  pos = callbacks.atKeyword(input, start, pos);
521
591
  }
@@ -523,64 +593,102 @@ const consumeAt = (input, pos, callbacks) => {
523
593
  return pos;
524
594
  };
525
595
 
596
+ /** @type {CharHandler} */
597
+ const consumeReverseSolidus = (input, pos, callbacks) => {
598
+ const start = pos;
599
+ pos++;
600
+ if (pos === input.length) return pos;
601
+ // If the input stream starts with a valid escape, reconsume the current input code point, consume an ident-like token, and return it.
602
+ if (
603
+ _isTwoCodePointsAreValidEscape(
604
+ input.charCodeAt(start),
605
+ input.charCodeAt(pos)
606
+ )
607
+ ) {
608
+ return consumeOtherIdentifier(input, pos - 1, callbacks);
609
+ }
610
+ // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.
611
+ return pos;
612
+ };
613
+
526
614
  const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => {
527
615
  // https://drafts.csswg.org/css-syntax/#consume-token
528
616
  switch (cc) {
617
+ // whitespace
529
618
  case CC_LINE_FEED:
530
619
  case CC_CARRIAGE_RETURN:
531
620
  case CC_FORM_FEED:
532
621
  case CC_TAB:
533
622
  case CC_SPACE:
534
623
  return consumeSpace;
624
+ // U+0022 QUOTATION MARK (")
535
625
  case CC_QUOTATION_MARK:
536
- case CC_APOSTROPHE:
537
626
  return consumeString(cc);
627
+ // U+0023 NUMBER SIGN (#)
538
628
  case CC_NUMBER_SIGN:
539
629
  return consumeNumberSign;
540
- case CC_SLASH:
541
- return consumePotentialComment;
542
- // case CC_LEFT_SQUARE:
543
- // case CC_RIGHT_SQUARE:
544
- // case CC_COMMA:
545
- // case CC_COLON:
546
- // return consumeSingleCharToken;
547
- case CC_COMMA:
548
- return consumeComma;
549
- case CC_SEMICOLON:
550
- return consumeSemicolon;
630
+ // U+0027 APOSTROPHE (')
631
+ case CC_APOSTROPHE:
632
+ return consumeString(cc);
633
+ // U+0028 LEFT PARENTHESIS (()
551
634
  case CC_LEFT_PARENTHESIS:
552
635
  return consumeLeftParenthesis;
636
+ // U+0029 RIGHT PARENTHESIS ())
553
637
  case CC_RIGHT_PARENTHESIS:
554
638
  return consumeRightParenthesis;
555
- case CC_LEFT_CURLY:
556
- return consumeLeftCurlyBracket;
557
- case CC_RIGHT_CURLY:
558
- return consumeRightCurlyBracket;
559
- case CC_COLON:
560
- return consumePotentialPseudo;
639
+ // U+002B PLUS SIGN (+)
561
640
  case CC_PLUS_SIGN:
562
641
  return consumeNumericToken;
563
- case CC_FULL_STOP:
564
- return consumeDot;
642
+ // U+002C COMMA (,)
643
+ case CC_COMMA:
644
+ return consumeComma;
645
+ // U+002D HYPHEN-MINUS (-)
565
646
  case CC_HYPHEN_MINUS:
566
647
  return consumeMinus;
648
+ // U+002E FULL STOP (.)
649
+ case CC_FULL_STOP:
650
+ return consumeDot;
651
+ // U+003A COLON (:)
652
+ case CC_COLON:
653
+ return consumePotentialPseudo;
654
+ // U+003B SEMICOLON (;)
655
+ case CC_SEMICOLON:
656
+ return consumeSemicolon;
657
+ // U+003C LESS-THAN SIGN (<)
567
658
  case CC_LESS_THAN_SIGN:
568
659
  return consumeLessThan;
660
+ // U+0040 COMMERCIAL AT (@)
569
661
  case CC_AT_SIGN:
570
662
  return consumeAt;
663
+ // U+005B LEFT SQUARE BRACKET ([)
664
+ case CC_LEFT_SQUARE:
665
+ return consumeDelimToken;
666
+ // U+005C REVERSE SOLIDUS (\)
667
+ case CC_REVERSE_SOLIDUS:
668
+ return consumeReverseSolidus;
669
+ // U+005D RIGHT SQUARE BRACKET (])
670
+ case CC_RIGHT_SQUARE:
671
+ return consumeDelimToken;
672
+ // U+007B LEFT CURLY BRACKET ({)
673
+ case CC_LEFT_CURLY:
674
+ return consumeLeftCurlyBracket;
675
+ // U+007D RIGHT CURLY BRACKET (})
676
+ case CC_RIGHT_CURLY:
677
+ return consumeRightCurlyBracket;
678
+ // Optimization
571
679
  case CC_LOWER_U:
680
+ case CC_UPPER_U:
572
681
  return consumePotentialUrl;
573
- case CC_LOW_LINE:
574
- return consumeOtherIdentifier;
575
682
  default:
683
+ // digit
576
684
  if (_isDigit(cc)) return consumeNumericToken;
577
- if (
578
- (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
579
- (cc >= CC_UPPER_A && cc <= CC_UPPER_Z)
580
- ) {
685
+ // ident-start code point
686
+ if (isIdentStartCodePoint(cc)) {
581
687
  return consumeOtherIdentifier;
582
688
  }
583
- return consumeSingleCharToken;
689
+ // EOF, but we don't have it
690
+ // anything else
691
+ return consumeDelimToken;
584
692
  }
585
693
  });
586
694
 
@@ -590,9 +698,15 @@ const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => {
590
698
  * @returns {void}
591
699
  */
592
700
  module.exports = (input, callbacks) => {
701
+ // This section describes how to consume a token from a stream of code points. It will return a single token of any type.
593
702
  let pos = 0;
594
703
  while (pos < input.length) {
704
+ // Consume comments.
705
+ pos = consumeComments(input, pos, callbacks);
706
+
595
707
  const cc = input.charCodeAt(pos);
708
+
709
+ // Consume the next input code point.
596
710
  if (cc < 0x80) {
597
711
  pos = CHAR_MAP[cc](input, pos, callbacks);
598
712
  } else {
@@ -601,59 +715,76 @@ module.exports = (input, callbacks) => {
601
715
  }
602
716
  };
603
717
 
718
+ module.exports.isIdentStartCodePoint = isIdentStartCodePoint;
719
+
720
+ /**
721
+ * @param {string} input input
722
+ * @param {number} pos position
723
+ * @returns {number} position after comments
724
+ */
604
725
  module.exports.eatComments = (input, pos) => {
605
- loop: for (;;) {
606
- const cc = input.charCodeAt(pos);
607
- if (cc === CC_SLASH) {
608
- if (pos === input.length) return pos;
609
- let cc = input.charCodeAt(pos + 1);
610
- if (cc !== CC_ASTERISK) return pos;
611
- pos++;
612
- for (;;) {
613
- pos++;
614
- if (pos === input.length) return pos;
615
- cc = input.charCodeAt(pos);
616
- while (cc === CC_ASTERISK) {
617
- pos++;
618
- if (pos === input.length) return pos;
619
- cc = input.charCodeAt(pos);
620
- if (cc === CC_SLASH) {
621
- pos++;
622
- continue loop;
623
- }
624
- }
625
- }
726
+ for (;;) {
727
+ let originalPos = pos;
728
+ pos = consumeComments(input, pos, {});
729
+ if (originalPos === pos) {
730
+ break;
626
731
  }
627
- return pos;
628
732
  }
733
+
734
+ return pos;
735
+ };
736
+
737
+ /**
738
+ * @param {string} input input
739
+ * @param {number} pos position
740
+ * @returns {number} position after whitespace
741
+ */
742
+ module.exports.eatWhitespace = (input, pos) => {
743
+ while (_isWhiteSpace(input.charCodeAt(pos))) {
744
+ pos++;
745
+ }
746
+
747
+ return pos;
629
748
  };
630
749
 
750
+ /**
751
+ * @param {string} input input
752
+ * @param {number} pos position
753
+ * @returns {number} position after whitespace and comments
754
+ */
631
755
  module.exports.eatWhitespaceAndComments = (input, pos) => {
632
- loop: for (;;) {
633
- const cc = input.charCodeAt(pos);
634
- if (cc === CC_SLASH) {
635
- if (pos === input.length) return pos;
636
- let cc = input.charCodeAt(pos + 1);
637
- if (cc !== CC_ASTERISK) return pos;
756
+ for (;;) {
757
+ let originalPos = pos;
758
+ pos = consumeComments(input, pos, {});
759
+ while (_isWhiteSpace(input.charCodeAt(pos))) {
638
760
  pos++;
639
- for (;;) {
640
- pos++;
641
- if (pos === input.length) return pos;
642
- cc = input.charCodeAt(pos);
643
- while (cc === CC_ASTERISK) {
644
- pos++;
645
- if (pos === input.length) return pos;
646
- cc = input.charCodeAt(pos);
647
- if (cc === CC_SLASH) {
648
- pos++;
649
- continue loop;
650
- }
651
- }
652
- }
653
- } else if (_isWhiteSpace(cc)) {
761
+ }
762
+ if (originalPos === pos) {
763
+ break;
764
+ }
765
+ }
766
+
767
+ return pos;
768
+ };
769
+
770
+ /**
771
+ * @param {string} input input
772
+ * @param {number} pos position
773
+ * @returns {number} position after whitespace
774
+ */
775
+ module.exports.eatWhiteLine = (input, pos) => {
776
+ for (;;) {
777
+ const cc = input.charCodeAt(pos);
778
+ if (_isSpace(cc)) {
654
779
  pos++;
655
780
  continue;
656
781
  }
657
- return pos;
782
+ if (_isNewLine(cc)) pos++;
783
+ // For `\r\n`
784
+ if (cc === CC_CARRIAGE_RETURN && input.charCodeAt(pos + 1) === CC_LINE_FEED)
785
+ pos++;
786
+ break;
658
787
  }
788
+
789
+ return pos;
659
790
  };