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.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +4 -0
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +12 -8
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +79 -44
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +20 -3
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +9 -1
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +42 -15
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +194 -194
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +6 -4
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +1 -0
- package/lib/library/UmdLibraryPlugin.js +4 -0
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +6 -0
- package/lib/util/StringXor.js +51 -0
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +14 -1
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +132 -5
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1608 -667
package/lib/css/walkCssTokens.js
CHANGED
@@ -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
|
40
|
-
const
|
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
|
95
|
-
cc
|
96
|
-
cc ===
|
97
|
-
cc
|
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
|
144
|
+
const consumeDelimToken = (input, pos, callbacks) => {
|
104
145
|
return pos + 1;
|
105
146
|
};
|
106
147
|
|
107
148
|
/** @type {CharHandler} */
|
108
|
-
const
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
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 =
|
177
|
+
const consumeString = quote_cc => (input, pos, callbacks) => {
|
128
178
|
const start = pos;
|
129
|
-
pos = _consumeString(input, pos,
|
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
|
-
|
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 ===
|
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 ===
|
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 ===
|
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 ===
|
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 ===
|
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))
|
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
|
-
|
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
|
-
|
301
|
-
|
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
|
-
|
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 ===
|
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 ===
|
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
|
-
|
541
|
-
|
542
|
-
|
543
|
-
//
|
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
|
-
|
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
|
-
|
564
|
-
|
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
|
-
|
578
|
-
|
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
|
-
|
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
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
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
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
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
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
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
|
-
|
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
|
};
|