@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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const Chunk = require("../Chunk");
|
|
9
9
|
const { STAGE_ADVANCED } = require("../OptimizationStages");
|
|
10
|
-
const WebpackError = require("../WebpackError");
|
|
10
|
+
const WebpackError = require("../errors/WebpackError");
|
|
11
11
|
const { requestToId } = require("../ids/IdHelpers");
|
|
12
12
|
const { isSubset } = require("../util/SetHelpers");
|
|
13
13
|
const SortableSet = require("../util/SortableSet");
|
|
@@ -32,12 +32,13 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
32
32
|
/** @typedef {import("../Module")} Module */
|
|
33
33
|
/** @typedef {import("../Module").SourceType} SourceType */
|
|
34
34
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
35
|
-
/** @typedef {import("../
|
|
35
|
+
/** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
|
|
36
36
|
/** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
|
|
37
37
|
/** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
|
|
38
38
|
/** @typedef {import("../util/deterministicGrouping").Sizes} Sizes */
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
+
* Defines the chunk filter fn callback.
|
|
41
42
|
* @callback ChunkFilterFn
|
|
42
43
|
* @param {Chunk} chunk
|
|
43
44
|
* @returns {boolean | undefined}
|
|
@@ -49,6 +50,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
49
50
|
/** @typedef {number} CountOfRequest */
|
|
50
51
|
|
|
51
52
|
/**
|
|
53
|
+
* Defines the combine size function callback.
|
|
52
54
|
* @callback CombineSizeFunction
|
|
53
55
|
* @param {Size} a
|
|
54
56
|
* @param {Size} b
|
|
@@ -60,6 +62,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
60
62
|
/** @typedef {Record<SourceType, Size>} SplitChunksSizes */
|
|
61
63
|
|
|
62
64
|
/**
|
|
65
|
+
* Defines the cache group source type used by this module.
|
|
63
66
|
* @typedef {object} CacheGroupSource
|
|
64
67
|
* @property {string} key
|
|
65
68
|
* @property {Priority=} priority
|
|
@@ -75,7 +78,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
75
78
|
* @property {CountOfChunk=} minChunks
|
|
76
79
|
* @property {CountOfRequest=} maxAsyncRequests
|
|
77
80
|
* @property {CountOfRequest=} maxInitialRequests
|
|
78
|
-
* @property {
|
|
81
|
+
* @property {ChunkFilenameTemplate=} filename
|
|
79
82
|
* @property {string=} idHint
|
|
80
83
|
* @property {string=} automaticNameDelimiter
|
|
81
84
|
* @property {boolean=} reuseExistingChunk
|
|
@@ -83,6 +86,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
83
86
|
*/
|
|
84
87
|
|
|
85
88
|
/**
|
|
89
|
+
* Defines the cache group type used by this module.
|
|
86
90
|
* @typedef {object} CacheGroup
|
|
87
91
|
* @property {string} key
|
|
88
92
|
* @property {Priority} priority
|
|
@@ -97,7 +101,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
97
101
|
* @property {CountOfChunk} minChunks
|
|
98
102
|
* @property {CountOfRequest} maxAsyncRequests
|
|
99
103
|
* @property {CountOfRequest} maxInitialRequests
|
|
100
|
-
* @property {
|
|
104
|
+
* @property {ChunkFilenameTemplate=} filename
|
|
101
105
|
* @property {string} idHint
|
|
102
106
|
* @property {string} automaticNameDelimiter
|
|
103
107
|
* @property {boolean} reuseExistingChunk
|
|
@@ -109,6 +113,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
109
113
|
*/
|
|
110
114
|
|
|
111
115
|
/**
|
|
116
|
+
* Defines the fallback cache group type used by this module.
|
|
112
117
|
* @typedef {object} FallbackCacheGroup
|
|
113
118
|
* @property {ChunkFilterFn} chunksFilter
|
|
114
119
|
* @property {SplitChunksSizes} minSize
|
|
@@ -118,6 +123,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
118
123
|
*/
|
|
119
124
|
|
|
120
125
|
/**
|
|
126
|
+
* Defines the cache groups context type used by this module.
|
|
121
127
|
* @typedef {object} CacheGroupsContext
|
|
122
128
|
* @property {ModuleGraph} moduleGraph
|
|
123
129
|
* @property {ChunkGraph} chunkGraph
|
|
@@ -126,6 +132,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
126
132
|
/** @typedef {(module: Module) => OptimizationSplitChunksCacheGroup | OptimizationSplitChunksCacheGroup[] | void} RawGetCacheGroups */
|
|
127
133
|
|
|
128
134
|
/**
|
|
135
|
+
* Defines the get cache groups callback.
|
|
129
136
|
* @callback GetCacheGroups
|
|
130
137
|
* @param {Module} module
|
|
131
138
|
* @param {CacheGroupsContext} context
|
|
@@ -133,6 +140,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
133
140
|
*/
|
|
134
141
|
|
|
135
142
|
/**
|
|
143
|
+
* Defines the get name fn callback.
|
|
136
144
|
* @callback GetNameFn
|
|
137
145
|
* @param {Module} module
|
|
138
146
|
* @param {Chunk[]} chunks
|
|
@@ -141,6 +149,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
141
149
|
*/
|
|
142
150
|
|
|
143
151
|
/**
|
|
152
|
+
* Defines the split chunks options type used by this module.
|
|
144
153
|
* @typedef {object} SplitChunksOptions
|
|
145
154
|
* @property {ChunkFilterFn} chunksFilter
|
|
146
155
|
* @property {DefaultSizeTypes} defaultSizeTypes
|
|
@@ -154,7 +163,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
154
163
|
* @property {CountOfRequest} maxAsyncRequests
|
|
155
164
|
* @property {CountOfRequest} maxInitialRequests
|
|
156
165
|
* @property {boolean} hidePathInfo
|
|
157
|
-
* @property {
|
|
166
|
+
* @property {ChunkFilenameTemplate=} filename
|
|
158
167
|
* @property {string} automaticNameDelimiter
|
|
159
168
|
* @property {GetCacheGroups} getCacheGroups
|
|
160
169
|
* @property {GetNameFn} getName
|
|
@@ -165,6 +174,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
165
174
|
/** @typedef {Set<Chunk>} ChunkSet */
|
|
166
175
|
|
|
167
176
|
/**
|
|
177
|
+
* Defines the chunks info item type used by this module.
|
|
168
178
|
* @typedef {object} ChunksInfoItem
|
|
169
179
|
* @property {SortableSet<Module>} modules
|
|
170
180
|
* @property {CacheGroup} cacheGroup
|
|
@@ -172,7 +182,6 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
172
182
|
* @property {string=} name
|
|
173
183
|
* @property {SplitChunksSizes} sizes
|
|
174
184
|
* @property {ChunkSet} chunks
|
|
175
|
-
* @property {ChunkSet} reusableChunks
|
|
176
185
|
* @property {Set<bigint | Chunk>} chunksKeys
|
|
177
186
|
*/
|
|
178
187
|
|
|
@@ -187,6 +196,7 @@ const deterministicGroupingForModules =
|
|
|
187
196
|
const getKeyCache = new WeakMap();
|
|
188
197
|
|
|
189
198
|
/**
|
|
199
|
+
* Returns hashed filename.
|
|
190
200
|
* @param {string} name a filename to hash
|
|
191
201
|
* @param {OutputOptions} outputOptions hash function used
|
|
192
202
|
* @returns {string} hashed filename
|
|
@@ -203,6 +213,7 @@ const hashFilename = (name, outputOptions) => {
|
|
|
203
213
|
};
|
|
204
214
|
|
|
205
215
|
/**
|
|
216
|
+
* Returns the number of requests.
|
|
206
217
|
* @param {Chunk} chunk the chunk
|
|
207
218
|
* @returns {CountOfRequest} the number of requests
|
|
208
219
|
*/
|
|
@@ -215,8 +226,8 @@ const getRequests = (chunk) => {
|
|
|
215
226
|
};
|
|
216
227
|
|
|
217
228
|
/**
|
|
229
|
+
* Returns result.
|
|
218
230
|
* @template {object} T
|
|
219
|
-
* @template {object} R
|
|
220
231
|
* @param {T} obj obj an object
|
|
221
232
|
* @param {(obj: T[keyof T], key: keyof T) => T[keyof T]} fn fn
|
|
222
233
|
* @returns {T} result
|
|
@@ -235,6 +246,7 @@ const mapObject = (obj, fn) => {
|
|
|
235
246
|
};
|
|
236
247
|
|
|
237
248
|
/**
|
|
249
|
+
* Checks whether this object is overlap.
|
|
238
250
|
* @template T
|
|
239
251
|
* @param {Set<T>} a set
|
|
240
252
|
* @param {Set<T>} b other set
|
|
@@ -250,6 +262,7 @@ const isOverlap = (a, b) => {
|
|
|
250
262
|
const compareModuleIterables = compareIterables(compareModulesByIdentifier);
|
|
251
263
|
|
|
252
264
|
/**
|
|
265
|
+
* Compares the provided values and returns their ordering.
|
|
253
266
|
* @param {ChunksInfoItem} a item
|
|
254
267
|
* @param {ChunksInfoItem} b item
|
|
255
268
|
* @returns {number} compare result
|
|
@@ -281,22 +294,29 @@ const compareEntries = (a, b) => {
|
|
|
281
294
|
};
|
|
282
295
|
|
|
283
296
|
/**
|
|
297
|
+
* Initial chunk filter.
|
|
284
298
|
* @param {Chunk} chunk the chunk
|
|
285
299
|
* @returns {boolean} true, if the chunk is an entry chunk
|
|
286
300
|
*/
|
|
287
301
|
const INITIAL_CHUNK_FILTER = (chunk) => chunk.canBeInitial();
|
|
288
302
|
/**
|
|
303
|
+
* Async chunk filter.
|
|
289
304
|
* @param {Chunk} chunk the chunk
|
|
290
305
|
* @returns {boolean} true, if the chunk is an async chunk
|
|
291
306
|
*/
|
|
292
307
|
const ASYNC_CHUNK_FILTER = (chunk) => !chunk.canBeInitial();
|
|
293
308
|
/**
|
|
309
|
+
* Returns always true.
|
|
294
310
|
* @param {Chunk} _chunk the chunk
|
|
295
311
|
* @returns {boolean} always true
|
|
296
312
|
*/
|
|
297
313
|
const ALL_CHUNK_FILTER = (_chunk) => true;
|
|
298
314
|
|
|
315
|
+
/** Placeholder until a chunk set group is filled and its signatures are written. */
|
|
316
|
+
const EMPTY_SIGNATURES = new Uint32Array(0);
|
|
317
|
+
|
|
299
318
|
/**
|
|
319
|
+
* Returns normalized representation.
|
|
300
320
|
* @param {OptimizationSplitChunksSizes | undefined} value the sizes
|
|
301
321
|
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
302
322
|
* @returns {SplitChunksSizes} normalized representation
|
|
@@ -314,6 +334,7 @@ const normalizeSizes = (value, defaultSizeTypes) => {
|
|
|
314
334
|
};
|
|
315
335
|
|
|
316
336
|
/**
|
|
337
|
+
* Merges the provided values into a single result.
|
|
317
338
|
* @param {...(SplitChunksSizes | undefined)} sizes the sizes
|
|
318
339
|
* @returns {SplitChunksSizes} the merged sizes
|
|
319
340
|
*/
|
|
@@ -327,6 +348,7 @@ const mergeSizes = (...sizes) => {
|
|
|
327
348
|
};
|
|
328
349
|
|
|
329
350
|
/**
|
|
351
|
+
* Checks whether this object contains the size.
|
|
330
352
|
* @param {SplitChunksSizes} sizes the sizes
|
|
331
353
|
* @returns {boolean} true, if there are sizes > 0
|
|
332
354
|
*/
|
|
@@ -338,6 +360,7 @@ const hasNonZeroSizes = (sizes) => {
|
|
|
338
360
|
};
|
|
339
361
|
|
|
340
362
|
/**
|
|
363
|
+
* Returns the combine sizes.
|
|
341
364
|
* @param {SplitChunksSizes} a first sizes
|
|
342
365
|
* @param {SplitChunksSizes} b second sizes
|
|
343
366
|
* @param {CombineSizeFunction} combine a function to combine sizes
|
|
@@ -360,6 +383,7 @@ const combineSizes = (a, b, combine) => {
|
|
|
360
383
|
};
|
|
361
384
|
|
|
362
385
|
/**
|
|
386
|
+
* Checks true if there are sizes and all existing sizes are at least minSize.
|
|
363
387
|
* @param {SplitChunksSizes} sizes the sizes
|
|
364
388
|
* @param {SplitChunksSizes} minSize the min sizes
|
|
365
389
|
* @returns {boolean} true if there are sizes and all existing sizes are at least `minSize`
|
|
@@ -374,6 +398,7 @@ const checkMinSize = (sizes, minSize) => {
|
|
|
374
398
|
};
|
|
375
399
|
|
|
376
400
|
/**
|
|
401
|
+
* Checks min size reduction.
|
|
377
402
|
* @param {SplitChunksSizes} sizes the sizes
|
|
378
403
|
* @param {SplitChunksSizes} minSizeReduction the min sizes
|
|
379
404
|
* @param {CountOfChunk} chunkCount number of chunks
|
|
@@ -391,6 +416,7 @@ const checkMinSizeReduction = (sizes, minSizeReduction, chunkCount) => {
|
|
|
391
416
|
};
|
|
392
417
|
|
|
393
418
|
/**
|
|
419
|
+
* Gets violating min sizes.
|
|
394
420
|
* @param {SplitChunksSizes} sizes the sizes
|
|
395
421
|
* @param {SplitChunksSizes} minSize the min sizes
|
|
396
422
|
* @returns {undefined | SourceTypes} list of size types that are below min size
|
|
@@ -410,6 +436,7 @@ const getViolatingMinSizes = (sizes, minSize) => {
|
|
|
410
436
|
};
|
|
411
437
|
|
|
412
438
|
/**
|
|
439
|
+
* Returns the total size.
|
|
413
440
|
* @param {SplitChunksSizes} sizes the sizes
|
|
414
441
|
* @returns {Size} the total size
|
|
415
442
|
*/
|
|
@@ -422,6 +449,7 @@ const totalSize = (sizes) => {
|
|
|
422
449
|
};
|
|
423
450
|
|
|
424
451
|
/**
|
|
452
|
+
* Returns a function to get the name of the chunk.
|
|
425
453
|
* @param {OptimizationSplitChunksCacheGroup["name"]} name the chunk name
|
|
426
454
|
* @returns {GetNameFn | undefined} a function to get the name of the chunk
|
|
427
455
|
*/
|
|
@@ -435,6 +463,7 @@ const normalizeName = (name) => {
|
|
|
435
463
|
};
|
|
436
464
|
|
|
437
465
|
/**
|
|
466
|
+
* Normalizes chunks filter.
|
|
438
467
|
* @param {OptimizationSplitChunksCacheGroup["chunks"]} chunks the chunk filter option
|
|
439
468
|
* @returns {ChunkFilterFn | undefined} the chunk filter function
|
|
440
469
|
*/
|
|
@@ -457,6 +486,7 @@ const normalizeChunksFilter = (chunks) => {
|
|
|
457
486
|
};
|
|
458
487
|
|
|
459
488
|
/**
|
|
489
|
+
* Normalizes cache groups.
|
|
460
490
|
* @param {undefined | GetCacheGroups | Record<string, false | string | RegExp | RawGetCacheGroups | OptimizationSplitChunksCacheGroup>} cacheGroups the cache group options
|
|
461
491
|
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
462
492
|
* @returns {GetCacheGroups} a function to get the cache groups
|
|
@@ -517,6 +547,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
|
|
|
517
547
|
}
|
|
518
548
|
}
|
|
519
549
|
/**
|
|
550
|
+
* Returns the matching cache groups.
|
|
520
551
|
* @param {Module} module the current module
|
|
521
552
|
* @param {CacheGroupsContext} context the current context
|
|
522
553
|
* @returns {CacheGroupSource[]} the matching cache groups
|
|
@@ -537,6 +568,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
|
|
|
537
568
|
/** @typedef {(module: Module, context: CacheGroupsContext) => boolean} CheckTestFn */
|
|
538
569
|
|
|
539
570
|
/**
|
|
571
|
+
* Checks true, if the module should be selected.
|
|
540
572
|
* @param {OptimizationSplitChunksCacheGroup["test"]} test test option
|
|
541
573
|
* @param {Module} module the module
|
|
542
574
|
* @param {CacheGroupsContext} context context object
|
|
@@ -562,6 +594,7 @@ const checkTest = (test, module, context) => {
|
|
|
562
594
|
/** @typedef {(type: string) => boolean} CheckModuleTypeFn */
|
|
563
595
|
|
|
564
596
|
/**
|
|
597
|
+
* Checks module type.
|
|
565
598
|
* @param {OptimizationSplitChunksCacheGroup["type"]} test type option
|
|
566
599
|
* @param {Module} module the module
|
|
567
600
|
* @returns {boolean} true, if the module should be selected
|
|
@@ -585,6 +618,7 @@ const checkModuleType = (test, module) => {
|
|
|
585
618
|
/** @typedef {(layer: string | null) => boolean} CheckModuleLayerFn */
|
|
586
619
|
|
|
587
620
|
/**
|
|
621
|
+
* Checks module layer.
|
|
588
622
|
* @param {OptimizationSplitChunksCacheGroup["layer"]} test type option
|
|
589
623
|
* @param {Module} module the module
|
|
590
624
|
* @returns {boolean} true, if the module should be selected
|
|
@@ -606,6 +640,7 @@ const checkModuleLayer = (test, module) => {
|
|
|
606
640
|
};
|
|
607
641
|
|
|
608
642
|
/**
|
|
643
|
+
* Creates a cache group source.
|
|
609
644
|
* @param {OptimizationSplitChunksCacheGroup} options the group options
|
|
610
645
|
* @param {string} key key of cache group
|
|
611
646
|
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
@@ -657,6 +692,7 @@ const PLUGIN_NAME = "SplitChunksPlugin";
|
|
|
657
692
|
|
|
658
693
|
module.exports = class SplitChunksPlugin {
|
|
659
694
|
/**
|
|
695
|
+
* Creates an instance of SplitChunksPlugin.
|
|
660
696
|
* @param {OptimizationSplitChunksOptions=} options plugin options
|
|
661
697
|
*/
|
|
662
698
|
constructor(options = {}) {
|
|
@@ -746,6 +782,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
746
782
|
}
|
|
747
783
|
|
|
748
784
|
/**
|
|
785
|
+
* Returns the cache group (cached).
|
|
749
786
|
* @param {CacheGroupSource} cacheGroupSource source
|
|
750
787
|
* @returns {CacheGroup} the cache group (cached)
|
|
751
788
|
*/
|
|
@@ -837,7 +874,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
837
874
|
}
|
|
838
875
|
|
|
839
876
|
/**
|
|
840
|
-
*
|
|
877
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
841
878
|
* @param {Compiler} compiler the compiler instance
|
|
842
879
|
* @returns {void}
|
|
843
880
|
*/
|
|
@@ -866,18 +903,25 @@ module.exports = class SplitChunksPlugin {
|
|
|
866
903
|
// Give each selected chunk an index (to create strings from chunks)
|
|
867
904
|
/** @type {Map<Chunk, bigint>} */
|
|
868
905
|
const chunkIndexMap = new Map();
|
|
906
|
+
// Dense per-chunk index, folded into the 64 bit membership
|
|
907
|
+
// signatures that reject non-subsets in getCombinations
|
|
908
|
+
/** @type {Map<Chunk, number>} */
|
|
909
|
+
const chunkSignatureBitMap = new Map();
|
|
869
910
|
const ZERO = BigInt("0");
|
|
870
911
|
const ONE = BigInt("1");
|
|
871
912
|
const START = ONE << BigInt("31");
|
|
872
913
|
let index = START;
|
|
914
|
+
let denseIndex = 0;
|
|
873
915
|
for (const chunk of chunks) {
|
|
874
916
|
chunkIndexMap.set(
|
|
875
917
|
chunk,
|
|
876
918
|
index | BigInt((Math.random() * 0x7fffffff) | 0)
|
|
877
919
|
);
|
|
920
|
+
chunkSignatureBitMap.set(chunk, denseIndex++ & 63);
|
|
878
921
|
index <<= ONE;
|
|
879
922
|
}
|
|
880
923
|
/**
|
|
924
|
+
* Returns key of the chunks.
|
|
881
925
|
* @param {Iterable<Chunk, undefined, undefined>} chunks list of chunks
|
|
882
926
|
* @returns {bigint | Chunk} key of the chunks
|
|
883
927
|
*/
|
|
@@ -898,6 +942,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
898
942
|
return key;
|
|
899
943
|
};
|
|
900
944
|
/**
|
|
945
|
+
* Returns stringified key.
|
|
901
946
|
* @param {bigint | Chunk} key key of the chunks
|
|
902
947
|
* @returns {string} stringified key
|
|
903
948
|
*/
|
|
@@ -926,6 +971,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
926
971
|
});
|
|
927
972
|
|
|
928
973
|
/**
|
|
974
|
+
* Group chunks by exports.
|
|
929
975
|
* @param {Module} module the module
|
|
930
976
|
* @returns {Iterable<Chunk[]>} groups of chunks with equal exports
|
|
931
977
|
*/
|
|
@@ -972,12 +1018,42 @@ module.exports = class SplitChunksPlugin {
|
|
|
972
1018
|
return { chunkSetsInGraph, singleChunkSets };
|
|
973
1019
|
});
|
|
974
1020
|
|
|
975
|
-
/**
|
|
1021
|
+
/**
|
|
1022
|
+
* Chunk sets of equal size, with a 64 bit membership signature
|
|
1023
|
+
* per set stored as two words at `2 * i` in `signatures`.
|
|
1024
|
+
* @typedef {object} ChunkSetGroup
|
|
1025
|
+
* @property {ChunkSet[]} sets the chunk sets
|
|
1026
|
+
* @property {Uint32Array} signatures two signature words per set
|
|
1027
|
+
*/
|
|
1028
|
+
|
|
1029
|
+
/** @typedef {Map<CountOfChunk, ChunkSetGroup>} ChunkSetsByCount */
|
|
1030
|
+
|
|
1031
|
+
// holds the signature of the set currently being combined; transient
|
|
1032
|
+
const signatureScratch = new Uint32Array(2);
|
|
1033
|
+
|
|
1034
|
+
/**
|
|
1035
|
+
* Folds a chunk set into a 64 bit membership signature.
|
|
1036
|
+
* @param {ChunkSet} chunksSet set of chunks
|
|
1037
|
+
* @param {Uint32Array} out target array
|
|
1038
|
+
* @param {number} offset index of the first of the two words
|
|
1039
|
+
* @returns {void}
|
|
1040
|
+
*/
|
|
1041
|
+
const writeSignature = (chunksSet, out, offset) => {
|
|
1042
|
+
out[offset] = 0;
|
|
1043
|
+
out[offset + 1] = 0;
|
|
1044
|
+
for (const chunk of chunksSet) {
|
|
1045
|
+
const bit = /** @type {number} */ (
|
|
1046
|
+
chunkSignatureBitMap.get(chunk)
|
|
1047
|
+
);
|
|
1048
|
+
out[offset + (bit >> 5)] |= 1 << (bit & 31);
|
|
1049
|
+
}
|
|
1050
|
+
};
|
|
976
1051
|
|
|
977
1052
|
// group these set of chunks by count
|
|
978
1053
|
// to allow to check less sets via isSubset
|
|
979
1054
|
// (only smaller sets can be subset)
|
|
980
1055
|
/**
|
|
1056
|
+
* Group chunk sets by count.
|
|
981
1057
|
* @param {IterableIterator<ChunkSet>} chunkSets set of sets of chunks
|
|
982
1058
|
* @returns {ChunkSetsByCount} map of sets of chunks by count
|
|
983
1059
|
*/
|
|
@@ -986,12 +1062,20 @@ module.exports = class SplitChunksPlugin {
|
|
|
986
1062
|
const chunkSetsByCount = new Map();
|
|
987
1063
|
for (const chunksSet of chunkSets) {
|
|
988
1064
|
const count = chunksSet.size;
|
|
989
|
-
let
|
|
990
|
-
if (
|
|
991
|
-
|
|
992
|
-
chunkSetsByCount.set(count,
|
|
1065
|
+
let group = chunkSetsByCount.get(count);
|
|
1066
|
+
if (group === undefined) {
|
|
1067
|
+
group = { sets: [], signatures: EMPTY_SIGNATURES };
|
|
1068
|
+
chunkSetsByCount.set(count, group);
|
|
993
1069
|
}
|
|
994
|
-
|
|
1070
|
+
group.sets.push(chunksSet);
|
|
1071
|
+
}
|
|
1072
|
+
for (const group of chunkSetsByCount.values()) {
|
|
1073
|
+
const { sets } = group;
|
|
1074
|
+
const signatures = new Uint32Array(sets.length * 2);
|
|
1075
|
+
for (let i = 0; i < sets.length; i++) {
|
|
1076
|
+
writeSignature(sets[i], signatures, i * 2);
|
|
1077
|
+
}
|
|
1078
|
+
group.signatures = signatures;
|
|
995
1079
|
}
|
|
996
1080
|
return chunkSetsByCount;
|
|
997
1081
|
};
|
|
@@ -1010,6 +1094,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1010
1094
|
|
|
1011
1095
|
// Create a list of possible combinations
|
|
1012
1096
|
/**
|
|
1097
|
+
* Creates a get combinations.
|
|
1013
1098
|
* @param {ChunkSetsInGraph} chunkSets chunk sets
|
|
1014
1099
|
* @param {ChunkSet} singleChunkSets single chunks sets
|
|
1015
1100
|
* @param {ChunkSetsByCount} chunkSetsByCount chunk sets by count
|
|
@@ -1036,10 +1121,24 @@ module.exports = class SplitChunksPlugin {
|
|
|
1036
1121
|
(chunkSets.get(key));
|
|
1037
1122
|
/** @type {Combinations} */
|
|
1038
1123
|
const array = [chunksSet];
|
|
1039
|
-
|
|
1124
|
+
writeSignature(chunksSet, signatureScratch, 0);
|
|
1125
|
+
const selfLow = signatureScratch[0];
|
|
1126
|
+
const selfHigh = signatureScratch[1];
|
|
1127
|
+
for (const [count, group] of chunkSetsByCount) {
|
|
1040
1128
|
// "equal" is not needed because they would have been merge in the first step
|
|
1041
1129
|
if (count < chunksSet.size) {
|
|
1042
|
-
|
|
1130
|
+
const { sets, signatures } = group;
|
|
1131
|
+
for (let i = 0; i < sets.length; i++) {
|
|
1132
|
+
// a subset cannot hold a signature bit the superset lacks,
|
|
1133
|
+
// so this rejects nearly every candidate without touching the Set
|
|
1134
|
+
const offset = i * 2;
|
|
1135
|
+
if (
|
|
1136
|
+
(signatures[offset] & ~selfLow) !== 0 ||
|
|
1137
|
+
(signatures[offset + 1] & ~selfHigh) !== 0
|
|
1138
|
+
) {
|
|
1139
|
+
continue;
|
|
1140
|
+
}
|
|
1141
|
+
const set = sets[i];
|
|
1043
1142
|
if (isSubset(chunksSet, set)) {
|
|
1044
1143
|
array.push(set);
|
|
1045
1144
|
}
|
|
@@ -1066,6 +1165,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1066
1165
|
});
|
|
1067
1166
|
|
|
1068
1167
|
/**
|
|
1168
|
+
* Returns combinations by key.
|
|
1069
1169
|
* @param {bigint | Chunk} key key
|
|
1070
1170
|
* @returns {Combinations} combinations by key
|
|
1071
1171
|
*/
|
|
@@ -1081,6 +1181,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1081
1181
|
);
|
|
1082
1182
|
});
|
|
1083
1183
|
/**
|
|
1184
|
+
* Gets exports combinations.
|
|
1084
1185
|
* @param {bigint | Chunk} key key
|
|
1085
1186
|
* @returns {Combinations} exports combinations by key
|
|
1086
1187
|
*/
|
|
@@ -1088,6 +1189,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1088
1189
|
getExportsCombinationsFactory()(key);
|
|
1089
1190
|
|
|
1090
1191
|
/**
|
|
1192
|
+
* Defines the selected chunks result type used by this module.
|
|
1091
1193
|
* @typedef {object} SelectedChunksResult
|
|
1092
1194
|
* @property {Chunk[]} chunks the list of chunks
|
|
1093
1195
|
* @property {bigint | Chunk} key a key of the list
|
|
@@ -1143,7 +1245,33 @@ module.exports = class SplitChunksPlugin {
|
|
|
1143
1245
|
/** @type {Map<string, ChunksInfoItem>} */
|
|
1144
1246
|
const chunksInfoMap = new Map();
|
|
1145
1247
|
|
|
1248
|
+
// The unnamed key is derived only from cache group and chunk set, so it
|
|
1249
|
+
// repeats for every module sharing that pair — build the string once
|
|
1250
|
+
/** @type {Map<CacheGroup, Map<bigint | Chunk, string>>} */
|
|
1251
|
+
const unnamedKeyCache = new Map();
|
|
1252
|
+
|
|
1253
|
+
/**
|
|
1254
|
+
* Returns the chunksInfoMap key for a cache group and chunk set.
|
|
1255
|
+
* @param {CacheGroup} cacheGroup the current cache group
|
|
1256
|
+
* @param {bigint | Chunk} selectedChunksKey a key of selectedChunks
|
|
1257
|
+
* @returns {string} key into chunksInfoMap
|
|
1258
|
+
*/
|
|
1259
|
+
const getUnnamedKey = (cacheGroup, selectedChunksKey) => {
|
|
1260
|
+
let byChunksKey = unnamedKeyCache.get(cacheGroup);
|
|
1261
|
+
if (byChunksKey === undefined) {
|
|
1262
|
+
byChunksKey = new Map();
|
|
1263
|
+
unnamedKeyCache.set(cacheGroup, byChunksKey);
|
|
1264
|
+
}
|
|
1265
|
+
let key = byChunksKey.get(selectedChunksKey);
|
|
1266
|
+
if (key === undefined) {
|
|
1267
|
+
key = `${cacheGroup.key} chunks:${keyToString(selectedChunksKey)}`;
|
|
1268
|
+
byChunksKey.set(selectedChunksKey, key);
|
|
1269
|
+
}
|
|
1270
|
+
return key;
|
|
1271
|
+
};
|
|
1272
|
+
|
|
1146
1273
|
/**
|
|
1274
|
+
* Adds module to chunks info map.
|
|
1147
1275
|
* @param {CacheGroup} cacheGroup the current cache group
|
|
1148
1276
|
* @param {number} cacheGroupIndex the index of the cache group of ordering
|
|
1149
1277
|
* @param {Chunk[]} selectedChunks chunks selected for this module
|
|
@@ -1225,11 +1353,9 @@ module.exports = class SplitChunksPlugin {
|
|
|
1225
1353
|
// When it has a name we use the name as key
|
|
1226
1354
|
// Otherwise we create the key from chunks and cache group key
|
|
1227
1355
|
// This automatically merges equal names
|
|
1228
|
-
const key =
|
|
1229
|
-
cacheGroup.key
|
|
1230
|
-
(
|
|
1231
|
-
? ` name:${name}`
|
|
1232
|
-
: ` chunks:${keyToString(selectedChunksKey)}`);
|
|
1356
|
+
const key = name
|
|
1357
|
+
? `${cacheGroup.key} name:${name}`
|
|
1358
|
+
: getUnnamedKey(cacheGroup, selectedChunksKey);
|
|
1233
1359
|
// Add module to maps
|
|
1234
1360
|
let info = chunksInfoMap.get(key);
|
|
1235
1361
|
if (info === undefined) {
|
|
@@ -1245,7 +1371,6 @@ module.exports = class SplitChunksPlugin {
|
|
|
1245
1371
|
name,
|
|
1246
1372
|
sizes: {},
|
|
1247
1373
|
chunks: new Set(),
|
|
1248
|
-
reusableChunks: new Set(),
|
|
1249
1374
|
chunksKeys: new Set()
|
|
1250
1375
|
})
|
|
1251
1376
|
);
|
|
@@ -1271,6 +1396,35 @@ module.exports = class SplitChunksPlugin {
|
|
|
1271
1396
|
chunkGraph
|
|
1272
1397
|
};
|
|
1273
1398
|
|
|
1399
|
+
/**
|
|
1400
|
+
* Returns combinations of the chunks the module is in.
|
|
1401
|
+
* @param {Module} module the module
|
|
1402
|
+
* @returns {Combinations} chunk combinations
|
|
1403
|
+
*/
|
|
1404
|
+
const computeCombinations = (module) =>
|
|
1405
|
+
getCombinations(getKey(chunkGraph.getModuleChunksIterable(module)));
|
|
1406
|
+
|
|
1407
|
+
/**
|
|
1408
|
+
* Returns combinations of the module's chunks grouped by used exports.
|
|
1409
|
+
* @param {Module} module the module
|
|
1410
|
+
* @returns {Set<ChunkSet | Chunk>} chunk combinations
|
|
1411
|
+
*/
|
|
1412
|
+
const computeCombinationsByUsedExports = (module) => {
|
|
1413
|
+
// fill the groupedByExportsMap
|
|
1414
|
+
getExportsChunkSetsInGraph();
|
|
1415
|
+
/** @type {Set<ChunkSet | Chunk>} */
|
|
1416
|
+
const set = new Set();
|
|
1417
|
+
const groupedByUsedExports =
|
|
1418
|
+
/** @type {Iterable<Chunk[]>} */
|
|
1419
|
+
(groupedByExportsMap.get(module));
|
|
1420
|
+
for (const chunks of groupedByUsedExports) {
|
|
1421
|
+
for (const comb of getExportsCombinations(getKey(chunks))) {
|
|
1422
|
+
set.add(comb);
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
return set;
|
|
1426
|
+
};
|
|
1427
|
+
|
|
1274
1428
|
logger.timeEnd("prepare");
|
|
1275
1429
|
|
|
1276
1430
|
logger.time("modules");
|
|
@@ -1283,38 +1437,29 @@ module.exports = class SplitChunksPlugin {
|
|
|
1283
1437
|
continue;
|
|
1284
1438
|
}
|
|
1285
1439
|
|
|
1286
|
-
//
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
});
|
|
1292
|
-
|
|
1293
|
-
// Prepare some values (usedExports = true)
|
|
1294
|
-
const getCombsByUsedExports = memoize(() => {
|
|
1295
|
-
// fill the groupedByExportsMap
|
|
1296
|
-
getExportsChunkSetsInGraph();
|
|
1297
|
-
/** @type {Set<ChunkSet | Chunk>} */
|
|
1298
|
-
const set = new Set();
|
|
1299
|
-
const groupedByUsedExports =
|
|
1300
|
-
/** @type {Iterable<Chunk[]>} */
|
|
1301
|
-
(groupedByExportsMap.get(module));
|
|
1302
|
-
for (const chunks of groupedByUsedExports) {
|
|
1303
|
-
const chunksKey = getKey(chunks);
|
|
1304
|
-
for (const comb of getExportsCombinations(chunksKey)) {
|
|
1305
|
-
set.add(comb);
|
|
1306
|
-
}
|
|
1307
|
-
}
|
|
1308
|
-
return set;
|
|
1309
|
-
});
|
|
1440
|
+
// Computed at most once per module, on first use by a cache group
|
|
1441
|
+
/** @type {Combinations | undefined} */
|
|
1442
|
+
let combsCache;
|
|
1443
|
+
/** @type {Set<ChunkSet | Chunk> | undefined} */
|
|
1444
|
+
let combsByUsedExportsCache;
|
|
1310
1445
|
|
|
1311
1446
|
let cacheGroupIndex = 0;
|
|
1312
1447
|
for (const cacheGroupSource of cacheGroups) {
|
|
1313
1448
|
const cacheGroup = this._getCacheGroup(cacheGroupSource);
|
|
1314
1449
|
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1450
|
+
let combs;
|
|
1451
|
+
if (cacheGroup.usedExports) {
|
|
1452
|
+
if (combsByUsedExportsCache === undefined) {
|
|
1453
|
+
combsByUsedExportsCache =
|
|
1454
|
+
computeCombinationsByUsedExports(module);
|
|
1455
|
+
}
|
|
1456
|
+
combs = combsByUsedExportsCache;
|
|
1457
|
+
} else {
|
|
1458
|
+
if (combsCache === undefined) {
|
|
1459
|
+
combsCache = computeCombinations(module);
|
|
1460
|
+
}
|
|
1461
|
+
combs = combsCache;
|
|
1462
|
+
}
|
|
1318
1463
|
// For all combination of chunk selection
|
|
1319
1464
|
for (const chunkCombination of combs) {
|
|
1320
1465
|
// Break if minimum number of chunks is not reached
|
|
@@ -1346,6 +1491,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1346
1491
|
logger.time("queue");
|
|
1347
1492
|
|
|
1348
1493
|
/**
|
|
1494
|
+
* Removes modules with source type.
|
|
1349
1495
|
* @param {ChunksInfoItem} info entry
|
|
1350
1496
|
* @param {SourceTypes} sourceTypes source types to be removed
|
|
1351
1497
|
*/
|
|
@@ -1362,6 +1508,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1362
1508
|
};
|
|
1363
1509
|
|
|
1364
1510
|
/**
|
|
1511
|
+
* Removes min size violating modules.
|
|
1365
1512
|
* @param {ChunksInfoItem} info entry
|
|
1366
1513
|
* @returns {boolean} true, if entry become empty
|
|
1367
1514
|
*/
|
|
@@ -1392,6 +1539,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1392
1539
|
}
|
|
1393
1540
|
|
|
1394
1541
|
/**
|
|
1542
|
+
* Defines the max size queue item type used by this module.
|
|
1395
1543
|
* @typedef {object} MaxSizeQueueItem
|
|
1396
1544
|
* @property {SplitChunksSizes} minSize
|
|
1397
1545
|
* @property {SplitChunksSizes} maxAsyncSize
|
|
@@ -1529,12 +1677,14 @@ module.exports = class SplitChunksPlugin {
|
|
|
1529
1677
|
}
|
|
1530
1678
|
if (usedChunks.size >= item.cacheGroup.minChunks) {
|
|
1531
1679
|
const chunksArr = [...usedChunks];
|
|
1680
|
+
// invariant across the module loop below
|
|
1681
|
+
const usedChunksKey = getKey(usedChunks);
|
|
1532
1682
|
for (const module of item.modules) {
|
|
1533
1683
|
addModuleToChunksInfoMap(
|
|
1534
1684
|
item.cacheGroup,
|
|
1535
1685
|
item.cacheGroupIndex,
|
|
1536
1686
|
chunksArr,
|
|
1537
|
-
|
|
1687
|
+
usedChunksKey,
|
|
1538
1688
|
module
|
|
1539
1689
|
);
|
|
1540
1690
|
}
|