webpack 5.97.1 → 5.104.1
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 +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -12,8 +12,8 @@ const { requestToId } = require("../ids/IdHelpers");
|
|
|
12
12
|
const { isSubset } = require("../util/SetHelpers");
|
|
13
13
|
const SortableSet = require("../util/SortableSet");
|
|
14
14
|
const {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
compareIterables,
|
|
16
|
+
compareModulesByIdentifier
|
|
17
17
|
} = require("../util/comparators");
|
|
18
18
|
const createHash = require("../util/createHash");
|
|
19
19
|
const deterministicGrouping = require("../util/deterministicGrouping");
|
|
@@ -25,37 +25,46 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
25
25
|
/** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksGetCacheGroups} OptimizationSplitChunksGetCacheGroups */
|
|
26
26
|
/** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
|
|
27
27
|
/** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksSizes} OptimizationSplitChunksSizes */
|
|
28
|
-
/** @typedef {import("
|
|
28
|
+
/** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
|
|
29
|
+
/** @typedef {import("../Chunk").ChunkName} ChunkName */
|
|
29
30
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
30
31
|
/** @typedef {import("../ChunkGroup")} ChunkGroup */
|
|
31
32
|
/** @typedef {import("../Compiler")} Compiler */
|
|
32
33
|
/** @typedef {import("../Module")} Module */
|
|
34
|
+
/** @typedef {import("../Module").SourceType} SourceType */
|
|
33
35
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
34
36
|
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
|
35
37
|
/** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
|
|
36
38
|
/** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
|
|
37
39
|
|
|
38
|
-
/** @typedef {Record<string, number>} SplitChunksSizes */
|
|
39
|
-
|
|
40
40
|
/**
|
|
41
|
-
* @callback
|
|
41
|
+
* @callback ChunkFilterFn
|
|
42
42
|
* @param {Chunk} chunk
|
|
43
43
|
* @returns {boolean | undefined}
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
+
/** @typedef {number} Priority */
|
|
47
|
+
/** @typedef {number} Size */
|
|
48
|
+
/** @typedef {number} CountOfChunk */
|
|
49
|
+
/** @typedef {number} CountOfRequest */
|
|
50
|
+
|
|
46
51
|
/**
|
|
47
52
|
* @callback CombineSizeFunction
|
|
48
|
-
* @param {
|
|
49
|
-
* @param {
|
|
50
|
-
* @returns {
|
|
53
|
+
* @param {Size} a
|
|
54
|
+
* @param {Size} b
|
|
55
|
+
* @returns {Size}
|
|
51
56
|
*/
|
|
52
57
|
|
|
58
|
+
/** @typedef {SourceType[]} SourceTypes */
|
|
59
|
+
/** @typedef {SourceType[]} DefaultSizeTypes */
|
|
60
|
+
/** @typedef {Record<SourceType, Size>} SplitChunksSizes */
|
|
61
|
+
|
|
53
62
|
/**
|
|
54
63
|
* @typedef {object} CacheGroupSource
|
|
55
|
-
* @property {string
|
|
56
|
-
* @property {
|
|
57
|
-
* @property {
|
|
58
|
-
* @property {
|
|
64
|
+
* @property {string} key
|
|
65
|
+
* @property {Priority=} priority
|
|
66
|
+
* @property {GetNameFn=} getName
|
|
67
|
+
* @property {ChunkFilterFn=} chunksFilter
|
|
59
68
|
* @property {boolean=} enforce
|
|
60
69
|
* @property {SplitChunksSizes} minSize
|
|
61
70
|
* @property {SplitChunksSizes} minSizeReduction
|
|
@@ -63,9 +72,9 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
63
72
|
* @property {SplitChunksSizes} enforceSizeThreshold
|
|
64
73
|
* @property {SplitChunksSizes} maxAsyncSize
|
|
65
74
|
* @property {SplitChunksSizes} maxInitialSize
|
|
66
|
-
* @property {
|
|
67
|
-
* @property {
|
|
68
|
-
* @property {
|
|
75
|
+
* @property {CountOfChunk=} minChunks
|
|
76
|
+
* @property {CountOfRequest=} maxAsyncRequests
|
|
77
|
+
* @property {CountOfRequest=} maxInitialRequests
|
|
69
78
|
* @property {TemplatePath=} filename
|
|
70
79
|
* @property {string=} idHint
|
|
71
80
|
* @property {string=} automaticNameDelimiter
|
|
@@ -76,20 +85,20 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
76
85
|
/**
|
|
77
86
|
* @typedef {object} CacheGroup
|
|
78
87
|
* @property {string} key
|
|
79
|
-
* @property {
|
|
80
|
-
* @property {
|
|
81
|
-
* @property {
|
|
88
|
+
* @property {Priority} priority
|
|
89
|
+
* @property {GetNameFn=} getName
|
|
90
|
+
* @property {ChunkFilterFn} chunksFilter
|
|
82
91
|
* @property {SplitChunksSizes} minSize
|
|
83
92
|
* @property {SplitChunksSizes} minSizeReduction
|
|
84
93
|
* @property {SplitChunksSizes} minRemainingSize
|
|
85
94
|
* @property {SplitChunksSizes} enforceSizeThreshold
|
|
86
95
|
* @property {SplitChunksSizes} maxAsyncSize
|
|
87
96
|
* @property {SplitChunksSizes} maxInitialSize
|
|
88
|
-
* @property {
|
|
89
|
-
* @property {
|
|
90
|
-
* @property {
|
|
97
|
+
* @property {CountOfChunk} minChunks
|
|
98
|
+
* @property {CountOfRequest} maxAsyncRequests
|
|
99
|
+
* @property {CountOfRequest} maxInitialRequests
|
|
91
100
|
* @property {TemplatePath=} filename
|
|
92
|
-
* @property {string
|
|
101
|
+
* @property {string} idHint
|
|
93
102
|
* @property {string} automaticNameDelimiter
|
|
94
103
|
* @property {boolean} reuseExistingChunk
|
|
95
104
|
* @property {boolean} usedExports
|
|
@@ -101,7 +110,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
101
110
|
|
|
102
111
|
/**
|
|
103
112
|
* @typedef {object} FallbackCacheGroup
|
|
104
|
-
* @property {
|
|
113
|
+
* @property {ChunkFilterFn} chunksFilter
|
|
105
114
|
* @property {SplitChunksSizes} minSize
|
|
106
115
|
* @property {SplitChunksSizes} maxAsyncSize
|
|
107
116
|
* @property {SplitChunksSizes} maxInitialSize
|
|
@@ -118,55 +127,58 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
118
127
|
* @callback GetCacheGroups
|
|
119
128
|
* @param {Module} module
|
|
120
129
|
* @param {CacheGroupsContext} context
|
|
121
|
-
* @returns {CacheGroupSource[]}
|
|
130
|
+
* @returns {CacheGroupSource[] | null}
|
|
122
131
|
*/
|
|
123
132
|
|
|
124
133
|
/**
|
|
125
|
-
* @callback
|
|
126
|
-
* @param {Module
|
|
127
|
-
* @param {Chunk[]
|
|
128
|
-
* @param {string
|
|
129
|
-
* @returns {string
|
|
134
|
+
* @callback GetNameFn
|
|
135
|
+
* @param {Module} module
|
|
136
|
+
* @param {Chunk[]} chunks
|
|
137
|
+
* @param {string} key
|
|
138
|
+
* @returns {string | undefined}
|
|
130
139
|
*/
|
|
131
140
|
|
|
132
141
|
/**
|
|
133
142
|
* @typedef {object} SplitChunksOptions
|
|
134
|
-
* @property {
|
|
135
|
-
* @property {
|
|
143
|
+
* @property {ChunkFilterFn} chunksFilter
|
|
144
|
+
* @property {DefaultSizeTypes} defaultSizeTypes
|
|
136
145
|
* @property {SplitChunksSizes} minSize
|
|
137
146
|
* @property {SplitChunksSizes} minSizeReduction
|
|
138
147
|
* @property {SplitChunksSizes} minRemainingSize
|
|
139
148
|
* @property {SplitChunksSizes} enforceSizeThreshold
|
|
140
149
|
* @property {SplitChunksSizes} maxInitialSize
|
|
141
150
|
* @property {SplitChunksSizes} maxAsyncSize
|
|
142
|
-
* @property {
|
|
143
|
-
* @property {
|
|
144
|
-
* @property {
|
|
151
|
+
* @property {CountOfChunk} minChunks
|
|
152
|
+
* @property {CountOfRequest} maxAsyncRequests
|
|
153
|
+
* @property {CountOfRequest} maxInitialRequests
|
|
145
154
|
* @property {boolean} hidePathInfo
|
|
146
|
-
* @property {TemplatePath} filename
|
|
155
|
+
* @property {TemplatePath=} filename
|
|
147
156
|
* @property {string} automaticNameDelimiter
|
|
148
157
|
* @property {GetCacheGroups} getCacheGroups
|
|
149
|
-
* @property {
|
|
158
|
+
* @property {GetNameFn} getName
|
|
150
159
|
* @property {boolean} usedExports
|
|
151
160
|
* @property {FallbackCacheGroup} fallbackCacheGroup
|
|
152
161
|
*/
|
|
153
162
|
|
|
163
|
+
/** @typedef {Set<Chunk>} ChunkSet */
|
|
164
|
+
|
|
154
165
|
/**
|
|
155
166
|
* @typedef {object} ChunksInfoItem
|
|
156
167
|
* @property {SortableSet<Module>} modules
|
|
157
168
|
* @property {CacheGroup} cacheGroup
|
|
158
169
|
* @property {number} cacheGroupIndex
|
|
159
|
-
* @property {string} name
|
|
160
|
-
* @property {
|
|
161
|
-
* @property {
|
|
162
|
-
* @property {
|
|
170
|
+
* @property {string=} name
|
|
171
|
+
* @property {SplitChunksSizes} sizes
|
|
172
|
+
* @property {ChunkSet} chunks
|
|
173
|
+
* @property {ChunkSet} reusableChunks
|
|
163
174
|
* @property {Set<bigint | Chunk>} chunksKeys
|
|
164
175
|
*/
|
|
165
176
|
|
|
166
|
-
|
|
177
|
+
/** @type {GetNameFn} */
|
|
178
|
+
const defaultGetName = () => undefined;
|
|
167
179
|
|
|
168
180
|
const deterministicGroupingForModules =
|
|
169
|
-
/** @type {
|
|
181
|
+
/** @type {(options: DeterministicGroupingOptionsForModule) => DeterministicGroupingGroupedItemsForModule[]} */
|
|
170
182
|
(deterministicGrouping);
|
|
171
183
|
|
|
172
184
|
/** @type {WeakMap<Module, string>} */
|
|
@@ -190,9 +202,9 @@ const hashFilename = (name, outputOptions) => {
|
|
|
190
202
|
|
|
191
203
|
/**
|
|
192
204
|
* @param {Chunk} chunk the chunk
|
|
193
|
-
* @returns {
|
|
205
|
+
* @returns {CountOfRequest} the number of requests
|
|
194
206
|
*/
|
|
195
|
-
const getRequests = chunk => {
|
|
207
|
+
const getRequests = (chunk) => {
|
|
196
208
|
let requests = 0;
|
|
197
209
|
for (const chunkGroup of chunk.groupsIterable) {
|
|
198
210
|
requests = Math.max(requests, chunkGroup.chunks.length);
|
|
@@ -204,7 +216,7 @@ const getRequests = chunk => {
|
|
|
204
216
|
* @template {object} T
|
|
205
217
|
* @template {object} R
|
|
206
218
|
* @param {T} obj obj an object
|
|
207
|
-
* @param {
|
|
219
|
+
* @param {(obj: T[keyof T], key: keyof T) => T[keyof T]} fn fn
|
|
208
220
|
* @returns {T} result
|
|
209
221
|
*/
|
|
210
222
|
const mapObject = (obj, fn) => {
|
|
@@ -269,26 +281,26 @@ const compareEntries = (a, b) => {
|
|
|
269
281
|
* @param {Chunk} chunk the chunk
|
|
270
282
|
* @returns {boolean} true, if the chunk is an entry chunk
|
|
271
283
|
*/
|
|
272
|
-
const INITIAL_CHUNK_FILTER = chunk => chunk.canBeInitial();
|
|
284
|
+
const INITIAL_CHUNK_FILTER = (chunk) => chunk.canBeInitial();
|
|
273
285
|
/**
|
|
274
286
|
* @param {Chunk} chunk the chunk
|
|
275
287
|
* @returns {boolean} true, if the chunk is an async chunk
|
|
276
288
|
*/
|
|
277
|
-
const ASYNC_CHUNK_FILTER = chunk => !chunk.canBeInitial();
|
|
289
|
+
const ASYNC_CHUNK_FILTER = (chunk) => !chunk.canBeInitial();
|
|
278
290
|
/**
|
|
279
|
-
* @param {Chunk}
|
|
291
|
+
* @param {Chunk} _chunk the chunk
|
|
280
292
|
* @returns {boolean} always true
|
|
281
293
|
*/
|
|
282
|
-
const ALL_CHUNK_FILTER =
|
|
294
|
+
const ALL_CHUNK_FILTER = (_chunk) => true;
|
|
283
295
|
|
|
284
296
|
/**
|
|
285
297
|
* @param {OptimizationSplitChunksSizes | undefined} value the sizes
|
|
286
|
-
* @param {
|
|
298
|
+
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
287
299
|
* @returns {SplitChunksSizes} normalized representation
|
|
288
300
|
*/
|
|
289
301
|
const normalizeSizes = (value, defaultSizeTypes) => {
|
|
290
302
|
if (typeof value === "number") {
|
|
291
|
-
/** @type {
|
|
303
|
+
/** @type {SplitChunksSizes} */
|
|
292
304
|
const o = {};
|
|
293
305
|
for (const sizeType of defaultSizeTypes) o[sizeType] = value;
|
|
294
306
|
return o;
|
|
@@ -315,8 +327,8 @@ const mergeSizes = (...sizes) => {
|
|
|
315
327
|
* @param {SplitChunksSizes} sizes the sizes
|
|
316
328
|
* @returns {boolean} true, if there are sizes > 0
|
|
317
329
|
*/
|
|
318
|
-
const hasNonZeroSizes = sizes => {
|
|
319
|
-
for (const key of Object.keys(sizes)) {
|
|
330
|
+
const hasNonZeroSizes = (sizes) => {
|
|
331
|
+
for (const key of /** @type {SourceType[]} */ (Object.keys(sizes))) {
|
|
320
332
|
if (sizes[key] > 0) return true;
|
|
321
333
|
}
|
|
322
334
|
return false;
|
|
@@ -329,8 +341,8 @@ const hasNonZeroSizes = sizes => {
|
|
|
329
341
|
* @returns {SplitChunksSizes} the combine sizes
|
|
330
342
|
*/
|
|
331
343
|
const combineSizes = (a, b, combine) => {
|
|
332
|
-
const aKeys = new Set(Object.keys(a));
|
|
333
|
-
const bKeys = new Set(Object.keys(b));
|
|
344
|
+
const aKeys = /** @type {Set<SourceType>} */ (new Set(Object.keys(a)));
|
|
345
|
+
const bKeys = /** @type {Set<SourceType>} */ (new Set(Object.keys(b)));
|
|
334
346
|
/** @type {SplitChunksSizes} */
|
|
335
347
|
const result = {};
|
|
336
348
|
for (const key of aKeys) {
|
|
@@ -350,7 +362,7 @@ const combineSizes = (a, b, combine) => {
|
|
|
350
362
|
* @returns {boolean} true if there are sizes and all existing sizes are at least `minSize`
|
|
351
363
|
*/
|
|
352
364
|
const checkMinSize = (sizes, minSize) => {
|
|
353
|
-
for (const key of Object.keys(minSize)) {
|
|
365
|
+
for (const key of /** @type {SourceType[]} */ (Object.keys(minSize))) {
|
|
354
366
|
const size = sizes[key];
|
|
355
367
|
if (size === undefined || size === 0) continue;
|
|
356
368
|
if (size < minSize[key]) return false;
|
|
@@ -361,11 +373,13 @@ const checkMinSize = (sizes, minSize) => {
|
|
|
361
373
|
/**
|
|
362
374
|
* @param {SplitChunksSizes} sizes the sizes
|
|
363
375
|
* @param {SplitChunksSizes} minSizeReduction the min sizes
|
|
364
|
-
* @param {
|
|
376
|
+
* @param {CountOfChunk} chunkCount number of chunks
|
|
365
377
|
* @returns {boolean} true if there are sizes and all existing sizes are at least `minSizeReduction`
|
|
366
378
|
*/
|
|
367
379
|
const checkMinSizeReduction = (sizes, minSizeReduction, chunkCount) => {
|
|
368
|
-
for (const key of
|
|
380
|
+
for (const key of /** @type {SourceType[]} */ (
|
|
381
|
+
Object.keys(minSizeReduction)
|
|
382
|
+
)) {
|
|
369
383
|
const size = sizes[key];
|
|
370
384
|
if (size === undefined || size === 0) continue;
|
|
371
385
|
if (size * chunkCount < minSizeReduction[key]) return false;
|
|
@@ -376,11 +390,12 @@ const checkMinSizeReduction = (sizes, minSizeReduction, chunkCount) => {
|
|
|
376
390
|
/**
|
|
377
391
|
* @param {SplitChunksSizes} sizes the sizes
|
|
378
392
|
* @param {SplitChunksSizes} minSize the min sizes
|
|
379
|
-
* @returns {undefined |
|
|
393
|
+
* @returns {undefined | SourceTypes} list of size types that are below min size
|
|
380
394
|
*/
|
|
381
395
|
const getViolatingMinSizes = (sizes, minSize) => {
|
|
396
|
+
/** @type {SourceTypes | undefined} */
|
|
382
397
|
let list;
|
|
383
|
-
for (const key of Object.keys(minSize)) {
|
|
398
|
+
for (const key of /** @type {SourceType[]} */ (Object.keys(minSize))) {
|
|
384
399
|
const size = sizes[key];
|
|
385
400
|
if (size === undefined || size === 0) continue;
|
|
386
401
|
if (size < minSize[key]) {
|
|
@@ -393,34 +408,34 @@ const getViolatingMinSizes = (sizes, minSize) => {
|
|
|
393
408
|
|
|
394
409
|
/**
|
|
395
410
|
* @param {SplitChunksSizes} sizes the sizes
|
|
396
|
-
* @returns {
|
|
411
|
+
* @returns {Size} the total size
|
|
397
412
|
*/
|
|
398
|
-
const totalSize = sizes => {
|
|
413
|
+
const totalSize = (sizes) => {
|
|
399
414
|
let size = 0;
|
|
400
|
-
for (const key of Object.keys(sizes)) {
|
|
415
|
+
for (const key of /** @type {SourceType[]} */ (Object.keys(sizes))) {
|
|
401
416
|
size += sizes[key];
|
|
402
417
|
}
|
|
403
418
|
return size;
|
|
404
419
|
};
|
|
405
420
|
|
|
406
421
|
/**
|
|
407
|
-
* @param {
|
|
408
|
-
* @returns {
|
|
422
|
+
* @param {OptimizationSplitChunksCacheGroup["name"]} name the chunk name
|
|
423
|
+
* @returns {GetNameFn | undefined} a function to get the name of the chunk
|
|
409
424
|
*/
|
|
410
|
-
const normalizeName = name => {
|
|
425
|
+
const normalizeName = (name) => {
|
|
411
426
|
if (typeof name === "string") {
|
|
412
427
|
return () => name;
|
|
413
428
|
}
|
|
414
429
|
if (typeof name === "function") {
|
|
415
|
-
return /** @type {
|
|
430
|
+
return /** @type {GetNameFn} */ (name);
|
|
416
431
|
}
|
|
417
432
|
};
|
|
418
433
|
|
|
419
434
|
/**
|
|
420
435
|
* @param {OptimizationSplitChunksCacheGroup["chunks"]} chunks the chunk filter option
|
|
421
|
-
* @returns {
|
|
436
|
+
* @returns {ChunkFilterFn | undefined} the chunk filter function
|
|
422
437
|
*/
|
|
423
|
-
const normalizeChunksFilter = chunks => {
|
|
438
|
+
const normalizeChunksFilter = (chunks) => {
|
|
424
439
|
if (chunks === "initial") {
|
|
425
440
|
return INITIAL_CHUNK_FILTER;
|
|
426
441
|
}
|
|
@@ -431,7 +446,7 @@ const normalizeChunksFilter = chunks => {
|
|
|
431
446
|
return ALL_CHUNK_FILTER;
|
|
432
447
|
}
|
|
433
448
|
if (chunks instanceof RegExp) {
|
|
434
|
-
return chunk => (chunk.name ? chunks.test(chunk.name) : false);
|
|
449
|
+
return (chunk) => (chunk.name ? chunks.test(chunk.name) : false);
|
|
435
450
|
}
|
|
436
451
|
if (typeof chunks === "function") {
|
|
437
452
|
return chunks;
|
|
@@ -439,8 +454,8 @@ const normalizeChunksFilter = chunks => {
|
|
|
439
454
|
};
|
|
440
455
|
|
|
441
456
|
/**
|
|
442
|
-
* @param {GetCacheGroups | Record<string, false|string|RegExp|OptimizationSplitChunksGetCacheGroups|OptimizationSplitChunksCacheGroup>} cacheGroups the cache group options
|
|
443
|
-
* @param {
|
|
457
|
+
* @param {undefined | GetCacheGroups | Record<string, false | string | RegExp | OptimizationSplitChunksGetCacheGroups | OptimizationSplitChunksCacheGroup>} cacheGroups the cache group options
|
|
458
|
+
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
444
459
|
* @returns {GetCacheGroups} a function to get the cache groups
|
|
445
460
|
*/
|
|
446
461
|
const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
|
|
@@ -448,7 +463,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
|
|
|
448
463
|
return cacheGroups;
|
|
449
464
|
}
|
|
450
465
|
if (typeof cacheGroups === "object" && cacheGroups !== null) {
|
|
451
|
-
/** @type {(
|
|
466
|
+
/** @type {((module: Module, context: CacheGroupsContext, results: CacheGroupSource[]) => void)[]} */
|
|
452
467
|
const handlers = [];
|
|
453
468
|
for (const key of Object.keys(cacheGroups)) {
|
|
454
469
|
const option = cacheGroups[key];
|
|
@@ -516,7 +531,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
|
|
|
516
531
|
};
|
|
517
532
|
|
|
518
533
|
/**
|
|
519
|
-
* @param {
|
|
534
|
+
* @param {OptimizationSplitChunksCacheGroup["test"]} test test option
|
|
520
535
|
* @param {Module} module the module
|
|
521
536
|
* @param {CacheGroupsContext} context context object
|
|
522
537
|
* @returns {boolean} true, if the module should be selected
|
|
@@ -529,17 +544,17 @@ const checkTest = (test, module, context) => {
|
|
|
529
544
|
if (typeof test === "boolean") return test;
|
|
530
545
|
if (typeof test === "string") {
|
|
531
546
|
const name = module.nameForCondition();
|
|
532
|
-
return name
|
|
547
|
+
return name ? name.startsWith(test) : false;
|
|
533
548
|
}
|
|
534
549
|
if (test instanceof RegExp) {
|
|
535
550
|
const name = module.nameForCondition();
|
|
536
|
-
return name
|
|
551
|
+
return name ? test.test(name) : false;
|
|
537
552
|
}
|
|
538
553
|
return false;
|
|
539
554
|
};
|
|
540
555
|
|
|
541
556
|
/**
|
|
542
|
-
* @param {
|
|
557
|
+
* @param {OptimizationSplitChunksCacheGroup["type"]} test type option
|
|
543
558
|
* @param {Module} module the module
|
|
544
559
|
* @returns {boolean} true, if the module should be selected
|
|
545
560
|
*/
|
|
@@ -560,7 +575,7 @@ const checkModuleType = (test, module) => {
|
|
|
560
575
|
};
|
|
561
576
|
|
|
562
577
|
/**
|
|
563
|
-
* @param {
|
|
578
|
+
* @param {OptimizationSplitChunksCacheGroup["layer"]} test type option
|
|
564
579
|
* @param {Module} module the module
|
|
565
580
|
* @returns {boolean} true, if the module should be selected
|
|
566
581
|
*/
|
|
@@ -571,11 +586,11 @@ const checkModuleLayer = (test, module) => {
|
|
|
571
586
|
}
|
|
572
587
|
if (typeof test === "string") {
|
|
573
588
|
const layer = module.layer;
|
|
574
|
-
return test === "" ? !layer : layer
|
|
589
|
+
return test === "" ? !layer : layer ? layer.startsWith(test) : false;
|
|
575
590
|
}
|
|
576
591
|
if (test instanceof RegExp) {
|
|
577
592
|
const layer = module.layer;
|
|
578
|
-
return test.test(layer);
|
|
593
|
+
return layer ? test.test(layer) : false;
|
|
579
594
|
}
|
|
580
595
|
return false;
|
|
581
596
|
};
|
|
@@ -583,7 +598,7 @@ const checkModuleLayer = (test, module) => {
|
|
|
583
598
|
/**
|
|
584
599
|
* @param {OptimizationSplitChunksCacheGroup} options the group options
|
|
585
600
|
* @param {string} key key of cache group
|
|
586
|
-
* @param {
|
|
601
|
+
* @param {DefaultSizeTypes} defaultSizeTypes the default size types
|
|
587
602
|
* @returns {CacheGroupSource} the normalized cached group
|
|
588
603
|
*/
|
|
589
604
|
const createCacheGroupSource = (options, key, defaultSizeTypes) => {
|
|
@@ -628,6 +643,8 @@ const createCacheGroupSource = (options, key, defaultSizeTypes) => {
|
|
|
628
643
|
};
|
|
629
644
|
};
|
|
630
645
|
|
|
646
|
+
const PLUGIN_NAME = "SplitChunksPlugin";
|
|
647
|
+
|
|
631
648
|
module.exports = class SplitChunksPlugin {
|
|
632
649
|
/**
|
|
633
650
|
* @param {OptimizationSplitChunksOptions=} options plugin options
|
|
@@ -647,7 +664,9 @@ module.exports = class SplitChunksPlugin {
|
|
|
647
664
|
|
|
648
665
|
/** @type {SplitChunksOptions} */
|
|
649
666
|
this.options = {
|
|
650
|
-
chunksFilter:
|
|
667
|
+
chunksFilter:
|
|
668
|
+
/** @type {ChunkFilterFn} */
|
|
669
|
+
(normalizeChunksFilter(options.chunks || "all")),
|
|
651
670
|
defaultSizeTypes,
|
|
652
671
|
minSize,
|
|
653
672
|
minSizeReduction,
|
|
@@ -676,13 +695,19 @@ module.exports = class SplitChunksPlugin {
|
|
|
676
695
|
options.cacheGroups,
|
|
677
696
|
defaultSizeTypes
|
|
678
697
|
),
|
|
679
|
-
getName: options.name
|
|
680
|
-
|
|
681
|
-
|
|
698
|
+
getName: options.name
|
|
699
|
+
? /** @type {GetNameFn} */ (normalizeName(options.name))
|
|
700
|
+
: defaultGetName,
|
|
701
|
+
automaticNameDelimiter: options.automaticNameDelimiter || "-",
|
|
702
|
+
usedExports: options.usedExports || false,
|
|
682
703
|
fallbackCacheGroup: {
|
|
683
|
-
chunksFilter:
|
|
684
|
-
|
|
685
|
-
|
|
704
|
+
chunksFilter:
|
|
705
|
+
/** @type {ChunkFilterFn} */
|
|
706
|
+
(
|
|
707
|
+
normalizeChunksFilter(
|
|
708
|
+
fallbackCacheGroup.chunks || options.chunks || "all"
|
|
709
|
+
)
|
|
710
|
+
),
|
|
686
711
|
minSize: mergeSizes(
|
|
687
712
|
normalizeSizes(fallbackCacheGroup.minSize, defaultSizeTypes),
|
|
688
713
|
minSize
|
|
@@ -733,6 +758,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
733
758
|
cacheGroupSource.enforceSizeThreshold,
|
|
734
759
|
cacheGroupSource.enforce ? undefined : this.options.enforceSizeThreshold
|
|
735
760
|
);
|
|
761
|
+
/** @type {CacheGroup} */
|
|
736
762
|
const cacheGroup = {
|
|
737
763
|
key: cacheGroupSource.key,
|
|
738
764
|
priority: cacheGroupSource.priority || 0,
|
|
@@ -810,18 +836,18 @@ module.exports = class SplitChunksPlugin {
|
|
|
810
836
|
compiler.context,
|
|
811
837
|
compiler.root
|
|
812
838
|
);
|
|
813
|
-
compiler.hooks.thisCompilation.tap(
|
|
814
|
-
const logger = compilation.getLogger(
|
|
839
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
840
|
+
const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`);
|
|
815
841
|
let alreadyOptimized = false;
|
|
816
|
-
compilation.hooks.unseal.tap(
|
|
842
|
+
compilation.hooks.unseal.tap(PLUGIN_NAME, () => {
|
|
817
843
|
alreadyOptimized = false;
|
|
818
844
|
});
|
|
819
845
|
compilation.hooks.optimizeChunks.tap(
|
|
820
846
|
{
|
|
821
|
-
name:
|
|
847
|
+
name: PLUGIN_NAME,
|
|
822
848
|
stage: STAGE_ADVANCED
|
|
823
849
|
},
|
|
824
|
-
chunks => {
|
|
850
|
+
(chunks) => {
|
|
825
851
|
if (alreadyOptimized) return;
|
|
826
852
|
alreadyOptimized = true;
|
|
827
853
|
logger.time("prepare");
|
|
@@ -839,13 +865,13 @@ module.exports = class SplitChunksPlugin {
|
|
|
839
865
|
chunk,
|
|
840
866
|
index | BigInt((Math.random() * 0x7fffffff) | 0)
|
|
841
867
|
);
|
|
842
|
-
index
|
|
868
|
+
index <<= ONE;
|
|
843
869
|
}
|
|
844
870
|
/**
|
|
845
871
|
* @param {Iterable<Chunk>} chunks list of chunks
|
|
846
872
|
* @returns {bigint | Chunk} key of the chunks
|
|
847
873
|
*/
|
|
848
|
-
const getKey = chunks => {
|
|
874
|
+
const getKey = (chunks) => {
|
|
849
875
|
const iterator = chunks[Symbol.iterator]();
|
|
850
876
|
let result = iterator.next();
|
|
851
877
|
if (result.done) return ZERO;
|
|
@@ -853,10 +879,11 @@ module.exports = class SplitChunksPlugin {
|
|
|
853
879
|
result = iterator.next();
|
|
854
880
|
if (result.done) return first;
|
|
855
881
|
let key =
|
|
856
|
-
chunkIndexMap.get(first) |
|
|
882
|
+
/** @type {bigint} */ (chunkIndexMap.get(first)) |
|
|
883
|
+
/** @type {bigint} */ (chunkIndexMap.get(result.value));
|
|
857
884
|
while (!(result = iterator.next()).done) {
|
|
858
885
|
const raw = chunkIndexMap.get(result.value);
|
|
859
|
-
key
|
|
886
|
+
key ^= /** @type {bigint} */ (raw);
|
|
860
887
|
}
|
|
861
888
|
return key;
|
|
862
889
|
};
|
|
@@ -864,15 +891,15 @@ module.exports = class SplitChunksPlugin {
|
|
|
864
891
|
* @param {bigint | Chunk} key key of the chunks
|
|
865
892
|
* @returns {string} stringified key
|
|
866
893
|
*/
|
|
867
|
-
const keyToString = key => {
|
|
894
|
+
const keyToString = (key) => {
|
|
868
895
|
if (typeof key === "bigint") return key.toString(16);
|
|
869
|
-
return chunkIndexMap.get(key).toString(16);
|
|
896
|
+
return /** @type {bigint} */ (chunkIndexMap.get(key)).toString(16);
|
|
870
897
|
};
|
|
871
898
|
|
|
872
899
|
const getChunkSetsInGraph = memoize(() => {
|
|
873
|
-
/** @type {Map<bigint,
|
|
900
|
+
/** @type {Map<bigint, ChunkSet>} */
|
|
874
901
|
const chunkSetsInGraph = new Map();
|
|
875
|
-
/** @type {
|
|
902
|
+
/** @type {ChunkSet} */
|
|
876
903
|
const singleChunkSets = new Set();
|
|
877
904
|
for (const module of compilation.modules) {
|
|
878
905
|
const chunks = chunkGraph.getModuleChunksIterable(module);
|
|
@@ -892,7 +919,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
892
919
|
* @param {Module} module the module
|
|
893
920
|
* @returns {Iterable<Chunk[]>} groups of chunks with equal exports
|
|
894
921
|
*/
|
|
895
|
-
const groupChunksByExports = module => {
|
|
922
|
+
const groupChunksByExports = (module) => {
|
|
896
923
|
const exportsInfo = moduleGraph.getExportsInfo(module);
|
|
897
924
|
const groupedByUsedExports = new Map();
|
|
898
925
|
for (const chunk of chunkGraph.getModuleChunksIterable(module)) {
|
|
@@ -910,19 +937,21 @@ module.exports = class SplitChunksPlugin {
|
|
|
910
937
|
/** @type {Map<Module, Iterable<Chunk[]>>} */
|
|
911
938
|
const groupedByExportsMap = new Map();
|
|
912
939
|
|
|
940
|
+
/** @typedef {Map<bigint | Chunk, ChunkSet>} ChunkSetsInGraph */
|
|
941
|
+
|
|
913
942
|
const getExportsChunkSetsInGraph = memoize(() => {
|
|
914
|
-
/** @type {
|
|
943
|
+
/** @type {ChunkSetsInGraph} */
|
|
915
944
|
const chunkSetsInGraph = new Map();
|
|
916
|
-
/** @type {
|
|
945
|
+
/** @type {ChunkSet} */
|
|
917
946
|
const singleChunkSets = new Set();
|
|
918
947
|
for (const module of compilation.modules) {
|
|
919
|
-
const groupedChunks =
|
|
948
|
+
const groupedChunks = [...groupChunksByExports(module)];
|
|
920
949
|
groupedByExportsMap.set(module, groupedChunks);
|
|
921
950
|
for (const chunks of groupedChunks) {
|
|
922
951
|
if (chunks.length === 1) {
|
|
923
952
|
singleChunkSets.add(chunks[0]);
|
|
924
953
|
} else {
|
|
925
|
-
const chunksKey =
|
|
954
|
+
const chunksKey = getKey(chunks);
|
|
926
955
|
if (!chunkSetsInGraph.has(chunksKey)) {
|
|
927
956
|
chunkSetsInGraph.set(chunksKey, new Set(chunks));
|
|
928
957
|
}
|
|
@@ -932,15 +961,17 @@ module.exports = class SplitChunksPlugin {
|
|
|
932
961
|
return { chunkSetsInGraph, singleChunkSets };
|
|
933
962
|
});
|
|
934
963
|
|
|
964
|
+
/** @typedef {Map<CountOfChunk, ChunkSet[]>} ChunkSetsByCount */
|
|
965
|
+
|
|
935
966
|
// group these set of chunks by count
|
|
936
967
|
// to allow to check less sets via isSubset
|
|
937
968
|
// (only smaller sets can be subset)
|
|
938
969
|
/**
|
|
939
|
-
* @param {IterableIterator<
|
|
940
|
-
* @returns {
|
|
970
|
+
* @param {IterableIterator<ChunkSet>} chunkSets set of sets of chunks
|
|
971
|
+
* @returns {ChunkSetsByCount} map of sets of chunks by count
|
|
941
972
|
*/
|
|
942
|
-
const groupChunkSetsByCount = chunkSets => {
|
|
943
|
-
/** @type {
|
|
973
|
+
const groupChunkSetsByCount = (chunkSets) => {
|
|
974
|
+
/** @type {ChunkSetsByCount} */
|
|
944
975
|
const chunkSetsByCount = new Map();
|
|
945
976
|
for (const chunksSet of chunkSets) {
|
|
946
977
|
const count = chunksSet.size;
|
|
@@ -964,16 +995,24 @@ module.exports = class SplitChunksPlugin {
|
|
|
964
995
|
)
|
|
965
996
|
);
|
|
966
997
|
|
|
998
|
+
/** @typedef {(ChunkSet | Chunk)[]} Combinations */
|
|
999
|
+
|
|
967
1000
|
// Create a list of possible combinations
|
|
1001
|
+
/**
|
|
1002
|
+
* @param {ChunkSetsInGraph} chunkSets chunk sets
|
|
1003
|
+
* @param {ChunkSet} singleChunkSets single chunks sets
|
|
1004
|
+
* @param {ChunkSetsByCount} chunkSetsByCount chunk sets by count
|
|
1005
|
+
* @returns {(key: bigint | Chunk) => Combinations} combinations
|
|
1006
|
+
*/
|
|
968
1007
|
const createGetCombinations = (
|
|
969
1008
|
chunkSets,
|
|
970
1009
|
singleChunkSets,
|
|
971
1010
|
chunkSetsByCount
|
|
972
1011
|
) => {
|
|
973
|
-
/** @type {Map<bigint | Chunk,
|
|
1012
|
+
/** @type {Map<bigint | Chunk, Combinations>} */
|
|
974
1013
|
const combinationsCache = new Map();
|
|
975
1014
|
|
|
976
|
-
return key => {
|
|
1015
|
+
return (key) => {
|
|
977
1016
|
const cacheEntry = combinationsCache.get(key);
|
|
978
1017
|
if (cacheEntry !== undefined) return cacheEntry;
|
|
979
1018
|
if (key instanceof Chunk) {
|
|
@@ -981,8 +1020,10 @@ module.exports = class SplitChunksPlugin {
|
|
|
981
1020
|
combinationsCache.set(key, result);
|
|
982
1021
|
return result;
|
|
983
1022
|
}
|
|
984
|
-
const chunksSet =
|
|
985
|
-
|
|
1023
|
+
const chunksSet =
|
|
1024
|
+
/** @type {ChunkSet} */
|
|
1025
|
+
(chunkSets.get(key));
|
|
1026
|
+
/** @type {Combinations} */
|
|
986
1027
|
const array = [chunksSet];
|
|
987
1028
|
for (const [count, setArray] of chunkSetsByCount) {
|
|
988
1029
|
// "equal" is not needed because they would have been merge in the first step
|
|
@@ -1012,7 +1053,12 @@ module.exports = class SplitChunksPlugin {
|
|
|
1012
1053
|
getChunkSetsByCount()
|
|
1013
1054
|
);
|
|
1014
1055
|
});
|
|
1015
|
-
|
|
1056
|
+
|
|
1057
|
+
/**
|
|
1058
|
+
* @param {bigint | Chunk} key key
|
|
1059
|
+
* @returns {Combinations} combinations by key
|
|
1060
|
+
*/
|
|
1061
|
+
const getCombinations = (key) => getCombinationsFactory()(key);
|
|
1016
1062
|
|
|
1017
1063
|
const getExportsCombinationsFactory = memoize(() => {
|
|
1018
1064
|
const { chunkSetsInGraph, singleChunkSets } =
|
|
@@ -1023,7 +1069,11 @@ module.exports = class SplitChunksPlugin {
|
|
|
1023
1069
|
getExportsChunkSetsByCount()
|
|
1024
1070
|
);
|
|
1025
1071
|
});
|
|
1026
|
-
|
|
1072
|
+
/**
|
|
1073
|
+
* @param {bigint | Chunk} key key
|
|
1074
|
+
* @returns {Combinations} exports combinations by key
|
|
1075
|
+
*/
|
|
1076
|
+
const getExportsCombinations = (key) =>
|
|
1027
1077
|
getExportsCombinationsFactory()(key);
|
|
1028
1078
|
|
|
1029
1079
|
/**
|
|
@@ -1032,14 +1082,14 @@ module.exports = class SplitChunksPlugin {
|
|
|
1032
1082
|
* @property {bigint | Chunk} key a key of the list
|
|
1033
1083
|
*/
|
|
1034
1084
|
|
|
1035
|
-
/** @type {WeakMap<
|
|
1085
|
+
/** @type {WeakMap<ChunkSet | Chunk, WeakMap<ChunkFilterFn, SelectedChunksResult>>} */
|
|
1036
1086
|
const selectedChunksCacheByChunksSet = new WeakMap();
|
|
1037
1087
|
|
|
1038
1088
|
/**
|
|
1039
1089
|
* get list and key by applying the filter function to the list
|
|
1040
1090
|
* It is cached for performance reasons
|
|
1041
|
-
* @param {
|
|
1042
|
-
* @param {
|
|
1091
|
+
* @param {ChunkSet | Chunk} chunks list of chunks
|
|
1092
|
+
* @param {ChunkFilterFn} chunkFilter filter function for chunks
|
|
1043
1093
|
* @returns {SelectedChunksResult} list and key
|
|
1044
1094
|
*/
|
|
1045
1095
|
const getSelectedChunks = (chunks, chunkFilter) => {
|
|
@@ -1098,11 +1148,12 @@ module.exports = class SplitChunksPlugin {
|
|
|
1098
1148
|
// Break if minimum number of chunks is not reached
|
|
1099
1149
|
if (selectedChunks.length < cacheGroup.minChunks) return;
|
|
1100
1150
|
// Determine name for split chunk
|
|
1151
|
+
|
|
1101
1152
|
const name =
|
|
1102
|
-
/** @type {
|
|
1103
|
-
(cacheGroup.getName(module, selectedChunks, cacheGroup.key)
|
|
1153
|
+
/** @type {GetNameFn} */
|
|
1154
|
+
(cacheGroup.getName)(module, selectedChunks, cacheGroup.key);
|
|
1104
1155
|
// Check if the name is ok
|
|
1105
|
-
const existingChunk = compilation.namedChunks.get(name);
|
|
1156
|
+
const existingChunk = name && compilation.namedChunks.get(name);
|
|
1106
1157
|
if (existingChunk) {
|
|
1107
1158
|
const parentValidationKey = `${name}|${
|
|
1108
1159
|
typeof selectedChunksKey === "bigint"
|
|
@@ -1140,7 +1191,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1140
1191
|
alreadyReportedErrors.add(name);
|
|
1141
1192
|
compilation.errors.push(
|
|
1142
1193
|
new WebpackError(
|
|
1143
|
-
|
|
1194
|
+
`${PLUGIN_NAME}\n` +
|
|
1144
1195
|
`Cache group "${cacheGroup.key}" conflicts with existing chunk.\n` +
|
|
1145
1196
|
`Both have the same name "${name}" and existing chunk is not a parent of the selected modules.\n` +
|
|
1146
1197
|
"Use a different name for the cache group or make sure that the existing chunk is a parent (e. g. via dependOn).\n" +
|
|
@@ -1167,7 +1218,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1167
1218
|
? ` name:${name}`
|
|
1168
1219
|
: ` chunks:${keyToString(selectedChunksKey)}`);
|
|
1169
1220
|
// Add module to maps
|
|
1170
|
-
let info =
|
|
1221
|
+
let info = chunksInfoMap.get(key);
|
|
1171
1222
|
if (info === undefined) {
|
|
1172
1223
|
chunksInfoMap.set(
|
|
1173
1224
|
key,
|
|
@@ -1230,15 +1281,16 @@ module.exports = class SplitChunksPlugin {
|
|
|
1230
1281
|
const getCombsByUsedExports = memoize(() => {
|
|
1231
1282
|
// fill the groupedByExportsMap
|
|
1232
1283
|
getExportsChunkSetsInGraph();
|
|
1233
|
-
/** @type {Set<
|
|
1284
|
+
/** @type {Set<ChunkSet | Chunk>} */
|
|
1234
1285
|
const set = new Set();
|
|
1235
1286
|
const groupedByUsedExports =
|
|
1236
1287
|
/** @type {Iterable<Chunk[]>} */
|
|
1237
1288
|
(groupedByExportsMap.get(module));
|
|
1238
1289
|
for (const chunks of groupedByUsedExports) {
|
|
1239
1290
|
const chunksKey = getKey(chunks);
|
|
1240
|
-
for (const comb of getExportsCombinations(chunksKey))
|
|
1291
|
+
for (const comb of getExportsCombinations(chunksKey)) {
|
|
1241
1292
|
set.add(comb);
|
|
1293
|
+
}
|
|
1242
1294
|
}
|
|
1243
1295
|
return set;
|
|
1244
1296
|
});
|
|
@@ -1260,7 +1312,8 @@ module.exports = class SplitChunksPlugin {
|
|
|
1260
1312
|
const { chunks: selectedChunks, key: selectedChunksKey } =
|
|
1261
1313
|
getSelectedChunks(
|
|
1262
1314
|
chunkCombination,
|
|
1263
|
-
/** @type {
|
|
1315
|
+
/** @type {ChunkFilterFn} */
|
|
1316
|
+
(cacheGroup.chunksFilter)
|
|
1264
1317
|
);
|
|
1265
1318
|
|
|
1266
1319
|
addModuleToChunksInfoMap(
|
|
@@ -1281,12 +1334,12 @@ module.exports = class SplitChunksPlugin {
|
|
|
1281
1334
|
|
|
1282
1335
|
/**
|
|
1283
1336
|
* @param {ChunksInfoItem} info entry
|
|
1284
|
-
* @param {
|
|
1337
|
+
* @param {SourceTypes} sourceTypes source types to be removed
|
|
1285
1338
|
*/
|
|
1286
1339
|
const removeModulesWithSourceType = (info, sourceTypes) => {
|
|
1287
1340
|
for (const module of info.modules) {
|
|
1288
1341
|
const types = module.getSourceTypes();
|
|
1289
|
-
if (sourceTypes.some(type => types.has(type))) {
|
|
1342
|
+
if (sourceTypes.some((type) => types.has(type))) {
|
|
1290
1343
|
info.modules.delete(module);
|
|
1291
1344
|
for (const type of types) {
|
|
1292
1345
|
info.sizes[type] -= module.size(type);
|
|
@@ -1299,7 +1352,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1299
1352
|
* @param {ChunksInfoItem} info entry
|
|
1300
1353
|
* @returns {boolean} true, if entry become empty
|
|
1301
1354
|
*/
|
|
1302
|
-
const removeMinSizeViolatingModules = info => {
|
|
1355
|
+
const removeMinSizeViolatingModules = (info) => {
|
|
1303
1356
|
if (!info.cacheGroup._validateSize) return false;
|
|
1304
1357
|
const violatingSizes = getViolatingMinSizes(
|
|
1305
1358
|
info.sizes,
|
|
@@ -1356,7 +1409,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1356
1409
|
const item = /** @type {ChunksInfoItem} */ (bestEntry);
|
|
1357
1410
|
chunksInfoMap.delete(/** @type {string} */ (bestEntryKey));
|
|
1358
1411
|
|
|
1359
|
-
/** @type {
|
|
1412
|
+
/** @type {ChunkName | undefined} */
|
|
1360
1413
|
let chunkName = item.name;
|
|
1361
1414
|
// Variable for the new chunk (lazy created)
|
|
1362
1415
|
/** @type {Chunk | undefined} */
|
|
@@ -1428,18 +1481,14 @@ module.exports = class SplitChunksPlugin {
|
|
|
1428
1481
|
) {
|
|
1429
1482
|
for (const chunk of usedChunks) {
|
|
1430
1483
|
// respect max requests
|
|
1431
|
-
const maxRequests =
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
(item.cacheGroup.maxAsyncRequests)
|
|
1440
|
-
)
|
|
1441
|
-
: item.cacheGroup.maxAsyncRequests
|
|
1442
|
-
);
|
|
1484
|
+
const maxRequests = chunk.isOnlyInitial()
|
|
1485
|
+
? item.cacheGroup.maxInitialRequests
|
|
1486
|
+
: chunk.canBeInitial()
|
|
1487
|
+
? Math.min(
|
|
1488
|
+
item.cacheGroup.maxInitialRequests,
|
|
1489
|
+
item.cacheGroup.maxAsyncRequests
|
|
1490
|
+
)
|
|
1491
|
+
: item.cacheGroup.maxAsyncRequests;
|
|
1443
1492
|
if (
|
|
1444
1493
|
Number.isFinite(maxRequests) &&
|
|
1445
1494
|
getRequests(chunk) >= maxRequests
|
|
@@ -1459,13 +1508,11 @@ module.exports = class SplitChunksPlugin {
|
|
|
1459
1508
|
// Were some (invalid) chunks removed from usedChunks?
|
|
1460
1509
|
// => readd all modules to the queue, as things could have been changed
|
|
1461
1510
|
if (usedChunks.size < item.chunks.size) {
|
|
1462
|
-
if (isExistingChunk)
|
|
1511
|
+
if (isExistingChunk) {
|
|
1463
1512
|
usedChunks.add(/** @type {Chunk} */ (newChunk));
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
) {
|
|
1468
|
-
const chunksArr = Array.from(usedChunks);
|
|
1513
|
+
}
|
|
1514
|
+
if (usedChunks.size >= item.cacheGroup.minChunks) {
|
|
1515
|
+
const chunksArr = [...usedChunks];
|
|
1469
1516
|
for (const module of item.modules) {
|
|
1470
1517
|
addModuleToChunksInfoMap(
|
|
1471
1518
|
item.cacheGroup,
|
|
@@ -1591,7 +1638,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1591
1638
|
: item.cacheGroup.maxInitialSize,
|
|
1592
1639
|
automaticNameDelimiter: item.cacheGroup.automaticNameDelimiter,
|
|
1593
1640
|
keys: oldMaxSizeSettings
|
|
1594
|
-
? oldMaxSizeSettings.keys
|
|
1641
|
+
? [...oldMaxSizeSettings.keys, item.cacheGroup.key]
|
|
1595
1642
|
: [item.cacheGroup.key]
|
|
1596
1643
|
});
|
|
1597
1644
|
}
|
|
@@ -1645,7 +1692,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1645
1692
|
|
|
1646
1693
|
// Make sure that maxSize is fulfilled
|
|
1647
1694
|
const { fallbackCacheGroup } = this.options;
|
|
1648
|
-
for (const chunk of
|
|
1695
|
+
for (const chunk of compilation.chunks) {
|
|
1649
1696
|
const chunkConfig = maxSizeQueueMap.get(chunk);
|
|
1650
1697
|
const {
|
|
1651
1698
|
minSize,
|
|
@@ -1653,8 +1700,9 @@ module.exports = class SplitChunksPlugin {
|
|
|
1653
1700
|
maxInitialSize,
|
|
1654
1701
|
automaticNameDelimiter
|
|
1655
1702
|
} = chunkConfig || fallbackCacheGroup;
|
|
1656
|
-
if (!chunkConfig && !fallbackCacheGroup.chunksFilter(chunk))
|
|
1703
|
+
if (!chunkConfig && !fallbackCacheGroup.chunksFilter(chunk)) {
|
|
1657
1704
|
continue;
|
|
1705
|
+
}
|
|
1658
1706
|
/** @type {SplitChunksSizes} */
|
|
1659
1707
|
let maxSize;
|
|
1660
1708
|
if (chunk.isOnlyInitial()) {
|
|
@@ -1667,7 +1715,9 @@ module.exports = class SplitChunksPlugin {
|
|
|
1667
1715
|
if (Object.keys(maxSize).length === 0) {
|
|
1668
1716
|
continue;
|
|
1669
1717
|
}
|
|
1670
|
-
for (const key of
|
|
1718
|
+
for (const key of /** @type {SourceType[]} */ (
|
|
1719
|
+
Object.keys(maxSize)
|
|
1720
|
+
)) {
|
|
1671
1721
|
const maxSizeValue = maxSize[key];
|
|
1672
1722
|
const minSizeValue = minSize[key];
|
|
1673
1723
|
if (
|
|
@@ -1738,11 +1788,12 @@ module.exports = class SplitChunksPlugin {
|
|
|
1738
1788
|
hashFilename(name, outputOptions);
|
|
1739
1789
|
}
|
|
1740
1790
|
if (i !== results.length - 1) {
|
|
1741
|
-
const newPart = compilation.addChunk(
|
|
1742
|
-
/** @type {Chunk["name"]} */ (name)
|
|
1743
|
-
);
|
|
1791
|
+
const newPart = compilation.addChunk(name);
|
|
1744
1792
|
chunk.split(newPart);
|
|
1745
1793
|
newPart.chunkReason = chunk.chunkReason;
|
|
1794
|
+
if (chunk.filenameTemplate) {
|
|
1795
|
+
newPart.filenameTemplate = chunk.filenameTemplate;
|
|
1796
|
+
}
|
|
1746
1797
|
// Add all modules to the new chunk
|
|
1747
1798
|
for (const module of group.items) {
|
|
1748
1799
|
if (!module.chunkCondition(newPart, compilation)) {
|
|
@@ -1755,7 +1806,7 @@ module.exports = class SplitChunksPlugin {
|
|
|
1755
1806
|
}
|
|
1756
1807
|
} else {
|
|
1757
1808
|
// change the chunk to be a part
|
|
1758
|
-
chunk.name =
|
|
1809
|
+
chunk.name = name;
|
|
1759
1810
|
}
|
|
1760
1811
|
}
|
|
1761
1812
|
}
|