@depup/webpack 5.111.1-depup.2 → 5.112.0-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 +4 -8
- package/changes.json +3 -19
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +224 -106
- package/lib/Compiler.js +19 -19
- package/lib/Dependency.js +3 -551
- package/lib/DependencyTemplate.js +3 -70
- package/lib/EntryPlugin.js +3 -68
- package/lib/Entrypoint.js +3 -121
- package/lib/ExternalsPlugin.js +3 -92
- package/lib/FileSystemInfo.js +3 -4629
- package/lib/InitFragment.js +3 -204
- package/lib/LibraryTemplatePlugin.js +3 -46
- package/lib/ModuleFilenameHelpers.js +3 -400
- package/lib/ModuleNotFoundError.js +2 -2
- package/lib/MultiCompiler.js +37 -8
- package/lib/NormalModule.js +3 -2242
- package/lib/NullFactory.js +3 -22
- package/lib/ProgressPlugin.js +3 -908
- package/lib/RawModule.js +3 -197
- package/lib/RequestShortener.js +3 -37
- package/lib/SingleEntryPlugin.js +1 -1
- package/lib/WebpackError.js +2 -2
- package/lib/asset/AssetBytesGenerator.js +8 -8
- package/lib/asset/AssetBytesParser.js +3 -3
- package/lib/asset/AssetGenerator.js +36 -22
- package/lib/asset/AssetModule.js +2 -2
- package/lib/asset/AssetModulesPlugin.js +6 -9
- package/lib/asset/AssetParser.js +3 -3
- package/lib/asset/AssetSourceGenerator.js +8 -8
- package/lib/asset/AssetSourceParser.js +3 -3
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +7 -7
- package/lib/asset/WebManifestParser.js +5 -5
- package/lib/async-modules/AsyncModuleHelpers.js +6 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
- package/lib/async-modules/isGeneratorLowered.js +3 -3
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
- package/lib/{Cache.js → cache/Cache.js} +1 -1
- package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +2 -2
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +8 -10
- package/lib/cache/ResolverCachePlugin.js +8 -4
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
- package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
- package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +5 -158
- package/lib/config/defaults.js +144 -48
- package/lib/config/getClaimedAssetTypes.js +21 -13
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +10 -0
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +13 -11
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerExposedDependency.js +1 -1
- package/lib/container/ContainerPlugin.js +178 -5
- package/lib/container/ContainerReferencePlugin.js +75 -14
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackItemDependency.js +1 -1
- package/lib/container/FallbackModule.js +12 -10
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +10 -11
- package/lib/container/ModuleFederationPlugin.js +306 -7
- package/lib/container/RemoteModule.js +14 -10
- package/lib/container/RemoteRuntimeModule.js +5 -5
- package/lib/container/RemoteToExternalDependency.js +1 -1
- package/lib/container/moduleFederationHooks.js +1 -1
- package/lib/context/ContextModule.js +36 -25
- package/lib/context/ContextModuleFactory.js +13 -10
- package/lib/context/ContextReplacementPlugin.js +3 -3
- package/lib/css/CssGenerator.js +38 -31
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +27 -29
- package/lib/css/CssModulesPlugin.js +128 -44
- package/lib/css/CssParser.js +682 -291
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6985 -5125
- package/lib/css/syntax-parser.js +19873 -0
- package/lib/css/syntax-printer.js +6037 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +52 -19
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +9 -9
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/ConstDependency.js +3 -120
- package/lib/dependencies/ContextElementDependency.js +5 -172
- package/lib/dependencies/NullDependency.js +3 -37
- package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
- package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
- package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
- package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
- package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
- package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
- package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
- package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
- package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
- package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
- package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
- package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
- package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
- package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
- package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -33
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +35 -30
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
- package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
- package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
- package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
- package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
- package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
- package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
- package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
- package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
- package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
- package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
- package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
- package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
- package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
- package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
- package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
- package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
- package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
- package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
- package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
- package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
- package/lib/dependencies/context/ContextElementDependency.js +198 -0
- package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
- package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
- package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
- package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
- package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
- package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
- package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
- package/lib/dependencies/core/ConstDependency.js +131 -0
- package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
- package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
- package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
- package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
- package/lib/dependencies/core/NullDependency.js +44 -0
- package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
- package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
- package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +369 -92
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +23 -16
- package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
- package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
- package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +23 -16
- package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
- package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
- package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
- package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
- package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +19 -17
- package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
- package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
- package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
- package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
- package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
- package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +133 -118
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +60 -36
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +99 -84
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +94 -59
- package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
- package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
- package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
- package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
- package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +51 -141
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -19
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -15
- package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
- package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
- package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
- package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
- package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
- package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
- package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
- package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
- package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +119 -98
- package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
- package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
- package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
- package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
- package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
- package/lib/{url → dependencies/url}/URLParserPlugin.js +16 -18
- package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
- package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
- package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
- package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
- package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +31 -33
- package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
- package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
- package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
- package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
- package/lib/devtool/ModuleFilenameHelpers.js +413 -0
- package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
- package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +154 -26
- package/lib/{util → devtool}/generateDebugId.js +1 -1
- package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
- package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
- package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
- package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
- package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
- package/lib/dll/DelegatedModule.js +20 -18
- package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
- package/lib/dll/DelegatedPlugin.js +1 -1
- package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
- package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
- package/lib/dll/DllEntryPlugin.js +3 -3
- package/lib/dll/DllModule.js +11 -9
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +102 -26
- package/lib/dll/LibManifestPlugin.js +9 -7
- package/lib/electron/ElectronTargetPlugin.js +2 -2
- package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
- package/lib/{dependencies → entry}/EntryDependency.js +11 -2
- package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
- package/lib/entry/EntryPlugin.js +75 -0
- package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
- package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
- package/lib/errors/DeprecatedOptionWarning.js +30 -0
- package/lib/errors/DllManifestError.js +26 -0
- package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
- package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
- package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +7 -5
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +4 -4
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
- package/lib/errors/ModuleBuildError.js +1 -1
- package/lib/errors/ModuleDependencyError.js +2 -2
- package/lib/errors/ModuleDependencyWarning.js +2 -2
- package/lib/errors/ModuleError.js +1 -1
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +3 -3
- package/lib/errors/ModuleParseError.js +1 -1
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/ModuleWarning.js +1 -1
- package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
- package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
- package/lib/errors/NodeStuffInWebError.js +7 -2
- package/lib/errors/PathVariableError.js +31 -0
- package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
- package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
- package/lib/errors/RuntimeModuleGenerationError.js +51 -0
- package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
- package/lib/errors/SystemImportDeprecationWarning.js +43 -0
- package/lib/errors/UnmergeableEntryExportsError.js +34 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
- package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
- package/lib/errors/WebpackError.js +12 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +79 -55
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
- package/lib/externals/ExternalsPlugin.js +99 -0
- package/lib/fs/FileSystemInfo.js +4642 -0
- package/lib/{util → fs}/fs.js +22 -9
- package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
- package/lib/graph/Chunk.js +985 -0
- package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +628 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +130 -82
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +30 -30
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +152 -57
- package/lib/{util → graph}/findGraphRoots.js +14 -8
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +47 -47
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +31 -21
- package/lib/html/HtmlGenerator.js +107 -43
- package/lib/html/HtmlModule.js +6 -2
- package/lib/html/HtmlModulesPlugin.js +172 -76
- package/lib/html/HtmlParser.js +503 -153
- package/lib/html/builtinEmbeddedRenderer.js +60 -13
- package/lib/html/data.js +2 -1
- package/lib/html/htmlMinify.js +111 -41
- package/lib/html/syntax-parser.js +15796 -0
- package/lib/html/syntax-printer.js +1034 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +67 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +31 -4
- package/lib/ids/IdHelpers.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
- package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
- package/lib/ids/SyncModuleIdsPlugin.js +3 -3
- package/lib/{util → ids}/numberHash.js +1 -1
- package/lib/index.js +303 -97
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +25 -25
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +4 -4
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +74 -7
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +17 -17
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
- package/lib/javascript/JavascriptModule.js +4 -3
- package/lib/javascript/JavascriptModulesPlugin.js +440 -211
- package/lib/javascript/JavascriptParser.js +220 -134
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3840 -5
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
- package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
- package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
- package/lib/javascript/data.js +533 -122
- package/lib/javascript/jsMinify.js +272 -0
- package/lib/javascript/regexp.js +67 -32
- package/lib/javascript/syntax-parser.js +18561 -0
- package/lib/javascript/syntax-printer-data.js +933 -0
- package/lib/javascript/syntax-printer.js +47106 -0
- package/lib/javascript/syntax.js +20 -11274
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +10 -10
- package/lib/json/JsonModule.js +2 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -5
- package/lib/json/jsonMinify.js +69 -0
- package/lib/library/AbstractLibraryPlugin.js +28 -15
- package/lib/library/AmdLibraryPlugin.js +4 -4
- package/lib/library/AssignLibraryPlugin.js +27 -11
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +1 -1
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +160 -166
- package/lib/library/SystemLibraryPlugin.js +6 -8
- package/lib/library/UmdLibraryPlugin.js +3 -4
- package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
- package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
- package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
- package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
- package/lib/loaders/LoaderRunner.js +31 -21
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/logging/Logger.js +7 -9
- package/lib/logging/ProgressPlugin.js +957 -0
- package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
- package/lib/{Generator.js → module/Generator.js} +16 -14
- package/lib/{Module.js → module/Module.js} +119 -51
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2348 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +3 -3
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +2 -2
- package/lib/{util → module}/findCaseMismatch.js +2 -2
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
- package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
- package/lib/node/NodeEnvironmentPlugin.js +11 -1
- package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
- package/lib/node/NodeTargetPlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +58 -6
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
- package/lib/optimize/ConcatenatedModule.js +229 -214
- package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
- package/lib/optimize/ConstExportsPlugin.js +7 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
- package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +17 -17
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +17 -17
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +11 -3
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +584 -0
- package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +16 -7
- package/lib/optimize/MangleExportsPlugin.js +5 -5
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
- package/lib/optimize/MinChunkSizePlugin.js +9 -6
- package/lib/optimize/ModuleConcatenationPlugin.js +20 -12
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +16 -7
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +18 -18
- package/lib/optimize/SplitChunksPlugin.js +713 -155
- package/lib/{util → optimize}/TupleQueue.js +9 -9
- package/lib/optimize/chunkSetIntersections.js +437 -0
- package/lib/{util → optimize}/deterministicGrouping.js +17 -17
- package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
- package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
- package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
- package/lib/output/SSRManifestPlugin.js +349 -0
- package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
- package/lib/performance/BroadContextsPlugin.js +4 -4
- package/lib/performance/CacheEffectivenessPlugin.js +2 -3
- package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
- package/lib/performance/DuplicateModulesPlugin.js +3 -4
- package/lib/performance/DuplicatePackagesPlugin.js +3 -3
- package/lib/performance/DynamicExportsPlugin.js +2 -2
- package/lib/performance/EvalUsagePlugin.js +3 -3
- package/lib/performance/HotspotsPlugin.js +11 -10
- package/lib/performance/LargeModulesPlugin.js +2 -3
- package/lib/performance/LegacyJavascriptPlugin.js +1 -2
- package/lib/performance/MissingSideEffectsPlugin.js +2 -3
- package/lib/performance/MissingSourceMapsPlugin.js +5 -6
- package/lib/performance/PureAnnotationsPlugin.js +3 -3
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +11 -12
- package/lib/performance/TopLevelThisPlugin.js +8 -7
- package/lib/performance/UnsplitVendorsPlugin.js +1 -2
- package/lib/performance/UnusedAliasesPlugin.js +6 -7
- package/lib/performance/UnusedAssetsPlugin.js +5 -5
- package/lib/performance/UnusedDefinesPlugin.js +2 -2
- package/lib/performance/UnusedExternalsPlugin.js +3 -4
- package/lib/performance/UnusedFederationPlugin.js +2 -4
- package/lib/performance/UnusedModulesPlugin.js +5 -4
- package/lib/performance/getModuleSize.js +1 -1
- package/lib/performance/hasOnlyUnusedExports.js +4 -4
- package/lib/performance/isOnlyReexported.js +7 -6
- package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
- package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
- package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +65 -44
- package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
- package/lib/prefetch/parseResourceHintOptions.js +4 -3
- package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
- package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
- package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
- package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
- package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
- package/lib/resolve/getResolveOptionsKey.js +59 -0
- package/lib/rules/RuleSetCompiler.js +27 -46
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +7 -4
- package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +4 -4
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
- package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
- package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
- package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
- package/lib/runtime/GlobalRuntimeModule.js +3 -3
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
- package/lib/runtime/HelperRuntimeModule.js +16 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/NonceRuntimeModule.js +2 -2
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
- package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
- package/lib/runtime/SystemContextRuntimeModule.js +2 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
- package/lib/runtime/WorkerRuntimeModule.js +1 -1
- package/lib/runtime/baseUri.js +1 -1
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +67 -11
- package/lib/schemes/VirtualUrlPlugin.js +50 -16
- package/lib/serialization/AggregateErrorSerializer.js +2 -2
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +47 -16
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/serialization/SingleItemMiddleware.js +4 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
- package/lib/sharing/ConsumeSharedModule.js +18 -14
- package/lib/sharing/ConsumeSharedPlugin.js +148 -42
- package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
- package/lib/sharing/ProvideForSharedDependency.js +9 -1
- package/lib/sharing/ProvideSharedDependency.js +1 -1
- package/lib/sharing/ProvideSharedModule.js +11 -9
- package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
- package/lib/sharing/ProvideSharedPlugin.js +111 -20
- package/lib/sharing/SharePlugin.js +102 -9
- package/lib/sharing/ShareRuntimeModule.js +6 -6
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/{util → sharing}/semver.js +14 -16
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +22 -19
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +14 -13
- package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
- package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
- package/lib/template/DependencyTemplate.js +77 -0
- package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
- package/lib/template/InitFragment.js +223 -0
- package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
- package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
- package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
- package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +145 -63
- package/lib/{Template.js → template/Template.js} +13 -11
- package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
- package/lib/typescript/TypeScriptPlugin.js +3 -3
- package/lib/util/RequestShortener.js +44 -0
- package/lib/util/SortableSet.js +87 -22
- package/lib/util/SourceProcessor.js +349 -44
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +10 -12
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/comparators.js +10 -10
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +94 -15
- package/lib/util/deprecation.js +1 -1
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +197 -16
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +294 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +23 -4
- package/lib/util/parseJson.js +1 -1
- package/lib/util/preloadModuleType.js +5 -2
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +1 -1
- package/lib/util/serialization.js +4 -1
- package/lib/util/source.js +2 -2
- package/lib/util/terminalColors.js +161 -0
- package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +11 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +9 -8
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +14 -15
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +6 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
- package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
- package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
- package/lib/{Watching.js → watch/Watching.js} +8 -8
- package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
- package/lib/web/FetchCompileWasmPlugin.js +6 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/lib/web/JsonpTemplatePlugin.js +1 -1
- package/lib/webpack.js +27 -17
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
- package/package.json +48 -41
- package/schemas/WebpackOptions.check.js +2 -1
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +294 -74
- package/schemas/plugins/BannerPlugin.check.js +2 -1
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
- package/schemas/plugins/HtmlParserOptions.check.js +2 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -0
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +2 -1
- package/schemas/plugins/ProgressPlugin.json +2 -7
- package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
- package/schemas/plugins/SSRManifestPlugin.json +20 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssParserOptions.check.js +1 -0
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +19355 -13873
- package/lib/LazyBarrel.js +0 -388
- package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
- package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
- package/lib/javascript/ChunkFormatHelpers.js +0 -72
- package/lib/javascript/grammar.js +0 -5546
- package/lib/javascript/parser.js +0 -1500
- package/lib/javascript/regexpData.js +0 -51
- package/lib/performance/getSourceModules.js +0 -22
- package/lib/util/Semaphore.js +0 -65
- package/lib/util/objectToMap.js +0 -15
- package/schemas/WebpackOptions.check.d.ts +0 -7
- package/schemas/_container.json +0 -155
- package/schemas/_sharing.json +0 -118
- package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
- package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
- package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
- package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
- /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
- /package/lib/{util → css}/conventions.js +0 -0
- /package/lib/{util → css}/topologicalSort.js +0 -0
- /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
- /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
- /package/lib/{util → fs}/StackedCacheMap.js +0 -0
- /package/lib/{util → javascript}/StackedMap.js +0 -0
- /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
- /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
- /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
- /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
- /package/lib/{util → optimize}/Queue.js +0 -0
- /package/lib/{util → stats}/smartGrouping.js +0 -0
|
@@ -5,28 +5,28 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const TupleSet = require("
|
|
8
|
+
const TupleSet = require("../util/TupleSet");
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* FIFO queue for tuples that preserves uniqueness by delegating membership
|
|
12
12
|
* tracking to `TupleSet`.
|
|
13
|
-
* @template
|
|
13
|
+
* @template {EXPECTED_ANY[]} K
|
|
14
14
|
* @template V
|
|
15
15
|
*/
|
|
16
16
|
class TupleQueue {
|
|
17
17
|
/**
|
|
18
18
|
* Seeds the queue with an optional iterable of tuples to visit.
|
|
19
|
-
* @param {Iterable<[
|
|
19
|
+
* @param {Iterable<[...K, V]>=} items The initial elements.
|
|
20
20
|
*/
|
|
21
21
|
constructor(items) {
|
|
22
22
|
/**
|
|
23
23
|
* @private
|
|
24
|
-
* @type {TupleSet<
|
|
24
|
+
* @type {TupleSet<K, V>}
|
|
25
25
|
*/
|
|
26
26
|
this._set = new TupleSet(items);
|
|
27
27
|
/**
|
|
28
28
|
* @private
|
|
29
|
-
* @type {Iterator<[
|
|
29
|
+
* @type {Iterator<[...K, V]>}
|
|
30
30
|
*/
|
|
31
31
|
this._iterator = this._set[Symbol.iterator]();
|
|
32
32
|
}
|
|
@@ -41,7 +41,7 @@ class TupleQueue {
|
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* Enqueues a tuple if it is not already present in the underlying set.
|
|
44
|
-
* @param {[
|
|
44
|
+
* @param {[...K, V]} item The element to add.
|
|
45
45
|
* @returns {void}
|
|
46
46
|
*/
|
|
47
47
|
enqueue(...item) {
|
|
@@ -51,7 +51,7 @@ class TupleQueue {
|
|
|
51
51
|
/**
|
|
52
52
|
* Removes and returns the next queued tuple, rebuilding the iterator when
|
|
53
53
|
* the underlying tuple set has changed since the last full pass.
|
|
54
|
-
* @returns {[
|
|
54
|
+
* @returns {[...K, V] | undefined} The head of the queue of `undefined` if this queue is empty.
|
|
55
55
|
*/
|
|
56
56
|
dequeue() {
|
|
57
57
|
const result = this._iterator.next();
|
|
@@ -59,14 +59,14 @@ class TupleQueue {
|
|
|
59
59
|
if (this._set.size > 0) {
|
|
60
60
|
this._iterator = this._set[Symbol.iterator]();
|
|
61
61
|
const value =
|
|
62
|
-
/** @type {[
|
|
62
|
+
/** @type {[...K, V]} */
|
|
63
63
|
(this._iterator.next().value);
|
|
64
64
|
this._set.delete(...value);
|
|
65
65
|
return value;
|
|
66
66
|
}
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
|
-
this._set.delete(.../** @type {[
|
|
69
|
+
this._set.delete(.../** @type {[...K, V]} */ (result.value));
|
|
70
70
|
return result.value;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
// Discovers the proper intersections of a family of sets in bounded rounds.
|
|
9
|
+
// Sets and intersections live as dense bit words in one growing buffer, so a
|
|
10
|
+
// round costs word-wise AND and popcount per pair and allocates nothing.
|
|
11
|
+
|
|
12
|
+
/** A set of members, as bit words at `index * words` in the buffer. */
|
|
13
|
+
/** @typedef {number} SetIndex */
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* An intersection of at least two of the input sets.
|
|
17
|
+
* @typedef {object} Intersection
|
|
18
|
+
* @property {number[]} members the members it holds
|
|
19
|
+
* @property {number[]} support the input sets holding all of them
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Options of a discovery run.
|
|
24
|
+
* @typedef {object} DiscoveryOptions
|
|
25
|
+
* @property {number} setCount number of input sets
|
|
26
|
+
* @property {number} memberCount number of distinct members
|
|
27
|
+
* @property {Int32Array} offsets start of each set in `members`, plus its end
|
|
28
|
+
* @property {Int32Array} members members of every set, ordered by set
|
|
29
|
+
* @property {number} depth rounds of discovery, `1` intersects the input sets
|
|
30
|
+
* @property {number} minMembers smallest intersection worth discovering
|
|
31
|
+
* @property {Float64Array | undefined} sizes size of each input set, when a size bound applies
|
|
32
|
+
* @property {number} minSize size an intersection's support must reach
|
|
33
|
+
* @property {number} maxIntersections most intersections a run may discover
|
|
34
|
+
* @property {number} maxWork most words a run may intersect, one per word of every pair it reaches
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* What a discovery run found, and whether a limit cut it short.
|
|
39
|
+
* @typedef {object} DiscoveryResult
|
|
40
|
+
* @property {Intersection[]} intersections the intersections, largest first
|
|
41
|
+
* @property {boolean} capped true when `maxIntersections` or `maxWork` stopped the run
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/** @type {Intersection[]} */
|
|
45
|
+
const NO_INTERSECTIONS = [];
|
|
46
|
+
|
|
47
|
+
/** Reported when nothing was discovered, so callers skip every later step. */
|
|
48
|
+
const EMPTY_RESULT = { intersections: NO_INTERSECTIONS, capped: false };
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Counts the bits of a word.
|
|
52
|
+
* @param {number} word the word
|
|
53
|
+
* @returns {number} number of bits set
|
|
54
|
+
*/
|
|
55
|
+
const popcount = (word) => {
|
|
56
|
+
word -= (word >>> 1) & 0x55555555;
|
|
57
|
+
word = (word & 0x33333333) + ((word >>> 2) & 0x33333333);
|
|
58
|
+
word = (word + (word >>> 4)) & 0x0f0f0f0f;
|
|
59
|
+
return (word * 0x01010101) >>> 24;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* An open addressed set of bit patterns. Entries are indices into the buffer
|
|
64
|
+
* the patterns live in, so nothing is copied and rehashing stays cheap.
|
|
65
|
+
*/
|
|
66
|
+
class BitPatternSet {
|
|
67
|
+
/**
|
|
68
|
+
* @param {number} capacity number of patterns to make room for
|
|
69
|
+
*/
|
|
70
|
+
constructor(capacity) {
|
|
71
|
+
let slots = 16;
|
|
72
|
+
while (slots < capacity * 2) slots *= 2;
|
|
73
|
+
/** @type {Int32Array} */
|
|
74
|
+
this._slots = new Int32Array(slots);
|
|
75
|
+
this._mask = slots - 1;
|
|
76
|
+
this._size = 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Adds a pattern unless an equal one is already known.
|
|
81
|
+
* @param {Uint32Array} words the buffer holding both the pattern and the entries
|
|
82
|
+
* @param {number} offset first word of the pattern
|
|
83
|
+
* @param {number} length number of words per pattern
|
|
84
|
+
* @param {number} entry value to store for the pattern, added to `1`
|
|
85
|
+
* @returns {boolean} true when the pattern was added
|
|
86
|
+
*/
|
|
87
|
+
add(words, offset, length, entry) {
|
|
88
|
+
let hash = 0x811c9dc5;
|
|
89
|
+
for (let i = 0; i < length; i++) {
|
|
90
|
+
hash = (hash ^ words[offset + i]) >>> 0;
|
|
91
|
+
hash = (Math.imul(hash, 0x01000193) + (hash >>> 24)) >>> 0;
|
|
92
|
+
}
|
|
93
|
+
const slots = this._slots;
|
|
94
|
+
let slot = hash & this._mask;
|
|
95
|
+
while (slots[slot] !== 0) {
|
|
96
|
+
const other = (slots[slot] - 1) * length;
|
|
97
|
+
let equal = true;
|
|
98
|
+
for (let i = 0; i < length; i++) {
|
|
99
|
+
if (words[other + i] !== words[offset + i]) {
|
|
100
|
+
equal = false;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (equal) return false;
|
|
105
|
+
slot = (slot + 1) & this._mask;
|
|
106
|
+
}
|
|
107
|
+
slots[slot] = entry + 1;
|
|
108
|
+
this._size++;
|
|
109
|
+
if (this._size * 2 > slots.length) this._grow(words, length);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Doubles the table and reinserts every entry.
|
|
115
|
+
* @param {Uint32Array} words the buffer holding the patterns
|
|
116
|
+
* @param {number} length number of words per pattern
|
|
117
|
+
* @returns {void}
|
|
118
|
+
*/
|
|
119
|
+
_grow(words, length) {
|
|
120
|
+
const previous = this._slots;
|
|
121
|
+
const slots = new Int32Array(previous.length * 2);
|
|
122
|
+
const mask = slots.length - 1;
|
|
123
|
+
for (const value of previous) {
|
|
124
|
+
if (value === 0) continue;
|
|
125
|
+
const offset = (value - 1) * length;
|
|
126
|
+
let hash = 0x811c9dc5;
|
|
127
|
+
for (let i = 0; i < length; i++) {
|
|
128
|
+
hash = (hash ^ words[offset + i]) >>> 0;
|
|
129
|
+
hash = (Math.imul(hash, 0x01000193) + (hash >>> 24)) >>> 0;
|
|
130
|
+
}
|
|
131
|
+
let slot = hash & mask;
|
|
132
|
+
while (slots[slot] !== 0) slot = (slot + 1) & mask;
|
|
133
|
+
slots[slot] = value;
|
|
134
|
+
}
|
|
135
|
+
this._slots = slots;
|
|
136
|
+
this._mask = mask;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Discovers intersections of the input sets that are not input sets themselves.
|
|
142
|
+
*
|
|
143
|
+
* Each round freezes its inputs: the first intersects the input sets, and every
|
|
144
|
+
* later one also intersects what the round before it found, so `depth` bounds
|
|
145
|
+
* how deep the discovery goes. Only proper intersections of at least
|
|
146
|
+
* `minMembers` members are kept, and an intersection is reported only with the
|
|
147
|
+
* input sets that hold all of its members. When `sizes` is given, the last round
|
|
148
|
+
* skips a pair sharing a member no set reaches `minSize` through, and an
|
|
149
|
+
* intersection whose support cannot reach `minSize` is not reported at all.
|
|
150
|
+
* @param {DiscoveryOptions} options what to discover
|
|
151
|
+
* @returns {DiscoveryResult} the intersections, largest first
|
|
152
|
+
*/
|
|
153
|
+
const discoverIntersections = ({
|
|
154
|
+
setCount,
|
|
155
|
+
memberCount,
|
|
156
|
+
offsets,
|
|
157
|
+
members,
|
|
158
|
+
depth,
|
|
159
|
+
minMembers,
|
|
160
|
+
sizes,
|
|
161
|
+
minSize,
|
|
162
|
+
maxIntersections,
|
|
163
|
+
maxWork
|
|
164
|
+
}) => {
|
|
165
|
+
if (depth < 1 || setCount < 2 || memberCount < minMembers) {
|
|
166
|
+
return EMPTY_RESULT;
|
|
167
|
+
}
|
|
168
|
+
const words = Math.ceil(memberCount / 32);
|
|
169
|
+
// One size bound per member, and the number of sets holding it. The rarest
|
|
170
|
+
// member of an intersection drives the support scan below.
|
|
171
|
+
const memberCounts = new Int32Array(memberCount);
|
|
172
|
+
const memberSizes =
|
|
173
|
+
sizes === undefined ? undefined : new Float64Array(memberCount);
|
|
174
|
+
let totalSize = 0;
|
|
175
|
+
let capacity = setCount + Math.min(setCount, maxIntersections);
|
|
176
|
+
let patterns = new Uint32Array(capacity * words);
|
|
177
|
+
let lengths = new Int32Array(capacity);
|
|
178
|
+
let count = setCount;
|
|
179
|
+
for (let set = 0; set < setCount; set++) {
|
|
180
|
+
const end = offsets[set + 1];
|
|
181
|
+
const size = sizes === undefined ? 0 : sizes[set];
|
|
182
|
+
totalSize += size;
|
|
183
|
+
const offset = set * words;
|
|
184
|
+
for (let i = offsets[set]; i < end; i++) {
|
|
185
|
+
const member = members[i];
|
|
186
|
+
patterns[offset + (member >>> 5)] |= 1 << (member & 31);
|
|
187
|
+
memberCounts[member]++;
|
|
188
|
+
if (memberSizes !== undefined) memberSizes[member] += size;
|
|
189
|
+
}
|
|
190
|
+
lengths[set] = end - offsets[set];
|
|
191
|
+
}
|
|
192
|
+
if (sizes !== undefined && totalSize < minSize) return EMPTY_RESULT;
|
|
193
|
+
// An intersection holding a member no set reaches `minSize` through cannot
|
|
194
|
+
// carry a split, so the last round drops the pair rather than the member: a
|
|
195
|
+
// round before it may still find a descendant that leaves the member behind.
|
|
196
|
+
const excluded = new Uint32Array(words);
|
|
197
|
+
let hasExcluded = false;
|
|
198
|
+
if (memberSizes !== undefined) {
|
|
199
|
+
for (let member = 0; member < memberCount; member++) {
|
|
200
|
+
if (memberSizes[member] >= minSize) continue;
|
|
201
|
+
excluded[member >>> 5] |= 1 << (member & 31);
|
|
202
|
+
hasExcluded = true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const known = new BitPatternSet(setCount * 2);
|
|
206
|
+
for (let set = 0; set < setCount; set++) {
|
|
207
|
+
known.add(patterns, set * words, words, set);
|
|
208
|
+
}
|
|
209
|
+
const scratch = new Uint32Array(words);
|
|
210
|
+
let work = maxWork;
|
|
211
|
+
let capped = false;
|
|
212
|
+
let first = 0;
|
|
213
|
+
// Postings of the sets holding each member, rebuilt for every round. A pair
|
|
214
|
+
// of sets sharing no member intersects to nothing, so the postings of the
|
|
215
|
+
// sparse sets of a real graph reach far fewer pairs than every pair does.
|
|
216
|
+
const roundPostingOffsets = new Int32Array(memberCount + 1);
|
|
217
|
+
/** @type {Int32Array} */
|
|
218
|
+
let roundPostings = new Int32Array(0);
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Writes the postings of the sets discovered so far.
|
|
222
|
+
* @returns {void}
|
|
223
|
+
*/
|
|
224
|
+
const writeRoundPostings = () => {
|
|
225
|
+
roundPostingOffsets.fill(0);
|
|
226
|
+
for (let set = 0; set < count; set++) {
|
|
227
|
+
const offset = set * words;
|
|
228
|
+
for (let word = 0; word < words; word++) {
|
|
229
|
+
let value = patterns[offset + word];
|
|
230
|
+
while (value !== 0) {
|
|
231
|
+
roundPostingOffsets[
|
|
232
|
+
word * 32 + (31 - Math.clz32(value & -value)) + 1
|
|
233
|
+
]++;
|
|
234
|
+
value &= value - 1;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
for (let member = 0; member < memberCount; member++) {
|
|
239
|
+
roundPostingOffsets[member + 1] += roundPostingOffsets[member];
|
|
240
|
+
}
|
|
241
|
+
if (roundPostings.length < roundPostingOffsets[memberCount]) {
|
|
242
|
+
roundPostings = new Int32Array(roundPostingOffsets[memberCount]);
|
|
243
|
+
}
|
|
244
|
+
const cursors = roundPostingOffsets.slice(0, memberCount);
|
|
245
|
+
for (let set = 0; set < count; set++) {
|
|
246
|
+
const offset = set * words;
|
|
247
|
+
for (let word = 0; word < words; word++) {
|
|
248
|
+
let value = patterns[offset + word];
|
|
249
|
+
while (value !== 0) {
|
|
250
|
+
const member = word * 32 + (31 - Math.clz32(value & -value));
|
|
251
|
+
value &= value - 1;
|
|
252
|
+
roundPostings[cursors[member]++] = set;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Intersects two sets, keeping what they share when it is new.
|
|
260
|
+
* @param {number} i one set
|
|
261
|
+
* @param {number} j the other set
|
|
262
|
+
* @param {boolean} applyExcluded whether to skip a pair sharing an excluded member
|
|
263
|
+
* @param {number} atMember the member the pair is being intersected at, or `-1`
|
|
264
|
+
* @returns {boolean} false when a limit was reached
|
|
265
|
+
*/
|
|
266
|
+
const intersectPair = (i, j, applyExcluded, atMember) => {
|
|
267
|
+
const iOffset = i * words;
|
|
268
|
+
const jOffset = j * words;
|
|
269
|
+
let intersected = 0;
|
|
270
|
+
let lowest = -1;
|
|
271
|
+
for (let word = 0; word < words; word++) {
|
|
272
|
+
const value = patterns[iOffset + word] & patterns[jOffset + word];
|
|
273
|
+
if (applyExcluded && (value & excluded[word]) !== 0) return true;
|
|
274
|
+
scratch[word] = value;
|
|
275
|
+
if (value !== 0) {
|
|
276
|
+
if (lowest === -1) {
|
|
277
|
+
lowest = word * 32 + (31 - Math.clz32(value & -value));
|
|
278
|
+
}
|
|
279
|
+
intersected += popcount(value);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Reached through its lowest member alone, so a pair sharing several
|
|
283
|
+
// members is intersected once
|
|
284
|
+
if (atMember !== -1 && lowest !== atMember) return true;
|
|
285
|
+
// Anything as large as a side is that side, and a set already holding
|
|
286
|
+
// every member needs no intersection to be found.
|
|
287
|
+
if (
|
|
288
|
+
intersected < minMembers ||
|
|
289
|
+
intersected >= lengths[i] ||
|
|
290
|
+
intersected >= lengths[j]
|
|
291
|
+
) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
if (count - setCount >= maxIntersections) {
|
|
295
|
+
capped = true;
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
if (count === capacity) {
|
|
299
|
+
capacity = Math.min(capacity * 2, setCount + maxIntersections);
|
|
300
|
+
const grownPatterns = new Uint32Array(capacity * words);
|
|
301
|
+
grownPatterns.set(patterns);
|
|
302
|
+
patterns = grownPatterns;
|
|
303
|
+
const grownLengths = new Int32Array(capacity);
|
|
304
|
+
grownLengths.set(lengths);
|
|
305
|
+
lengths = grownLengths;
|
|
306
|
+
}
|
|
307
|
+
const offset = count * words;
|
|
308
|
+
patterns.set(scratch, offset);
|
|
309
|
+
if (!known.add(patterns, offset, words, count)) return true;
|
|
310
|
+
lengths[count] = intersected;
|
|
311
|
+
count++;
|
|
312
|
+
return true;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
// Every pair costs the same to intersect, so the cheaper way to reach them
|
|
316
|
+
// is the one reaching fewer.
|
|
317
|
+
let pairsThroughMembers = 0;
|
|
318
|
+
for (let member = 0; member < memberCount; member++) {
|
|
319
|
+
const holders = memberCounts[member];
|
|
320
|
+
pairsThroughMembers += (holders * (holders - 1)) / 2;
|
|
321
|
+
}
|
|
322
|
+
const throughMembers = pairsThroughMembers < (setCount * (setCount - 1)) / 2;
|
|
323
|
+
|
|
324
|
+
discovery: for (let round = 0; round < depth; round++) {
|
|
325
|
+
const end = count;
|
|
326
|
+
const applyExcluded = hasExcluded && round + 1 === depth;
|
|
327
|
+
if (throughMembers) {
|
|
328
|
+
writeRoundPostings();
|
|
329
|
+
for (let member = 0; member < memberCount; member++) {
|
|
330
|
+
const to = roundPostingOffsets[member + 1];
|
|
331
|
+
for (let a = roundPostingOffsets[member]; a < to; a++) {
|
|
332
|
+
const i = roundPostings[a];
|
|
333
|
+
if (lengths[i] <= minMembers) continue;
|
|
334
|
+
for (let b = roundPostingOffsets[member]; b < a; b++) {
|
|
335
|
+
const j = roundPostings[b];
|
|
336
|
+
// A pair of sets an earlier round already intersected holds
|
|
337
|
+
// nothing new
|
|
338
|
+
if (lengths[j] <= minMembers || (i < first && j < first)) {
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
work -= words;
|
|
342
|
+
if (work < 0) {
|
|
343
|
+
capped = true;
|
|
344
|
+
break discovery;
|
|
345
|
+
}
|
|
346
|
+
if (!intersectPair(i, j, applyExcluded, member)) break discovery;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
} else {
|
|
351
|
+
for (let i = first; i < end; i++) {
|
|
352
|
+
if (lengths[i] <= minMembers) continue;
|
|
353
|
+
for (let j = 0; j < i; j++) {
|
|
354
|
+
if (lengths[j] <= minMembers) continue;
|
|
355
|
+
work -= words;
|
|
356
|
+
if (work < 0) {
|
|
357
|
+
capped = true;
|
|
358
|
+
break discovery;
|
|
359
|
+
}
|
|
360
|
+
if (!intersectPair(i, j, applyExcluded, -1)) break discovery;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (count === end) break;
|
|
365
|
+
first = end;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (count === setCount) return { intersections: NO_INTERSECTIONS, capped };
|
|
369
|
+
// Postings of the sets holding each member, to scan an intersection's
|
|
370
|
+
// support from its rarest member instead of every set.
|
|
371
|
+
const postingOffsets = new Int32Array(memberCount + 1);
|
|
372
|
+
for (let member = 0; member < memberCount; member++) {
|
|
373
|
+
postingOffsets[member + 1] = postingOffsets[member] + memberCounts[member];
|
|
374
|
+
}
|
|
375
|
+
const postings = new Int32Array(postingOffsets[memberCount]);
|
|
376
|
+
const cursors = postingOffsets.slice(0, memberCount);
|
|
377
|
+
for (let set = 0; set < setCount; set++) {
|
|
378
|
+
const end = offsets[set + 1];
|
|
379
|
+
for (let i = offsets[set]; i < end; i++) {
|
|
380
|
+
postings[cursors[members[i]]++] = set;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/** @type {Intersection[]} */
|
|
384
|
+
const intersections = [];
|
|
385
|
+
for (let candidate = setCount; candidate < count; candidate++) {
|
|
386
|
+
const offset = candidate * words;
|
|
387
|
+
/** @type {number[]} */
|
|
388
|
+
const candidateMembers = [];
|
|
389
|
+
let anchor = -1;
|
|
390
|
+
for (let word = 0; word < words; word++) {
|
|
391
|
+
let value = patterns[offset + word];
|
|
392
|
+
while (value !== 0) {
|
|
393
|
+
const bit = 31 - Math.clz32(value & -value);
|
|
394
|
+
const member = word * 32 + bit;
|
|
395
|
+
value &= value - 1;
|
|
396
|
+
candidateMembers.push(member);
|
|
397
|
+
if (anchor === -1 || memberCounts[member] < memberCounts[anchor]) {
|
|
398
|
+
anchor = member;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/** @type {number[]} */
|
|
403
|
+
const support = [];
|
|
404
|
+
let size = 0;
|
|
405
|
+
const postingsEnd = postingOffsets[anchor + 1];
|
|
406
|
+
for (let i = postingOffsets[anchor]; i < postingsEnd; i++) {
|
|
407
|
+
const set = postings[i];
|
|
408
|
+
const setOffset = set * words;
|
|
409
|
+
let holdsAll = true;
|
|
410
|
+
for (let word = 0; word < words; word++) {
|
|
411
|
+
if ((patterns[offset + word] & ~patterns[setOffset + word]) !== 0) {
|
|
412
|
+
holdsAll = false;
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (!holdsAll) continue;
|
|
417
|
+
support.push(set);
|
|
418
|
+
if (sizes !== undefined) size += sizes[set];
|
|
419
|
+
}
|
|
420
|
+
if (sizes !== undefined && size < minSize) continue;
|
|
421
|
+
intersections.push({ members: candidateMembers, support });
|
|
422
|
+
}
|
|
423
|
+
// Largest first, as the combinations they extend are ordered, and by members
|
|
424
|
+
// so that discovery order never reaches the output.
|
|
425
|
+
intersections.sort((a, b) => {
|
|
426
|
+
if (a.members.length !== b.members.length) {
|
|
427
|
+
return b.members.length - a.members.length;
|
|
428
|
+
}
|
|
429
|
+
for (let i = 0; i < a.members.length; i++) {
|
|
430
|
+
if (a.members[i] !== b.members[i]) return a.members[i] - b.members[i];
|
|
431
|
+
}
|
|
432
|
+
return 0;
|
|
433
|
+
});
|
|
434
|
+
return { intersections, capped };
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
module.exports.discoverIntersections = discoverIntersections;
|
|
@@ -101,7 +101,7 @@ const subtractSizeFrom = (total, size) => {
|
|
|
101
101
|
/**
|
|
102
102
|
* Returns total size.
|
|
103
103
|
* @template T
|
|
104
|
-
* @param {
|
|
104
|
+
* @param {GroupNode<T>[]} nodes some nodes
|
|
105
105
|
* @param {number=} start start index
|
|
106
106
|
* @returns {Sizes} total size
|
|
107
107
|
*/
|
|
@@ -198,9 +198,9 @@ const selectiveSizeSum = (size, types) => {
|
|
|
198
198
|
* Represents the node runtime component.
|
|
199
199
|
* @template T
|
|
200
200
|
*/
|
|
201
|
-
class
|
|
201
|
+
class GroupNode {
|
|
202
202
|
/**
|
|
203
|
-
* Creates an instance of
|
|
203
|
+
* Creates an instance of GroupNode.
|
|
204
204
|
* @param {T} item item
|
|
205
205
|
* @param {string} key key
|
|
206
206
|
* @param {Sizes} size size
|
|
@@ -224,12 +224,12 @@ class Node {
|
|
|
224
224
|
class Group {
|
|
225
225
|
/**
|
|
226
226
|
* Creates an instance of Group.
|
|
227
|
-
* @param {
|
|
227
|
+
* @param {GroupNode<T>[]} nodes nodes
|
|
228
228
|
* @param {Similarities | null} similarities similarities between the nodes (length = nodes.length - 1)
|
|
229
229
|
* @param {Sizes=} size size of the group
|
|
230
230
|
*/
|
|
231
231
|
constructor(nodes, similarities, size) {
|
|
232
|
-
/** @type {
|
|
232
|
+
/** @type {GroupNode<T>[]} */
|
|
233
233
|
this.nodes = nodes;
|
|
234
234
|
/** @type {Similarities | null} */
|
|
235
235
|
this.similarities = similarities;
|
|
@@ -241,17 +241,17 @@ class Group {
|
|
|
241
241
|
|
|
242
242
|
/**
|
|
243
243
|
* Returns removed nodes.
|
|
244
|
-
* @param {(node:
|
|
245
|
-
* @returns {
|
|
244
|
+
* @param {(node: GroupNode<T>) => boolean} filter filter function
|
|
245
|
+
* @returns {GroupNode<T>[] | undefined} removed nodes
|
|
246
246
|
*/
|
|
247
247
|
popNodes(filter) {
|
|
248
|
-
/** @type {
|
|
248
|
+
/** @type {GroupNode<T>[]} */
|
|
249
249
|
const newNodes = [];
|
|
250
250
|
/** @type {Similarities} */
|
|
251
251
|
const newSimilarities = [];
|
|
252
|
-
/** @type {
|
|
252
|
+
/** @type {GroupNode<T>[]} */
|
|
253
253
|
const resultNodes = [];
|
|
254
|
-
/** @type {undefined |
|
|
254
|
+
/** @type {undefined | GroupNode<T>} */
|
|
255
255
|
let lastNode;
|
|
256
256
|
for (let i = 0; i < this.nodes.length; i++) {
|
|
257
257
|
const node = this.nodes[i];
|
|
@@ -262,7 +262,7 @@ class Group {
|
|
|
262
262
|
newSimilarities.push(
|
|
263
263
|
lastNode === this.nodes[i - 1]
|
|
264
264
|
? /** @type {Similarities} */ (this.similarities)[i - 1]
|
|
265
|
-
: similarity(/** @type {
|
|
265
|
+
: similarity(/** @type {GroupNode<T>} */ (lastNode).key, node.key)
|
|
266
266
|
);
|
|
267
267
|
}
|
|
268
268
|
newNodes.push(node);
|
|
@@ -280,14 +280,14 @@ class Group {
|
|
|
280
280
|
/**
|
|
281
281
|
* Returns similarities.
|
|
282
282
|
* @template T
|
|
283
|
-
* @param {Iterable<
|
|
283
|
+
* @param {Iterable<GroupNode<T>>} nodes nodes
|
|
284
284
|
* @returns {Similarities} similarities
|
|
285
285
|
*/
|
|
286
286
|
const getSimilarities = (nodes) => {
|
|
287
287
|
// calculate similarities between lexically adjacent nodes
|
|
288
288
|
/** @type {Similarities} */
|
|
289
289
|
const similarities = [];
|
|
290
|
-
/** @type {undefined |
|
|
290
|
+
/** @type {undefined | GroupNode<T>} */
|
|
291
291
|
let last;
|
|
292
292
|
for (const node of nodes) {
|
|
293
293
|
if (last !== undefined) {
|
|
@@ -330,10 +330,10 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
330
330
|
|
|
331
331
|
const nodes = Array.from(
|
|
332
332
|
items,
|
|
333
|
-
(item) => new
|
|
333
|
+
(item) => new GroupNode(item, getKey(item), getSize(item))
|
|
334
334
|
);
|
|
335
335
|
|
|
336
|
-
/** @type {
|
|
336
|
+
/** @type {GroupNode<T>[]} */
|
|
337
337
|
const initialNodes = [];
|
|
338
338
|
|
|
339
339
|
// lexically ordering of keys
|
|
@@ -523,7 +523,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
523
523
|
|
|
524
524
|
// create two new groups for left and right area
|
|
525
525
|
// and queue them up
|
|
526
|
-
/** @type {
|
|
526
|
+
/** @type {GroupNode<T>[]} */
|
|
527
527
|
const rightNodes = [group.nodes[right + 1]];
|
|
528
528
|
/** @type {Similarities} */
|
|
529
529
|
const rightSimilarities = [];
|
|
@@ -535,7 +535,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
535
535
|
}
|
|
536
536
|
queue.push(new Group(rightNodes, rightSimilarities));
|
|
537
537
|
|
|
538
|
-
/** @type {
|
|
538
|
+
/** @type {GroupNode<T>[]} */
|
|
539
539
|
const leftNodes = [group.nodes[0]];
|
|
540
540
|
/** @type {Similarities} */
|
|
541
541
|
const leftSimilarities = [];
|