@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- 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 +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -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 +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- 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} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -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 +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -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 +49 -12
- 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 +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- 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 +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -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 +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- 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 +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- 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 +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- 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 +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -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 +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- 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 +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- 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 +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- 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/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /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
package/lib/util/LazySet.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
const makeSerializable = require("./makeSerializable");
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* Merges every queued iterable directly into the concrete backing set.
|
|
11
12
|
* @template T
|
|
12
13
|
* @param {Set<T>} targetSet set where items should be added
|
|
13
14
|
* @param {Set<Iterable<T>>} toMerge iterables to be merged
|
|
@@ -22,6 +23,8 @@ const merge = (targetSet, toMerge) => {
|
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
/**
|
|
26
|
+
* Flattens nested `LazySet` instances into a single collection of iterables
|
|
27
|
+
* that can later be merged into the backing set.
|
|
25
28
|
* @template T
|
|
26
29
|
* @param {Set<Iterable<T>>} targetSet set where iterables should be added
|
|
27
30
|
* @param {LazySet<T>[]} toDeepMerge lazy sets to be flattened
|
|
@@ -40,6 +43,7 @@ const flatten = (targetSet, toDeepMerge) => {
|
|
|
40
43
|
};
|
|
41
44
|
|
|
42
45
|
/**
|
|
46
|
+
* Defines the set iterator type used by this module.
|
|
43
47
|
* @template T
|
|
44
48
|
* @typedef {import("typescript-iterable").SetIterator<T>} SetIterator
|
|
45
49
|
*/
|
|
@@ -52,6 +56,8 @@ const flatten = (targetSet, toDeepMerge) => {
|
|
|
52
56
|
*/
|
|
53
57
|
class LazySet {
|
|
54
58
|
/**
|
|
59
|
+
* Seeds the set with an optional iterable while preparing internal queues for
|
|
60
|
+
* deferred merges.
|
|
55
61
|
* @param {Iterable<T>=} iterable init iterable
|
|
56
62
|
*/
|
|
57
63
|
constructor(iterable) {
|
|
@@ -61,15 +67,23 @@ class LazySet {
|
|
|
61
67
|
this._toMerge = new Set();
|
|
62
68
|
/** @type {LazySet<T>[]} */
|
|
63
69
|
this._toDeepMerge = [];
|
|
70
|
+
/** @type {boolean} */
|
|
64
71
|
this._needMerge = false;
|
|
72
|
+
/** @type {boolean} */
|
|
65
73
|
this._deopt = false;
|
|
66
74
|
}
|
|
67
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Flattens any nested lazy sets that were queued for merging.
|
|
78
|
+
*/
|
|
68
79
|
_flatten() {
|
|
69
80
|
flatten(this._toMerge, this._toDeepMerge);
|
|
70
81
|
this._toDeepMerge.length = 0;
|
|
71
82
|
}
|
|
72
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Materializes all deferred additions into the backing set.
|
|
86
|
+
*/
|
|
73
87
|
_merge() {
|
|
74
88
|
this._flatten();
|
|
75
89
|
merge(this._set, this._toMerge);
|
|
@@ -77,6 +91,10 @@ class LazySet {
|
|
|
77
91
|
this._needMerge = false;
|
|
78
92
|
}
|
|
79
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Reports whether the set is empty without forcing a full merge.
|
|
96
|
+
* @returns {boolean} true when no items have been stored or queued
|
|
97
|
+
*/
|
|
80
98
|
_isEmpty() {
|
|
81
99
|
return (
|
|
82
100
|
this._set.size === 0 &&
|
|
@@ -85,12 +103,17 @@ class LazySet {
|
|
|
85
103
|
);
|
|
86
104
|
}
|
|
87
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Returns the number of items after applying any deferred merges.
|
|
108
|
+
* @returns {number} number of items in the set
|
|
109
|
+
*/
|
|
88
110
|
get size() {
|
|
89
111
|
if (this._needMerge) this._merge();
|
|
90
112
|
return this._set.size;
|
|
91
113
|
}
|
|
92
114
|
|
|
93
115
|
/**
|
|
116
|
+
* Adds a single item immediately to the concrete backing set.
|
|
94
117
|
* @param {T} item an item
|
|
95
118
|
* @returns {LazySet<T>} itself
|
|
96
119
|
*/
|
|
@@ -100,6 +123,8 @@ class LazySet {
|
|
|
100
123
|
}
|
|
101
124
|
|
|
102
125
|
/**
|
|
126
|
+
* Queues another iterable or lazy set for later merging so large bulk adds
|
|
127
|
+
* can stay cheap until the set is read.
|
|
103
128
|
* @param {Iterable<T> | LazySet<T>} iterable a immutable iterable or another immutable LazySet which will eventually be merged into the Set
|
|
104
129
|
* @returns {LazySet<T>} itself
|
|
105
130
|
*/
|
|
@@ -126,6 +151,9 @@ class LazySet {
|
|
|
126
151
|
return this;
|
|
127
152
|
}
|
|
128
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Removes all items and clears every deferred merge queue.
|
|
156
|
+
*/
|
|
129
157
|
clear() {
|
|
130
158
|
this._set.clear();
|
|
131
159
|
this._toMerge.clear();
|
|
@@ -135,6 +163,8 @@ class LazySet {
|
|
|
135
163
|
}
|
|
136
164
|
|
|
137
165
|
/**
|
|
166
|
+
* Deletes an item after first materializing any deferred additions that may
|
|
167
|
+
* contain it.
|
|
138
168
|
* @param {T} value an item
|
|
139
169
|
* @returns {boolean} true, if the value was in the Set before
|
|
140
170
|
*/
|
|
@@ -144,6 +174,8 @@ class LazySet {
|
|
|
144
174
|
}
|
|
145
175
|
|
|
146
176
|
/**
|
|
177
|
+
* Returns the set's entry iterator and permanently switches future
|
|
178
|
+
* operations to eager merge mode to preserve iterator correctness.
|
|
147
179
|
* @returns {SetIterator<[T, T]>} entries
|
|
148
180
|
*/
|
|
149
181
|
entries() {
|
|
@@ -153,6 +185,8 @@ class LazySet {
|
|
|
153
185
|
}
|
|
154
186
|
|
|
155
187
|
/**
|
|
188
|
+
* Iterates over every item after forcing pending merges and switching to
|
|
189
|
+
* eager mode for correctness during iteration.
|
|
156
190
|
* @template K
|
|
157
191
|
* @param {(value: T, value2: T, set: Set<T>) => void} callbackFn function called for each entry
|
|
158
192
|
* @param {K} thisArg this argument for the callbackFn
|
|
@@ -166,6 +200,7 @@ class LazySet {
|
|
|
166
200
|
}
|
|
167
201
|
|
|
168
202
|
/**
|
|
203
|
+
* Checks whether an item is present after applying any deferred merges.
|
|
169
204
|
* @param {T} item an item
|
|
170
205
|
* @returns {boolean} true, when the item is in the Set
|
|
171
206
|
*/
|
|
@@ -175,6 +210,7 @@ class LazySet {
|
|
|
175
210
|
}
|
|
176
211
|
|
|
177
212
|
/**
|
|
213
|
+
* Returns the key iterator, eagerly materializing pending merges first.
|
|
178
214
|
* @returns {SetIterator<T>} keys
|
|
179
215
|
*/
|
|
180
216
|
keys() {
|
|
@@ -184,6 +220,7 @@ class LazySet {
|
|
|
184
220
|
}
|
|
185
221
|
|
|
186
222
|
/**
|
|
223
|
+
* Returns the value iterator, eagerly materializing pending merges first.
|
|
187
224
|
* @returns {SetIterator<T>} values
|
|
188
225
|
*/
|
|
189
226
|
values() {
|
|
@@ -193,6 +230,7 @@ class LazySet {
|
|
|
193
230
|
}
|
|
194
231
|
|
|
195
232
|
/**
|
|
233
|
+
* Returns the default iterator over values after forcing pending merges.
|
|
196
234
|
* @returns {SetIterator<T>} iterable iterator
|
|
197
235
|
*/
|
|
198
236
|
[Symbol.iterator]() {
|
|
@@ -207,7 +245,9 @@ class LazySet {
|
|
|
207
245
|
}
|
|
208
246
|
|
|
209
247
|
/**
|
|
210
|
-
*
|
|
248
|
+
* Serializes the fully materialized set contents into webpack's object
|
|
249
|
+
* serialization stream.
|
|
250
|
+
* @param {import("../serialization/ObjectMiddleware").ObjectSerializerContext<(number | T)[]>} context context
|
|
211
251
|
*/
|
|
212
252
|
serialize({ write }) {
|
|
213
253
|
if (this._needMerge) this._merge();
|
|
@@ -216,16 +256,17 @@ class LazySet {
|
|
|
216
256
|
}
|
|
217
257
|
|
|
218
258
|
/**
|
|
259
|
+
* Restores a `LazySet` from serialized item data.
|
|
219
260
|
* @template T
|
|
220
|
-
* @param {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} context context
|
|
261
|
+
* @param {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<(number | T)[]>} context context
|
|
221
262
|
* @returns {LazySet<T>} lazy set
|
|
222
263
|
*/
|
|
223
264
|
static deserialize({ read }) {
|
|
224
|
-
const count = read();
|
|
265
|
+
const count = /** @type {number} */ (read());
|
|
225
266
|
/** @type {T[]} */
|
|
226
267
|
const items = [];
|
|
227
268
|
for (let i = 0; i < count; i++) {
|
|
228
|
-
items.push(read());
|
|
269
|
+
items.push(/** @type {T} */ (read()));
|
|
229
270
|
}
|
|
230
271
|
return new LazySet(items);
|
|
231
272
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
/** @type {string} */
|
|
15
|
+
this._input = input;
|
|
16
|
+
/** @type {number} */
|
|
17
|
+
this.line = 1;
|
|
18
|
+
/** @type {number} */
|
|
19
|
+
this.column = 0;
|
|
20
|
+
/** @type {number} */
|
|
21
|
+
this.pos = 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Returns location converter.
|
|
26
|
+
* @param {number} pos position
|
|
27
|
+
* @returns {LocConverter} location converter
|
|
28
|
+
*/
|
|
29
|
+
get(pos) {
|
|
30
|
+
if (this.pos !== pos) {
|
|
31
|
+
if (this.pos < pos) {
|
|
32
|
+
// Advance: delta-bounded scan of [this.pos, pos), allocation-free
|
|
33
|
+
// (unbounded index scans go quadratic on newline-free input).
|
|
34
|
+
const input = this._input;
|
|
35
|
+
let last = -1;
|
|
36
|
+
for (let j = this.pos; j < pos; j++) {
|
|
37
|
+
if (input.charCodeAt(j) === 10) {
|
|
38
|
+
this.line++;
|
|
39
|
+
last = j;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.column =
|
|
43
|
+
last === -1 ? this.column + (pos - this.pos) : pos - last - 1;
|
|
44
|
+
} else {
|
|
45
|
+
// Retreat: count newlines crossed in (pos, this.pos), i.e.
|
|
46
|
+
// exclude the newline at `this.pos` itself. By convention a
|
|
47
|
+
// `\n` is the last column of its line, so when `this.pos`
|
|
48
|
+
// sits on one we're already on the line containing it; only
|
|
49
|
+
// newlines strictly **before** `this.pos` and at-or-after
|
|
50
|
+
// `pos` represent crossed line boundaries.
|
|
51
|
+
let i = this._input.lastIndexOf("\n", this.pos - 1);
|
|
52
|
+
while (i >= pos) {
|
|
53
|
+
this.line--;
|
|
54
|
+
i = i > 0 ? this._input.lastIndexOf("\n", i - 1) : -1;
|
|
55
|
+
}
|
|
56
|
+
this.column = i === -1 ? pos : pos - i - 1;
|
|
57
|
+
}
|
|
58
|
+
this.pos = pos;
|
|
59
|
+
}
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
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,13 +5,19 @@
|
|
|
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
|
*/
|
|
14
19
|
constructor(available) {
|
|
20
|
+
/** @type {number} */
|
|
15
21
|
this.available = available;
|
|
16
22
|
/** @type {(() => void)[]} */
|
|
17
23
|
this.waiters = [];
|
|
@@ -20,6 +26,8 @@ class Semaphore {
|
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
/**
|
|
29
|
+
* Acquires a permit for the callback immediately when one is available or
|
|
30
|
+
* queues the callback until another task releases its permit.
|
|
23
31
|
* @param {() => void} callback function block to capture and run
|
|
24
32
|
* @returns {void}
|
|
25
33
|
*/
|
|
@@ -32,6 +40,9 @@ class Semaphore {
|
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Releases a permit and schedules the next waiting callback, if any.
|
|
45
|
+
*/
|
|
35
46
|
release() {
|
|
36
47
|
this.available++;
|
|
37
48
|
if (this.waiters.length > 0) {
|
|
@@ -39,6 +50,9 @@ class Semaphore {
|
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Drains the next waiting callback after a permit becomes available.
|
|
55
|
+
*/
|
|
42
56
|
_continue() {
|
|
43
57
|
if (this.available > 0 && this.waiters.length > 0) {
|
|
44
58
|
this.available--;
|
package/lib/util/SetHelpers.js
CHANGED
|
@@ -41,7 +41,7 @@ const intersect = (sets) => {
|
|
|
41
41
|
* @template T
|
|
42
42
|
* @param {Set<T>} bigSet a Set which contains the original elements to compare against
|
|
43
43
|
* @param {Set<T>} smallSet the set whose elements might be contained inside of bigSet
|
|
44
|
-
* @returns {boolean} returns true if
|
|
44
|
+
* @returns {boolean} returns true if bigSet contains all elements inside of smallSet
|
|
45
45
|
*/
|
|
46
46
|
const isSubset = (bigSet, smallSet) => {
|
|
47
47
|
if (bigSet.size < smallSet.size) return false;
|
|
@@ -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() {
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Babel-style visitor map keyed by a numeric node-type discriminator; a bucket
|
|
9
|
+
* is a function (enter-only) or `{ enter?, exit? }`.
|
|
10
|
+
*
|
|
11
|
+
* A visitor receives a single `path` argument (the Babel `path` shape): the
|
|
12
|
+
* language's AST accessor with the current position on it — `path.node`,
|
|
13
|
+
* `path.parent` (null at a root) — plus `path.skipChildren()` (enter only)
|
|
14
|
+
* to stop the walk descending, and every field-read method (which defaults
|
|
15
|
+
* to the current node). The path is one reused object rebound before each callback:
|
|
16
|
+
* it is only valid during the callback, and future per-node functionality
|
|
17
|
+
* lands on it without changing any visitor signature.
|
|
18
|
+
* @template TPath
|
|
19
|
+
* @typedef {(path: TPath) => void} VisitorFn
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @template TPath
|
|
23
|
+
* @typedef {VisitorFn<TPath> | { enter?: VisitorFn<TPath>, exit?: VisitorFn<TPath> }} VisitorBucket
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* @template TPath
|
|
27
|
+
* @typedef {{ [nodeType: number]: VisitorBucket<TPath> }} VisitorMap
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* @template TPath
|
|
31
|
+
* @typedef {{ enter: VisitorFn<TPath>[], exit: VisitorFn<TPath>[] }} CompiledVisitorBucket
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @template TPath
|
|
35
|
+
* @typedef {CompiledVisitorBucket<TPath>[]} CompiledVisitorMap a sparse array indexed by node type
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* A language grammar: parse `input` and fire the compiled visitors in source
|
|
39
|
+
* order (the grammar owns tokenizing, parsing, walking — and the `path`
|
|
40
|
+
* object each visitor receives).
|
|
41
|
+
* @template TPath
|
|
42
|
+
* @template TProcessOptions
|
|
43
|
+
* @typedef {(input: string, visitors: CompiledVisitorMap<TPath>, options: TProcessOptions) => void} Grammar
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Visitor coordinator: owns the visitor registry and drives a language
|
|
48
|
+
* `grammar` over the source. Language-agnostic — each syntax (CSS, HTML, …)
|
|
49
|
+
* binds its own grammar and node-type enum. Babel-style usage:
|
|
50
|
+
*
|
|
51
|
+
* ```
|
|
52
|
+
* processor.use({ [NodeType.X]: (path) => {}, [NodeType.Y]: { enter, exit } });
|
|
53
|
+
* processor.process(source);
|
|
54
|
+
* ```
|
|
55
|
+
* @template TPath
|
|
56
|
+
* @template [TProcessOptions=object]
|
|
57
|
+
*/
|
|
58
|
+
class SourceProcessor {
|
|
59
|
+
/**
|
|
60
|
+
* @param {Grammar<TPath, TProcessOptions>} grammar the grammar to drive over the source
|
|
61
|
+
* @param {TProcessOptions=} options default process options (e.g. `skip`) merged under each `process` call's own options
|
|
62
|
+
*/
|
|
63
|
+
constructor(grammar, options) {
|
|
64
|
+
/** @type {Grammar<TPath, TProcessOptions>} */
|
|
65
|
+
this._grammar = grammar;
|
|
66
|
+
/** @type {CompiledVisitorMap<TPath>} */
|
|
67
|
+
this._visitors = [];
|
|
68
|
+
/** @type {TProcessOptions | undefined} */
|
|
69
|
+
this._options = options;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Register a Babel-style visitor map; calls accumulate per node type.
|
|
74
|
+
* A bucket is a function (= `{ enter }`) or `{ enter?, exit? }`.
|
|
75
|
+
* @param {VisitorMap<TPath>} map visitor map keyed by node type
|
|
76
|
+
* @returns {SourceProcessor<TPath, TProcessOptions>} `this`, for chaining
|
|
77
|
+
*/
|
|
78
|
+
use(map) {
|
|
79
|
+
// `map`'s keys are node-type enum members; `Object.keys` stringifies them,
|
|
80
|
+
// so index the compiled array by the number to match the numeric `node.type`.
|
|
81
|
+
for (const type of Object.keys(map)) {
|
|
82
|
+
const key = Number(type);
|
|
83
|
+
const v = map[key];
|
|
84
|
+
let bucket = this._visitors[key];
|
|
85
|
+
if (!bucket) {
|
|
86
|
+
bucket = { enter: [], exit: [] };
|
|
87
|
+
this._visitors[key] = bucket;
|
|
88
|
+
}
|
|
89
|
+
if (typeof v === "function") {
|
|
90
|
+
bucket.enter.push(v);
|
|
91
|
+
} else {
|
|
92
|
+
if (v.enter) bucket.enter.push(v.enter);
|
|
93
|
+
if (v.exit) bucket.exit.push(v.exit);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Run the grammar over `input`, firing visitors in source order. No
|
|
101
|
+
* AST retained. Per-call `options` override the instance defaults.
|
|
102
|
+
* @param {string} input source text
|
|
103
|
+
* @param {TProcessOptions=} options grammar-specific options
|
|
104
|
+
*/
|
|
105
|
+
process(input, options) {
|
|
106
|
+
const defaults = this._options;
|
|
107
|
+
this._grammar(
|
|
108
|
+
input,
|
|
109
|
+
this._visitors,
|
|
110
|
+
defaults
|
|
111
|
+
? options
|
|
112
|
+
? { ...defaults, ...options }
|
|
113
|
+
: defaults
|
|
114
|
+
: options || /** @type {TProcessOptions} */ ({})
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = SourceProcessor;
|
|
@@ -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]() {
|