webpack 5.106.1 → 5.107.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.
- package/README.md +2 -2
- package/lib/APIPlugin.js +4 -2
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +10 -1
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +26 -0
- package/lib/Chunk.js +46 -0
- package/lib/ChunkGraph.js +111 -0
- package/lib/ChunkGroup.js +57 -13
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CleanPlugin.js +14 -1
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +23 -8
- package/lib/Compilation.js +161 -27
- package/lib/Compiler.js +41 -17
- package/lib/ConcatenationScope.js +24 -1
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +4 -1
- package/lib/ContextExclusionPlugin.js +2 -1
- package/lib/ContextModule.js +14 -2
- package/lib/ContextModuleFactory.js +10 -0
- package/lib/ContextReplacementPlugin.js +4 -1
- package/lib/DefinePlugin.js +22 -9
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +48 -4
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +3 -0
- package/lib/EntryPlugin.js +2 -1
- package/lib/Entrypoint.js +4 -0
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -10
- package/lib/ExportsInfo.js +56 -2
- package/lib/ExportsInfoApiPlugin.js +2 -1
- package/lib/ExternalModule.js +114 -15
- package/lib/ExternalModuleFactoryPlugin.js +15 -0
- package/lib/ExternalsPlugin.js +2 -1
- package/lib/FileSystemInfo.js +291 -71
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
- package/lib/FlagDependencyExportsPlugin.js +4 -1
- package/lib/FlagDependencyUsagePlugin.js +5 -1
- package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
- package/lib/Generator.js +16 -3
- package/lib/HotModuleReplacementPlugin.js +35 -9
- package/lib/IgnorePlugin.js +4 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +10 -0
- package/lib/JavascriptMetaInfoPlugin.js +2 -1
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +2 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +101 -19
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +3 -0
- package/lib/ModuleGraph.js +66 -0
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleSourceTypeConstants.js +32 -1
- package/lib/ModuleTemplate.js +8 -0
- package/lib/ModuleTypeConstants.js +12 -3
- package/lib/MultiCompiler.js +30 -2
- package/lib/MultiStats.js +8 -0
- package/lib/MultiWatching.js +3 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +11 -2
- package/lib/NormalModule.js +43 -33
- package/lib/NormalModuleFactory.js +35 -2
- package/lib/NormalModuleReplacementPlugin.js +1 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +2 -1
- package/lib/ProgressPlugin.js +158 -68
- package/lib/ProvidePlugin.js +3 -1
- package/lib/RawModule.js +12 -0
- package/lib/RecordIdsPlugin.js +8 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +6 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +13 -0
- package/lib/RuntimeTemplate.js +35 -1
- package/lib/SelfModuleFactory.js +2 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +3 -1
- package/lib/Stats.js +5 -0
- package/lib/Template.js +20 -0
- package/lib/TemplatedPathPlugin.js +10 -3
- package/lib/UseStrictPlugin.js +2 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
- package/lib/WarnDeprecatedOptionPlugin.js +2 -2
- package/lib/WarnNoModeSetPlugin.js +17 -2
- package/lib/WatchIgnorePlugin.js +4 -1
- package/lib/Watching.js +16 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +3 -1
- package/lib/WebpackOptionsApply.js +14 -1
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +12 -2
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +42 -10
- package/lib/asset/AssetModulesPlugin.js +7 -2
- package/lib/asset/AssetParser.js +2 -0
- package/lib/asset/AssetSourceGenerator.js +12 -2
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +11 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +19 -6
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
- package/lib/cache/AddManagedPathsPlugin.js +2 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
- package/lib/cache/PackFileCacheStrategy.js +33 -4
- package/lib/cache/ResolverCachePlugin.js +10 -1
- package/lib/cache/getLazyHashedEtag.js +4 -0
- package/lib/cache/mergeEtags.js +2 -0
- package/lib/cli.js +33 -1
- package/lib/config/browserslistTargetHandler.js +2 -0
- package/lib/config/defaults.js +232 -12
- package/lib/config/normalization.js +15 -1
- package/lib/config/target.js +11 -0
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +12 -0
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +4 -0
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +2 -1
- package/lib/container/FallbackDependency.js +4 -0
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +12 -0
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/ModuleFederationPlugin.js +3 -1
- package/lib/container/RemoteModule.js +13 -0
- package/lib/container/RemoteRuntimeModule.js +1 -0
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +336 -100
- package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
- package/lib/css/CssLoadingRuntimeModule.js +23 -4
- package/lib/{CssModule.js → css/CssModule.js} +21 -15
- package/lib/css/CssModulesPlugin.js +235 -89
- package/lib/css/CssParser.js +616 -261
- package/lib/css/walkCssTokens.js +179 -2
- package/lib/debug/ProfilingPlugin.js +19 -1
- package/lib/dependencies/AMDDefineDependency.js +7 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
- package/lib/dependencies/AMDPlugin.js +4 -1
- package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
- package/lib/dependencies/AMDRequireContextDependency.js +3 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
- package/lib/dependencies/AMDRequireDependency.js +4 -0
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +6 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
- package/lib/dependencies/CommonJsExportsDependency.js +4 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
- package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
- package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
- package/lib/dependencies/CommonJsPlugin.js +4 -1
- package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
- package/lib/dependencies/CommonJsRequireDependency.js +70 -4
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
- package/lib/dependencies/ConstDependency.js +6 -1
- package/lib/dependencies/ContextDependency.js +9 -2
- package/lib/dependencies/ContextDependencyHelpers.js +4 -1
- package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +4 -0
- package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
- package/lib/dependencies/CriticalDependencyWarning.js +2 -1
- package/lib/dependencies/CssIcssExportDependency.js +339 -66
- package/lib/dependencies/CssIcssImportDependency.js +53 -8
- package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
- package/lib/dependencies/CssImportDependency.js +12 -0
- package/lib/dependencies/CssUrlDependency.js +32 -0
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +3 -0
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportsInfoDependency.js +6 -0
- package/lib/dependencies/ExternalModuleDependency.js +5 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
- package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
- package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
- package/lib/dependencies/HarmonyExports.js +2 -0
- package/lib/dependencies/HarmonyImportDependency.js +21 -2
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
- package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
- package/lib/dependencies/HtmlSourceDependency.js +127 -0
- package/lib/dependencies/ImportContextDependency.js +4 -0
- package/lib/dependencies/ImportDependency.js +5 -0
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
- package/lib/dependencies/ImportMetaPlugin.js +6 -0
- package/lib/dependencies/ImportParserPlugin.js +9 -2
- package/lib/dependencies/ImportPhase.js +7 -3
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +2 -0
- package/lib/dependencies/JsonExportsDependency.js +6 -1
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +2 -0
- package/lib/dependencies/LoaderPlugin.js +4 -1
- package/lib/dependencies/LocalModule.js +4 -0
- package/lib/dependencies/LocalModuleDependency.js +4 -0
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
- package/lib/dependencies/ModuleDependency.js +7 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +6 -1
- package/lib/dependencies/PureExpressionDependency.js +7 -1
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
- package/lib/dependencies/RequireEnsureDependency.js +4 -0
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +4 -0
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +3 -0
- package/lib/dependencies/RequireResolveDependency.js +1 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
- package/lib/dependencies/StaticExportsDependency.js +3 -0
- package/lib/dependencies/SystemPlugin.js +5 -2
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/URLContextDependency.js +3 -0
- package/lib/dependencies/URLDependency.js +6 -0
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +4 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
- package/lib/dependencies/WorkerDependency.js +6 -1
- package/lib/dependencies/WorkerPlugin.js +11 -3
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +1 -0
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
- package/lib/{DllModule.js → dll/DllModule.js} +35 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
- package/lib/electron/ElectronTargetPlugin.js +2 -1
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
- package/lib/errors/JSONParseError.js +114 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
- package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
- package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
- package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
- package/lib/errors/NonErrorEmittedError.js +28 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +20 -1
- package/lib/hmr/lazyCompilationBackend.js +2 -0
- package/lib/html/HtmlGenerator.js +379 -0
- package/lib/html/HtmlModulesPlugin.js +433 -0
- package/lib/html/HtmlParser.js +1489 -0
- package/lib/html/walkHtmlTokens.js +2733 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +22 -1
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +39 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
- package/lib/javascript/BasicEvaluatedExpression.js +4 -2
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
- package/lib/javascript/JavascriptGenerator.js +10 -0
- package/lib/javascript/JavascriptModulesPlugin.js +112 -9
- package/lib/javascript/JavascriptParser.js +360 -16
- package/lib/javascript/JavascriptParserHelpers.js +7 -1
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +14 -25
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +16 -0
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +86 -1
- package/lib/library/SystemLibraryPlugin.js +8 -0
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +2 -1
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +2 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +62 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
- package/lib/optimize/InnerGraph.js +16 -1
- package/lib/optimize/InnerGraphPlugin.js +14 -2
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
- package/lib/optimize/RealContentHashPlugin.js +104 -26
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
- package/lib/optimize/SplitChunksPlugin.js +50 -2
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +18 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
- package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
- package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +43 -1
- package/lib/schemes/VirtualUrlPlugin.js +7 -2
- package/lib/serialization/AggregateErrorSerializer.js +2 -0
- package/lib/serialization/ArraySerializer.js +2 -0
- package/lib/serialization/BinaryMiddleware.js +20 -1
- package/lib/serialization/DateObjectSerializer.js +2 -0
- package/lib/serialization/ErrorObjectSerializer.js +3 -0
- package/lib/serialization/FileMiddleware.js +21 -0
- package/lib/serialization/MapObjectSerializer.js +2 -0
- package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
- package/lib/serialization/ObjectMiddleware.js +23 -0
- package/lib/serialization/PlainObjectSerializer.js +7 -0
- package/lib/serialization/RegExpObjectSerializer.js +2 -0
- package/lib/serialization/Serializer.js +5 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +2 -0
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +15 -0
- package/lib/sharing/ConsumeSharedPlugin.js +8 -3
- package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +4 -0
- package/lib/sharing/ProvideSharedModule.js +12 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +5 -2
- package/lib/sharing/SharePlugin.js +2 -1
- package/lib/sharing/ShareRuntimeModule.js +1 -0
- package/lib/sharing/resolveMatchedConfigs.js +4 -1
- package/lib/sharing/utils.js +8 -0
- package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
- package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
- package/lib/stats/StatsFactory.js +13 -1
- package/lib/stats/StatsPrinter.js +7 -0
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +8 -2
- package/lib/util/AppendOnlyStackedSet.js +15 -0
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +22 -2
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +21 -0
- package/lib/util/LazySet.js +39 -0
- package/lib/util/LocConverter.js +53 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +14 -1
- package/lib/util/SetHelpers.js +3 -0
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +45 -0
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +13 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +33 -0
- package/lib/util/binarySearchBounds.js +1 -0
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +34 -3
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +9 -3
- package/lib/util/conventions.js +46 -1
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +1 -0
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +20 -0
- package/lib/util/extractSourceMap.js +1 -0
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +5 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
- package/lib/util/fs.js +71 -8
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/hash-digest.js +8 -0
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +67 -0
- package/lib/util/internalSerializables.js +35 -19
- package/lib/util/magicComment.js +10 -6
- package/lib/util/makeSerializable.js +6 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +1 -0
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +1 -0
- package/lib/util/registerExternalSerializer.js +20 -0
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
- package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
- package/lib/wasm-sync/WebAssemblyParser.js +2 -0
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
- package/lib/web/FetchCompileWasmPlugin.js +13 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +13 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/package.json +31 -31
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +161 -57
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +22 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +5325 -353
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
class LocConverter {
|
|
9
|
+
/**
|
|
10
|
+
* Creates an instance of LocConverter.
|
|
11
|
+
* @param {string} input input
|
|
12
|
+
*/
|
|
13
|
+
constructor(input) {
|
|
14
|
+
this._input = input;
|
|
15
|
+
this.line = 1;
|
|
16
|
+
this.column = 0;
|
|
17
|
+
this.pos = 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns location converter.
|
|
22
|
+
* @param {number} pos position
|
|
23
|
+
* @returns {LocConverter} location converter
|
|
24
|
+
*/
|
|
25
|
+
get(pos) {
|
|
26
|
+
if (this.pos !== pos) {
|
|
27
|
+
if (this.pos < pos) {
|
|
28
|
+
const str = this._input.slice(this.pos, pos);
|
|
29
|
+
let i = str.lastIndexOf("\n");
|
|
30
|
+
if (i === -1) {
|
|
31
|
+
this.column += str.length;
|
|
32
|
+
} else {
|
|
33
|
+
this.column = str.length - i - 1;
|
|
34
|
+
this.line++;
|
|
35
|
+
while (i > 0 && (i = str.lastIndexOf("\n", i - 1)) !== -1) {
|
|
36
|
+
this.line++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
let i = this._input.lastIndexOf("\n", this.pos);
|
|
41
|
+
while (i >= pos) {
|
|
42
|
+
this.line--;
|
|
43
|
+
i = i > 0 ? this._input.lastIndexOf("\n", i - 1) : -1;
|
|
44
|
+
}
|
|
45
|
+
this.column = i === -1 ? pos : pos - i - 1;
|
|
46
|
+
}
|
|
47
|
+
this.pos = pos;
|
|
48
|
+
}
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
module.exports = LocConverter;
|
package/lib/util/Queue.js
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
+
* FIFO queue that keeps items unique by storing them in insertion order inside
|
|
10
|
+
* a `Set`.
|
|
9
11
|
* @template T
|
|
10
12
|
*/
|
|
11
13
|
class Queue {
|
|
12
14
|
/**
|
|
15
|
+
* Seeds the queue with an optional iterable of initial unique items.
|
|
13
16
|
* @param {Iterable<T>=} items The initial elements.
|
|
14
17
|
*/
|
|
15
18
|
constructor(items) {
|
|
@@ -21,7 +24,7 @@ class Queue {
|
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
/**
|
|
24
|
-
* Returns the number of
|
|
27
|
+
* Returns the number of unique items currently waiting in the queue.
|
|
25
28
|
* @returns {number} The number of elements in this queue.
|
|
26
29
|
*/
|
|
27
30
|
get length() {
|
|
@@ -29,7 +32,7 @@ class Queue {
|
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
/**
|
|
32
|
-
*
|
|
35
|
+
* Enqueues an item, moving nothing if that value is already present.
|
|
33
36
|
* @param {T} item The element to add.
|
|
34
37
|
* @returns {void}
|
|
35
38
|
*/
|
|
@@ -38,7 +41,7 @@ class Queue {
|
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
/**
|
|
41
|
-
*
|
|
44
|
+
* Removes and returns the oldest enqueued item.
|
|
42
45
|
* @returns {T | undefined} The head of the queue of `undefined` if this queue is empty.
|
|
43
46
|
*/
|
|
44
47
|
dequeue() {
|
package/lib/util/Semaphore.js
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Simple counting semaphore used to limit how many asynchronous tasks may run
|
|
10
|
+
* concurrently.
|
|
11
|
+
*/
|
|
8
12
|
class Semaphore {
|
|
9
13
|
/**
|
|
10
|
-
*
|
|
14
|
+
* Initializes the semaphore with the number of permits that may be held at
|
|
15
|
+
* the same time.
|
|
11
16
|
* @param {number} available the amount available number of "tasks"
|
|
12
17
|
* in the Semaphore
|
|
13
18
|
*/
|
|
@@ -20,6 +25,8 @@ class Semaphore {
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
28
|
+
* Acquires a permit for the callback immediately when one is available or
|
|
29
|
+
* queues the callback until another task releases its permit.
|
|
23
30
|
* @param {() => void} callback function block to capture and run
|
|
24
31
|
* @returns {void}
|
|
25
32
|
*/
|
|
@@ -32,6 +39,9 @@ class Semaphore {
|
|
|
32
39
|
}
|
|
33
40
|
}
|
|
34
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Releases a permit and schedules the next waiting callback, if any.
|
|
44
|
+
*/
|
|
35
45
|
release() {
|
|
36
46
|
this.available++;
|
|
37
47
|
if (this.waiters.length > 0) {
|
|
@@ -39,6 +49,9 @@ class Semaphore {
|
|
|
39
49
|
}
|
|
40
50
|
}
|
|
41
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Drains the next waiting callback after a permit becomes available.
|
|
54
|
+
*/
|
|
42
55
|
_continue() {
|
|
43
56
|
if (this.available > 0 && this.waiters.length > 0) {
|
|
44
57
|
this.available--;
|
package/lib/util/SetHelpers.js
CHANGED
|
@@ -52,6 +52,7 @@ const isSubset = (bigSet, smallSet) => {
|
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
+
* Returns found item.
|
|
55
56
|
* @template T
|
|
56
57
|
* @param {Set<T>} set a set
|
|
57
58
|
* @param {(set: T) => boolean} fn selector function
|
|
@@ -64,6 +65,7 @@ const find = (set, fn) => {
|
|
|
64
65
|
};
|
|
65
66
|
|
|
66
67
|
/**
|
|
68
|
+
* Returns first item.
|
|
67
69
|
* @template T
|
|
68
70
|
* @param {Set<T> | ReadonlySet<T>} set a set
|
|
69
71
|
* @returns {T | undefined} first item
|
|
@@ -74,6 +76,7 @@ const first = (set) => {
|
|
|
74
76
|
};
|
|
75
77
|
|
|
76
78
|
/**
|
|
79
|
+
* Returns combined set, may be identical to a or b.
|
|
77
80
|
* @template T
|
|
78
81
|
* @param {Set<T>} a first
|
|
79
82
|
* @param {Set<T>} b second
|
package/lib/util/SortableSet.js
CHANGED
|
@@ -47,6 +47,7 @@ class SortableSet extends Set {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
+
* Returns itself.
|
|
50
51
|
* @param {T} value value to add to set
|
|
51
52
|
* @returns {this} returns itself
|
|
52
53
|
*/
|
|
@@ -59,6 +60,7 @@ class SortableSet extends Set {
|
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
/**
|
|
63
|
+
* Returns true if value existed in set, false otherwise.
|
|
62
64
|
* @param {T} value value to delete
|
|
63
65
|
* @returns {boolean} true if value existed in set, false otherwise
|
|
64
66
|
*/
|
|
@@ -69,6 +71,7 @@ class SortableSet extends Set {
|
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
/**
|
|
74
|
+
* Describes how this clear operation behaves.
|
|
72
75
|
* @returns {void}
|
|
73
76
|
*/
|
|
74
77
|
clear() {
|
|
@@ -105,7 +108,7 @@ class SortableSet extends Set {
|
|
|
105
108
|
|
|
106
109
|
/**
|
|
107
110
|
* Get data from cache
|
|
108
|
-
* @template
|
|
111
|
+
* @template R
|
|
109
112
|
* @param {(set: SortableSet<T>) => R} fn function to calculate value
|
|
110
113
|
* @returns {R} returns result of fn(this), cached until set changes
|
|
111
114
|
*/
|
|
@@ -146,6 +149,7 @@ class SortableSet extends Set {
|
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
/**
|
|
152
|
+
* Invalidates the cached state associated with this value.
|
|
149
153
|
* @private
|
|
150
154
|
* @returns {void}
|
|
151
155
|
*/
|
|
@@ -156,6 +160,7 @@ class SortableSet extends Set {
|
|
|
156
160
|
}
|
|
157
161
|
|
|
158
162
|
/**
|
|
163
|
+
* Invalidate ordered cache.
|
|
159
164
|
* @private
|
|
160
165
|
* @returns {void}
|
|
161
166
|
*/
|
|
@@ -166,6 +171,7 @@ class SortableSet extends Set {
|
|
|
166
171
|
}
|
|
167
172
|
|
|
168
173
|
/**
|
|
174
|
+
* Returns the raw array.
|
|
169
175
|
* @returns {T[]} the raw array
|
|
170
176
|
*/
|
|
171
177
|
toJSON() {
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
* @template V
|
|
32
32
|
*/
|
|
33
33
|
class StackedCacheMap {
|
|
34
|
+
/**
|
|
35
|
+
* Initializes the mutable fallback map and the stack of immutable cache
|
|
36
|
+
* layers.
|
|
37
|
+
*/
|
|
34
38
|
constructor() {
|
|
35
39
|
/** @type {Map<K, V>} */
|
|
36
40
|
this.map = new Map();
|
|
@@ -39,9 +43,9 @@ class StackedCacheMap {
|
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
46
|
+
* Adds another cache layer. Immutable maps are retained by reference and
|
|
47
|
+
* reordered so larger layers are checked first, while mutable maps are
|
|
48
|
+
* copied into the fallback map.
|
|
45
49
|
* @param {ReadonlyMap<K, V>} map map to add
|
|
46
50
|
* @param {boolean=} immutable if 'map' is immutable and StackedCacheMap can keep referencing it
|
|
47
51
|
*/
|
|
@@ -64,6 +68,7 @@ class StackedCacheMap {
|
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
/**
|
|
71
|
+
* Stores or overrides a value in the mutable fallback map.
|
|
67
72
|
* @param {K} item the key of the element to add
|
|
68
73
|
* @param {V} value the value of the element to add
|
|
69
74
|
* @returns {void}
|
|
@@ -73,6 +78,8 @@ class StackedCacheMap {
|
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
/**
|
|
81
|
+
* Rejects deletions because this data structure is optimized for append-only
|
|
82
|
+
* cache layers.
|
|
76
83
|
* @param {K} item the item to delete
|
|
77
84
|
* @returns {void}
|
|
78
85
|
*/
|
|
@@ -81,6 +88,8 @@ class StackedCacheMap {
|
|
|
81
88
|
}
|
|
82
89
|
|
|
83
90
|
/**
|
|
91
|
+
* Rejects `has` checks because they would force the same layered lookup work
|
|
92
|
+
* as `get` without returning the cached value.
|
|
84
93
|
* @param {K} item the item to test
|
|
85
94
|
* @returns {boolean} true if the item exists in this set
|
|
86
95
|
*/
|
|
@@ -91,6 +100,8 @@ class StackedCacheMap {
|
|
|
91
100
|
}
|
|
92
101
|
|
|
93
102
|
/**
|
|
103
|
+
* Looks up a key by scanning immutable cache layers first and then the
|
|
104
|
+
* mutable fallback map.
|
|
94
105
|
* @param {K} item the key of the element to return
|
|
95
106
|
* @returns {V | undefined} the value of the element
|
|
96
107
|
*/
|
|
@@ -102,12 +113,17 @@ class StackedCacheMap {
|
|
|
102
113
|
return this.map.get(item);
|
|
103
114
|
}
|
|
104
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Removes every cache layer and clears the mutable fallback map.
|
|
118
|
+
*/
|
|
105
119
|
clear() {
|
|
106
120
|
this.stack.length = 0;
|
|
107
121
|
this.map.clear();
|
|
108
122
|
}
|
|
109
123
|
|
|
110
124
|
/**
|
|
125
|
+
* Returns the total number of entries across the fallback map and all stacked
|
|
126
|
+
* cache layers.
|
|
111
127
|
* @returns {number} size of the map
|
|
112
128
|
*/
|
|
113
129
|
get size() {
|
|
@@ -119,6 +135,7 @@ class StackedCacheMap {
|
|
|
119
135
|
}
|
|
120
136
|
|
|
121
137
|
/**
|
|
138
|
+
* Iterates over the fallback map first and then each stacked cache layer.
|
|
122
139
|
* @returns {Iterator<[K, V]>} iterator
|
|
123
140
|
*/
|
|
124
141
|
[Symbol.iterator]() {
|
package/lib/util/StackedMap.js
CHANGED
|
@@ -9,16 +9,22 @@ const TOMBSTONE = Symbol("tombstone");
|
|
|
9
9
|
const UNDEFINED_MARKER = Symbol("undefined");
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
+
* Public cell value exposed by `StackedMap`, where `undefined` is preserved as
|
|
13
|
+
* a valid stored result.
|
|
12
14
|
* @template T
|
|
13
15
|
* @typedef {T | undefined} Cell<T>
|
|
14
16
|
*/
|
|
15
17
|
|
|
16
18
|
/**
|
|
19
|
+
* Internal cell value used to distinguish deleted entries and explicit
|
|
20
|
+
* `undefined` assignments while traversing stacked scopes.
|
|
17
21
|
* @template T
|
|
18
22
|
* @typedef {T | typeof TOMBSTONE | typeof UNDEFINED_MARKER} InternalCell<T>
|
|
19
23
|
*/
|
|
20
24
|
|
|
21
25
|
/**
|
|
26
|
+
* Converts an internal key/value pair into the external representation returned
|
|
27
|
+
* by iteration helpers.
|
|
22
28
|
* @template K
|
|
23
29
|
* @template V
|
|
24
30
|
* @param {[K, InternalCell<V>]} pair the internal cell
|
|
@@ -34,11 +40,14 @@ const extractPair = (pair) => {
|
|
|
34
40
|
};
|
|
35
41
|
|
|
36
42
|
/**
|
|
43
|
+
* Layered map that supports child scopes while memoizing lookups from parent
|
|
44
|
+
* scopes into the current layer.
|
|
37
45
|
* @template K
|
|
38
46
|
* @template V
|
|
39
47
|
*/
|
|
40
48
|
class StackedMap {
|
|
41
49
|
/**
|
|
50
|
+
* Creates a new map layer on top of an optional parent stack.
|
|
42
51
|
* @param {Map<K, InternalCell<V>>[]=} parentStack an optional parent
|
|
43
52
|
*/
|
|
44
53
|
constructor(parentStack) {
|
|
@@ -50,6 +59,8 @@ class StackedMap {
|
|
|
50
59
|
}
|
|
51
60
|
|
|
52
61
|
/**
|
|
62
|
+
* Stores a value in the current layer, preserving explicit `undefined`
|
|
63
|
+
* values with an internal marker.
|
|
53
64
|
* @param {K} item the key of the element to add
|
|
54
65
|
* @param {V} value the value of the element to add
|
|
55
66
|
* @returns {void}
|
|
@@ -59,6 +70,8 @@ class StackedMap {
|
|
|
59
70
|
}
|
|
60
71
|
|
|
61
72
|
/**
|
|
73
|
+
* Deletes a key from the current view, either by removing it outright in the
|
|
74
|
+
* root layer or by recording a tombstone in child layers.
|
|
62
75
|
* @param {K} item the item to delete
|
|
63
76
|
* @returns {void}
|
|
64
77
|
*/
|
|
@@ -71,6 +84,8 @@ class StackedMap {
|
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
/**
|
|
87
|
+
* Checks whether a key exists in the current scope chain, caching any parent
|
|
88
|
+
* lookup result in the current layer.
|
|
74
89
|
* @param {K} item the item to test
|
|
75
90
|
* @returns {boolean} true if the item exists in this set
|
|
76
91
|
*/
|
|
@@ -93,6 +108,8 @@ class StackedMap {
|
|
|
93
108
|
}
|
|
94
109
|
|
|
95
110
|
/**
|
|
111
|
+
* Returns the visible value for a key, caching parent hits and misses in the
|
|
112
|
+
* current layer.
|
|
96
113
|
* @param {K} item the key of the element to return
|
|
97
114
|
* @returns {Cell<V>} the value of the element
|
|
98
115
|
*/
|
|
@@ -117,6 +134,9 @@ class StackedMap {
|
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Collapses the stacked layers into a single concrete map.
|
|
139
|
+
*/
|
|
120
140
|
_compress() {
|
|
121
141
|
if (this.stack.length === 1) return;
|
|
122
142
|
this.map = new Map();
|
|
@@ -132,30 +152,55 @@ class StackedMap {
|
|
|
132
152
|
this.stack = [this.map];
|
|
133
153
|
}
|
|
134
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Returns the visible keys as an array after collapsing the stack.
|
|
157
|
+
* @returns {K[]} array of keys
|
|
158
|
+
*/
|
|
135
159
|
asArray() {
|
|
136
160
|
this._compress();
|
|
137
161
|
return [...this.map.keys()];
|
|
138
162
|
}
|
|
139
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Returns the visible keys as a `Set` after collapsing the stack.
|
|
166
|
+
* @returns {Set<K>} set of keys
|
|
167
|
+
*/
|
|
140
168
|
asSet() {
|
|
141
169
|
this._compress();
|
|
142
170
|
return new Set(this.map.keys());
|
|
143
171
|
}
|
|
144
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Returns visible key/value pairs using the external representation.
|
|
175
|
+
* @returns {[K, Cell<V>][]} array of key/value pairs
|
|
176
|
+
*/
|
|
145
177
|
asPairArray() {
|
|
146
178
|
this._compress();
|
|
147
179
|
return Array.from(this.map.entries(), extractPair);
|
|
148
180
|
}
|
|
149
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Returns the visible contents as a plain `Map`.
|
|
184
|
+
* @returns {Map<K, Cell<V>>} materialized map
|
|
185
|
+
*/
|
|
150
186
|
asMap() {
|
|
151
187
|
return new Map(this.asPairArray());
|
|
152
188
|
}
|
|
153
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Returns the number of visible keys after collapsing the stack.
|
|
192
|
+
* @returns {number} number of keys
|
|
193
|
+
*/
|
|
154
194
|
get size() {
|
|
155
195
|
this._compress();
|
|
156
196
|
return this.map.size;
|
|
157
197
|
}
|
|
158
198
|
|
|
199
|
+
/**
|
|
200
|
+
* Creates a child `StackedMap` that sees the current layers as its parent
|
|
201
|
+
* scope.
|
|
202
|
+
* @returns {StackedMap<K, V>} child map
|
|
203
|
+
*/
|
|
159
204
|
createChild() {
|
|
160
205
|
return new StackedMap(this.stack);
|
|
161
206
|
}
|
package/lib/util/StringXor.js
CHANGED
package/lib/util/TupleQueue.js
CHANGED
|
@@ -8,11 +8,14 @@
|
|
|
8
8
|
const TupleSet = require("./TupleSet");
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* FIFO queue for tuples that preserves uniqueness by delegating membership
|
|
12
|
+
* tracking to `TupleSet`.
|
|
11
13
|
* @template T
|
|
12
14
|
* @template V
|
|
13
15
|
*/
|
|
14
16
|
class TupleQueue {
|
|
15
17
|
/**
|
|
18
|
+
* Seeds the queue with an optional iterable of tuples to visit.
|
|
16
19
|
* @param {Iterable<[T, V, ...EXPECTED_ANY]>=} items The initial elements.
|
|
17
20
|
*/
|
|
18
21
|
constructor(items) {
|
|
@@ -29,7 +32,7 @@ class TupleQueue {
|
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
/**
|
|
32
|
-
* Returns the number of
|
|
35
|
+
* Returns the number of distinct tuples currently queued.
|
|
33
36
|
* @returns {number} The number of elements in this queue.
|
|
34
37
|
*/
|
|
35
38
|
get length() {
|
|
@@ -37,7 +40,7 @@ class TupleQueue {
|
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
/**
|
|
40
|
-
*
|
|
43
|
+
* Enqueues a tuple if it is not already present in the underlying set.
|
|
41
44
|
* @param {[T, V, ...EXPECTED_ANY]} item The element to add.
|
|
42
45
|
* @returns {void}
|
|
43
46
|
*/
|
|
@@ -46,7 +49,8 @@ class TupleQueue {
|
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
/**
|
|
49
|
-
*
|
|
52
|
+
* Removes and returns the next queued tuple, rebuilding the iterator when
|
|
53
|
+
* the underlying tuple set has changed since the last full pass.
|
|
50
54
|
* @returns {[T, V, ...EXPECTED_ANY] | undefined} The head of the queue of `undefined` if this queue is empty.
|
|
51
55
|
*/
|
|
52
56
|
dequeue() {
|
package/lib/util/TupleSet.js
CHANGED
|
@@ -6,17 +6,22 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
+
* Nested map structure used to index tuple prefixes until the final tuple
|
|
10
|
+
* element can be stored in a `Set`.
|
|
9
11
|
* @template K
|
|
10
12
|
* @template V
|
|
11
13
|
* @typedef {Map<K, InnerMap<K, V> | Set<V>>} InnerMap
|
|
12
14
|
*/
|
|
13
15
|
|
|
14
16
|
/**
|
|
17
|
+
* Stores tuples of arbitrary length while preserving efficient prefix lookups
|
|
18
|
+
* through a tree of maps that ends in a set of final values.
|
|
15
19
|
* @template T
|
|
16
20
|
* @template V
|
|
17
21
|
*/
|
|
18
22
|
class TupleSet {
|
|
19
23
|
/**
|
|
24
|
+
* Seeds the tuple set with an optional iterable of tuples.
|
|
20
25
|
* @param {Iterable<[T, V, ...EXPECTED_ANY]>=} init init
|
|
21
26
|
*/
|
|
22
27
|
constructor(init) {
|
|
@@ -31,6 +36,7 @@ class TupleSet {
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
/**
|
|
39
|
+
* Adds a tuple to the set, creating any missing prefix maps along the way.
|
|
34
40
|
* @param {[T, V, ...EXPECTED_ANY]} args tuple
|
|
35
41
|
* @returns {void}
|
|
36
42
|
*/
|
|
@@ -59,6 +65,7 @@ class TupleSet {
|
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
/**
|
|
68
|
+
* Checks whether the exact tuple is already present in the set.
|
|
62
69
|
* @param {[T, V, ...EXPECTED_ANY]} args tuple
|
|
63
70
|
* @returns {boolean} true, if the tuple is in the Set
|
|
64
71
|
*/
|
|
@@ -83,6 +90,7 @@ class TupleSet {
|
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
/**
|
|
93
|
+
* Removes a tuple from the set when it is present.
|
|
86
94
|
* @param {[T, V, ...EXPECTED_ANY]} args tuple
|
|
87
95
|
* @returns {void}
|
|
88
96
|
*/
|
|
@@ -109,10 +117,13 @@ class TupleSet {
|
|
|
109
117
|
}
|
|
110
118
|
|
|
111
119
|
/**
|
|
120
|
+
* Iterates over every stored tuple by walking the nested map structure and
|
|
121
|
+
* yielding each complete prefix plus its terminal set value.
|
|
112
122
|
* @returns {Iterator<[T, V, ...EXPECTED_ANY]>} iterator
|
|
113
123
|
*/
|
|
114
124
|
[Symbol.iterator]() {
|
|
115
125
|
/**
|
|
126
|
+
* Iterator type used while traversing nested tuple-prefix maps.
|
|
116
127
|
* @template T, V
|
|
117
128
|
* @typedef {MapIterator<[T, InnerMap<T, V> | Set<V>]>} IteratorStack
|
|
118
129
|
*/
|
|
@@ -127,6 +138,8 @@ class TupleSet {
|
|
|
127
138
|
let currentSetIterator;
|
|
128
139
|
|
|
129
140
|
/**
|
|
141
|
+
* Advances through nested maps until a terminal value set is reached or
|
|
142
|
+
* every remaining branch has been exhausted.
|
|
130
143
|
* @param {IteratorStack<T, V>} it iterator
|
|
131
144
|
* @returns {boolean} result
|
|
132
145
|
*/
|