@depup/webpack 5.109.0-depup.0 → 5.110.1-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 +7 -7
- package/bin/webpack.js +12 -0
- package/changes.json +10 -10
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +43 -32
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +15 -16
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +38 -7
- package/lib/Compilation.js +709 -414
- package/lib/Compiler.js +69 -42
- package/lib/ConcatenationScope.js +117 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +168 -57
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +50 -13
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +123 -19
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +242 -84
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +116 -42
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +63 -57
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +28 -36
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +22 -6
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +221 -156
- package/lib/NormalModuleFactory.js +563 -112
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +346 -256
- package/lib/RuntimeTemplate.js +2792 -352
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +55 -25
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +2 -2
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +289 -28
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +282 -81
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +36 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +53 -66
- package/lib/container/ModuleFederationPlugin.js +7 -18
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +178 -44
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +82 -36
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +197 -106
- package/lib/css/CssParser.js +1248 -618
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5324 -0
- package/lib/css/syntax.js +10396 -952
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +156 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +28 -20
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +21 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +37 -29
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +2 -2
- package/lib/dependencies/ImportDependency.js +24 -20
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +49 -35
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +51 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
- package/lib/dependencies/WorkerDependency.js +28 -22
- package/lib/dependencies/WorkletDependency.js +15 -14
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +28 -10
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +299 -79
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +312 -174
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +7819 -3331
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +31 -18
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +181 -162
- package/lib/javascript/JavascriptParser.js +291 -112
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +3403 -300
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +14 -1
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
- package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +21 -17
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +996 -477
- package/lib/optimize/ConstExportsPlugin.js +11 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +9 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
- package/lib/optimize/RealContentHashPlugin.js +20 -13
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +232 -68
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +377 -136
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +24 -15
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +274 -942
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +305 -66
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
- package/lib/stats/StatsFactory.js +56 -35
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +12 -14
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1050 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +5 -1
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +25 -1
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +6 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
- package/lib/web/FetchCompileWasmPlugin.js +46 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +37 -30
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +780 -91
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +4013 -738
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -21,21 +21,28 @@ const { makePathsRelative } = require("../util/identifier");
|
|
|
21
21
|
const memoize = require("../util/memoize");
|
|
22
22
|
const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
23
23
|
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
/**
|
|
25
|
+
* @import {
|
|
26
|
+
* OptimizationSplitChunksCacheGroup,
|
|
27
|
+
* OptimizationSplitChunksOptions,
|
|
28
|
+
* OptimizationSplitChunksSizes
|
|
29
|
+
* } from "../../declarations/WebpackOptions"
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* @import {
|
|
33
|
+
* OutputNormalizedWithDefaults as OutputOptions
|
|
34
|
+
* } from "../config/defaults"
|
|
35
|
+
*/
|
|
36
|
+
/** @import { ChunkName, ChunkFilenameTemplate } from "../Chunk" */
|
|
37
|
+
/** @import ChunkGraph from "../ChunkGraph" */
|
|
38
|
+
/** @import ChunkGroup from "../ChunkGroup" */
|
|
39
|
+
/** @import Compilation from "../Compilation" */
|
|
40
|
+
/** @import Compiler from "../Compiler" */
|
|
41
|
+
/** @import Module, { SourceType } from "../Module" */
|
|
42
|
+
/** @import ModuleGraph from "../ModuleGraph" */
|
|
36
43
|
/** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
|
|
37
44
|
/** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
|
|
38
|
-
/** @
|
|
45
|
+
/** @import { Sizes } from "../util/deterministicGrouping" */
|
|
39
46
|
|
|
40
47
|
/**
|
|
41
48
|
* Defines the chunk filter fn callback.
|
|
@@ -182,7 +189,6 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
|
|
|
182
189
|
* @property {string=} name
|
|
183
190
|
* @property {SplitChunksSizes} sizes
|
|
184
191
|
* @property {ChunkSet} chunks
|
|
185
|
-
* @property {ChunkSet} reusableChunks
|
|
186
192
|
* @property {Set<bigint | Chunk>} chunksKeys
|
|
187
193
|
*/
|
|
188
194
|
|
|
@@ -213,6 +219,27 @@ const hashFilename = (name, outputOptions) => {
|
|
|
213
219
|
return digest.slice(0, 8);
|
|
214
220
|
};
|
|
215
221
|
|
|
222
|
+
/**
|
|
223
|
+
* A split `maxInitialRequests`/`maxAsyncRequests` refused, recorded for
|
|
224
|
+
* `performance.splitChunksCapped`.
|
|
225
|
+
* @typedef {object} CappedSplit
|
|
226
|
+
* @property {string} cacheGroup the cache group whose split was refused
|
|
227
|
+
* @property {Chunk} chunk the chunk it would have been taken out of
|
|
228
|
+
* @property {"maxAsyncRequests" | "maxInitialRequests"} limit the option that refused it
|
|
229
|
+
* @property {number} maxRequests the value that option had
|
|
230
|
+
* @property {number} modules how many modules the split would have moved
|
|
231
|
+
*/
|
|
232
|
+
|
|
233
|
+
/** @type {WeakMap<Compilation, CappedSplit[]>} */
|
|
234
|
+
const CAPPED_SPLITS = new WeakMap();
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Reads back the splits a request cap refused during this compilation.
|
|
238
|
+
* @param {Compilation} compilation the compilation
|
|
239
|
+
* @returns {CappedSplit[] | undefined} the refused splits, or `undefined` when nothing recorded them
|
|
240
|
+
*/
|
|
241
|
+
const getCappedSplits = (compilation) => CAPPED_SPLITS.get(compilation);
|
|
242
|
+
|
|
216
243
|
/**
|
|
217
244
|
* Returns the number of requests.
|
|
218
245
|
* @param {Chunk} chunk the chunk
|
|
@@ -229,7 +256,6 @@ const getRequests = (chunk) => {
|
|
|
229
256
|
/**
|
|
230
257
|
* Returns result.
|
|
231
258
|
* @template {object} T
|
|
232
|
-
* @template {object} R
|
|
233
259
|
* @param {T} obj obj an object
|
|
234
260
|
* @param {(obj: T[keyof T], key: keyof T) => T[keyof T]} fn fn
|
|
235
261
|
* @returns {T} result
|
|
@@ -314,6 +340,9 @@ const ASYNC_CHUNK_FILTER = (chunk) => !chunk.canBeInitial();
|
|
|
314
340
|
*/
|
|
315
341
|
const ALL_CHUNK_FILTER = (_chunk) => true;
|
|
316
342
|
|
|
343
|
+
/** Placeholder until a chunk set group is filled and its signatures are written. */
|
|
344
|
+
const EMPTY_SIGNATURES = new Uint32Array(0);
|
|
345
|
+
|
|
317
346
|
/**
|
|
318
347
|
* Returns normalized representation.
|
|
319
348
|
* @param {OptimizationSplitChunksSizes | undefined} value the sizes
|
|
@@ -689,7 +718,7 @@ const createCacheGroupSource = (options, key, defaultSizeTypes) => {
|
|
|
689
718
|
|
|
690
719
|
const PLUGIN_NAME = "SplitChunksPlugin";
|
|
691
720
|
|
|
692
|
-
|
|
721
|
+
class SplitChunksPlugin {
|
|
693
722
|
/**
|
|
694
723
|
* Creates an instance of SplitChunksPlugin.
|
|
695
724
|
* @param {OptimizationSplitChunksOptions=} options plugin options
|
|
@@ -896,21 +925,40 @@ module.exports = class SplitChunksPlugin {
|
|
|
896
925
|
(chunks) => {
|
|
897
926
|
if (alreadyOptimized) return;
|
|
898
927
|
alreadyOptimized = true;
|
|
928
|
+
const { performance } = compilation.options;
|
|
929
|
+
// Mirrors both of `SplitChunksCappedPlugin`'s gates: a build that
|
|
930
|
+
// would not report records nothing and allocates nothing.
|
|
931
|
+
/** @type {CappedSplit[] | undefined} */
|
|
932
|
+
let cappedSplits;
|
|
933
|
+
if (
|
|
934
|
+
performance !== false &&
|
|
935
|
+
performance.splitChunksCapped === true &&
|
|
936
|
+
Boolean(performance.hints)
|
|
937
|
+
) {
|
|
938
|
+
cappedSplits = [];
|
|
939
|
+
CAPPED_SPLITS.set(compilation, cappedSplits);
|
|
940
|
+
}
|
|
899
941
|
logger.time("prepare");
|
|
900
942
|
const chunkGraph = compilation.chunkGraph;
|
|
901
943
|
const moduleGraph = compilation.moduleGraph;
|
|
902
944
|
// Give each selected chunk an index (to create strings from chunks)
|
|
903
945
|
/** @type {Map<Chunk, bigint>} */
|
|
904
946
|
const chunkIndexMap = new Map();
|
|
947
|
+
// Dense per-chunk index, folded into the 64 bit membership
|
|
948
|
+
// signatures that reject non-subsets in getCombinations
|
|
949
|
+
/** @type {Map<Chunk, number>} */
|
|
950
|
+
const chunkSignatureBitMap = new Map();
|
|
905
951
|
const ZERO = BigInt("0");
|
|
906
952
|
const ONE = BigInt("1");
|
|
907
953
|
const START = ONE << BigInt("31");
|
|
908
954
|
let index = START;
|
|
955
|
+
let denseIndex = 0;
|
|
909
956
|
for (const chunk of chunks) {
|
|
910
957
|
chunkIndexMap.set(
|
|
911
958
|
chunk,
|
|
912
959
|
index | BigInt((Math.random() * 0x7fffffff) | 0)
|
|
913
960
|
);
|
|
961
|
+
chunkSignatureBitMap.set(chunk, denseIndex++ & 63);
|
|
914
962
|
index <<= ONE;
|
|
915
963
|
}
|
|
916
964
|
/**
|
|
@@ -1011,7 +1059,36 @@ module.exports = class SplitChunksPlugin {
|
|
|
1011
1059
|
return { chunkSetsInGraph, singleChunkSets };
|
|
1012
1060
|
});
|
|
1013
1061
|
|
|
1014
|
-
/**
|
|
1062
|
+
/**
|
|
1063
|
+
* Chunk sets of equal size, with a 64 bit membership signature
|
|
1064
|
+
* per set stored as two words at `2 * i` in `signatures`.
|
|
1065
|
+
* @typedef {object} ChunkSetGroup
|
|
1066
|
+
* @property {ChunkSet[]} sets the chunk sets
|
|
1067
|
+
* @property {Uint32Array} signatures two signature words per set
|
|
1068
|
+
*/
|
|
1069
|
+
|
|
1070
|
+
/** @typedef {Map<CountOfChunk, ChunkSetGroup>} ChunkSetsByCount */
|
|
1071
|
+
|
|
1072
|
+
// holds the signature of the set currently being combined; transient
|
|
1073
|
+
const signatureScratch = new Uint32Array(2);
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* Folds a chunk set into a 64 bit membership signature.
|
|
1077
|
+
* @param {ChunkSet} chunksSet set of chunks
|
|
1078
|
+
* @param {Uint32Array} out target array
|
|
1079
|
+
* @param {number} offset index of the first of the two words
|
|
1080
|
+
* @returns {void}
|
|
1081
|
+
*/
|
|
1082
|
+
const writeSignature = (chunksSet, out, offset) => {
|
|
1083
|
+
out[offset] = 0;
|
|
1084
|
+
out[offset + 1] = 0;
|
|
1085
|
+
for (const chunk of chunksSet) {
|
|
1086
|
+
const bit = /** @type {number} */ (
|
|
1087
|
+
chunkSignatureBitMap.get(chunk)
|
|
1088
|
+
);
|
|
1089
|
+
out[offset + (bit >> 5)] |= 1 << (bit & 31);
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1015
1092
|
|
|
1016
1093
|
// group these set of chunks by count
|
|
1017
1094
|
// to allow to check less sets via isSubset
|
|
@@ -1026,12 +1103,20 @@ module.exports = class SplitChunksPlugin {
|
|
|
1026
1103
|
const chunkSetsByCount = new Map();
|
|
1027
1104
|
for (const chunksSet of chunkSets) {
|
|
1028
1105
|
const count = chunksSet.size;
|
|
1029
|
-
let
|
|
1030
|
-
if (
|
|
1031
|
-
|
|
1032
|
-
chunkSetsByCount.set(count,
|
|
1106
|
+
let group = chunkSetsByCount.get(count);
|
|
1107
|
+
if (group === undefined) {
|
|
1108
|
+
group = { sets: [], signatures: EMPTY_SIGNATURES };
|
|
1109
|
+
chunkSetsByCount.set(count, group);
|
|
1033
1110
|
}
|
|
1034
|
-
|
|
1111
|
+
group.sets.push(chunksSet);
|
|
1112
|
+
}
|
|
1113
|
+
for (const group of chunkSetsByCount.values()) {
|
|
1114
|
+
const { sets } = group;
|
|
1115
|
+
const signatures = new Uint32Array(sets.length * 2);
|
|
1116
|
+
for (let i = 0; i < sets.length; i++) {
|
|
1117
|
+
writeSignature(sets[i], signatures, i * 2);
|
|
1118
|
+
}
|
|
1119
|
+
group.signatures = signatures;
|
|
1035
1120
|
}
|
|
1036
1121
|
return chunkSetsByCount;
|
|
1037
1122
|
};
|
|
@@ -1077,10 +1162,24 @@ module.exports = class SplitChunksPlugin {
|
|
|
1077
1162
|
(chunkSets.get(key));
|
|
1078
1163
|
/** @type {Combinations} */
|
|
1079
1164
|
const array = [chunksSet];
|
|
1080
|
-
|
|
1165
|
+
writeSignature(chunksSet, signatureScratch, 0);
|
|
1166
|
+
const selfLow = signatureScratch[0];
|
|
1167
|
+
const selfHigh = signatureScratch[1];
|
|
1168
|
+
for (const [count, group] of chunkSetsByCount) {
|
|
1081
1169
|
// "equal" is not needed because they would have been merge in the first step
|
|
1082
1170
|
if (count < chunksSet.size) {
|
|
1083
|
-
|
|
1171
|
+
const { sets, signatures } = group;
|
|
1172
|
+
for (let i = 0; i < sets.length; i++) {
|
|
1173
|
+
// a subset cannot hold a signature bit the superset lacks,
|
|
1174
|
+
// so this rejects nearly every candidate without touching the Set
|
|
1175
|
+
const offset = i * 2;
|
|
1176
|
+
if (
|
|
1177
|
+
(signatures[offset] & ~selfLow) !== 0 ||
|
|
1178
|
+
(signatures[offset + 1] & ~selfHigh) !== 0
|
|
1179
|
+
) {
|
|
1180
|
+
continue;
|
|
1181
|
+
}
|
|
1182
|
+
const set = sets[i];
|
|
1084
1183
|
if (isSubset(chunksSet, set)) {
|
|
1085
1184
|
array.push(set);
|
|
1086
1185
|
}
|
|
@@ -1187,6 +1286,31 @@ module.exports = class SplitChunksPlugin {
|
|
|
1187
1286
|
/** @type {Map<string, ChunksInfoItem>} */
|
|
1188
1287
|
const chunksInfoMap = new Map();
|
|
1189
1288
|
|
|
1289
|
+
// The unnamed key is derived only from cache group and chunk set, so it
|
|
1290
|
+
// repeats for every module sharing that pair — build the string once
|
|
1291
|
+
/** @type {Map<CacheGroup, Map<bigint | Chunk, string>>} */
|
|
1292
|
+
const unnamedKeyCache = new Map();
|
|
1293
|
+
|
|
1294
|
+
/**
|
|
1295
|
+
* Returns the chunksInfoMap key for a cache group and chunk set.
|
|
1296
|
+
* @param {CacheGroup} cacheGroup the current cache group
|
|
1297
|
+
* @param {bigint | Chunk} selectedChunksKey a key of selectedChunks
|
|
1298
|
+
* @returns {string} key into chunksInfoMap
|
|
1299
|
+
*/
|
|
1300
|
+
const getUnnamedKey = (cacheGroup, selectedChunksKey) => {
|
|
1301
|
+
let byChunksKey = unnamedKeyCache.get(cacheGroup);
|
|
1302
|
+
if (byChunksKey === undefined) {
|
|
1303
|
+
byChunksKey = new Map();
|
|
1304
|
+
unnamedKeyCache.set(cacheGroup, byChunksKey);
|
|
1305
|
+
}
|
|
1306
|
+
let key = byChunksKey.get(selectedChunksKey);
|
|
1307
|
+
if (key === undefined) {
|
|
1308
|
+
key = `${cacheGroup.key} chunks:${keyToString(selectedChunksKey)}`;
|
|
1309
|
+
byChunksKey.set(selectedChunksKey, key);
|
|
1310
|
+
}
|
|
1311
|
+
return key;
|
|
1312
|
+
};
|
|
1313
|
+
|
|
1190
1314
|
/**
|
|
1191
1315
|
* Adds module to chunks info map.
|
|
1192
1316
|
* @param {CacheGroup} cacheGroup the current cache group
|
|
@@ -1270,11 +1394,9 @@ module.exports = class SplitChunksPlugin {
|
|
|
1270
1394
|
// When it has a name we use the name as key
|
|
1271
1395
|
// Otherwise we create the key from chunks and cache group key
|
|
1272
1396
|
// This automatically merges equal names
|
|
1273
|
-
const key =
|
|
1274
|
-
cacheGroup.key
|
|
1275
|
-
(
|
|
1276
|
-
? ` name:${name}`
|
|
1277
|
-
: ` chunks:${keyToString(selectedChunksKey)}`);
|
|
1397
|
+
const key = name
|
|
1398
|
+
? `${cacheGroup.key} name:${name}`
|
|
1399
|
+
: getUnnamedKey(cacheGroup, selectedChunksKey);
|
|
1278
1400
|
// Add module to maps
|
|
1279
1401
|
let info = chunksInfoMap.get(key);
|
|
1280
1402
|
if (info === undefined) {
|
|
@@ -1290,7 +1412,6 @@ module.exports = class SplitChunksPlugin {
|
|
|
1290
1412
|
name,
|
|
1291
1413
|
sizes: {},
|
|
1292
1414
|
chunks: new Set(),
|
|
1293
|
-
reusableChunks: new Set(),
|
|
1294
1415
|
chunksKeys: new Set()
|
|
1295
1416
|
})
|
|
1296
1417
|
);
|
|
@@ -1316,6 +1437,35 @@ module.exports = class SplitChunksPlugin {
|
|
|
1316
1437
|
chunkGraph
|
|
1317
1438
|
};
|
|
1318
1439
|
|
|
1440
|
+
/**
|
|
1441
|
+
* Returns combinations of the chunks the module is in.
|
|
1442
|
+
* @param {Module} module the module
|
|
1443
|
+
* @returns {Combinations} chunk combinations
|
|
1444
|
+
*/
|
|
1445
|
+
const computeCombinations = (module) =>
|
|
1446
|
+
getCombinations(getKey(chunkGraph.getModuleChunksIterable(module)));
|
|
1447
|
+
|
|
1448
|
+
/**
|
|
1449
|
+
* Returns combinations of the module's chunks grouped by used exports.
|
|
1450
|
+
* @param {Module} module the module
|
|
1451
|
+
* @returns {Set<ChunkSet | Chunk>} chunk combinations
|
|
1452
|
+
*/
|
|
1453
|
+
const computeCombinationsByUsedExports = (module) => {
|
|
1454
|
+
// fill the groupedByExportsMap
|
|
1455
|
+
getExportsChunkSetsInGraph();
|
|
1456
|
+
/** @type {Set<ChunkSet | Chunk>} */
|
|
1457
|
+
const set = new Set();
|
|
1458
|
+
const groupedByUsedExports =
|
|
1459
|
+
/** @type {Iterable<Chunk[]>} */
|
|
1460
|
+
(groupedByExportsMap.get(module));
|
|
1461
|
+
for (const chunks of groupedByUsedExports) {
|
|
1462
|
+
for (const comb of getExportsCombinations(getKey(chunks))) {
|
|
1463
|
+
set.add(comb);
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
return set;
|
|
1467
|
+
};
|
|
1468
|
+
|
|
1319
1469
|
logger.timeEnd("prepare");
|
|
1320
1470
|
|
|
1321
1471
|
logger.time("modules");
|
|
@@ -1328,38 +1478,29 @@ module.exports = class SplitChunksPlugin {
|
|
|
1328
1478
|
continue;
|
|
1329
1479
|
}
|
|
1330
1480
|
|
|
1331
|
-
//
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
});
|
|
1337
|
-
|
|
1338
|
-
// Prepare some values (usedExports = true)
|
|
1339
|
-
const getCombsByUsedExports = memoize(() => {
|
|
1340
|
-
// fill the groupedByExportsMap
|
|
1341
|
-
getExportsChunkSetsInGraph();
|
|
1342
|
-
/** @type {Set<ChunkSet | Chunk>} */
|
|
1343
|
-
const set = new Set();
|
|
1344
|
-
const groupedByUsedExports =
|
|
1345
|
-
/** @type {Iterable<Chunk[]>} */
|
|
1346
|
-
(groupedByExportsMap.get(module));
|
|
1347
|
-
for (const chunks of groupedByUsedExports) {
|
|
1348
|
-
const chunksKey = getKey(chunks);
|
|
1349
|
-
for (const comb of getExportsCombinations(chunksKey)) {
|
|
1350
|
-
set.add(comb);
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
return set;
|
|
1354
|
-
});
|
|
1481
|
+
// Computed at most once per module, on first use by a cache group
|
|
1482
|
+
/** @type {Combinations | undefined} */
|
|
1483
|
+
let combsCache;
|
|
1484
|
+
/** @type {Set<ChunkSet | Chunk> | undefined} */
|
|
1485
|
+
let combsByUsedExportsCache;
|
|
1355
1486
|
|
|
1356
1487
|
let cacheGroupIndex = 0;
|
|
1357
1488
|
for (const cacheGroupSource of cacheGroups) {
|
|
1358
1489
|
const cacheGroup = this._getCacheGroup(cacheGroupSource);
|
|
1359
1490
|
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1491
|
+
let combs;
|
|
1492
|
+
if (cacheGroup.usedExports) {
|
|
1493
|
+
if (combsByUsedExportsCache === undefined) {
|
|
1494
|
+
combsByUsedExportsCache =
|
|
1495
|
+
computeCombinationsByUsedExports(module);
|
|
1496
|
+
}
|
|
1497
|
+
combs = combsByUsedExportsCache;
|
|
1498
|
+
} else {
|
|
1499
|
+
if (combsCache === undefined) {
|
|
1500
|
+
combsCache = computeCombinations(module);
|
|
1501
|
+
}
|
|
1502
|
+
combs = combsCache;
|
|
1503
|
+
}
|
|
1363
1504
|
// For all combination of chunk selection
|
|
1364
1505
|
for (const chunkCombination of combs) {
|
|
1365
1506
|
// Break if minimum number of chunks is not reached
|
|
@@ -1544,19 +1685,36 @@ module.exports = class SplitChunksPlugin {
|
|
|
1544
1685
|
Number.isFinite(item.cacheGroup.maxAsyncRequests))
|
|
1545
1686
|
) {
|
|
1546
1687
|
for (const chunk of usedChunks) {
|
|
1547
|
-
// respect max requests
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
)
|
|
1555
|
-
|
|
1688
|
+
// respect max requests: a chunk that is both initial and
|
|
1689
|
+
// async answers to the stricter of the two caps
|
|
1690
|
+
const isOnlyInitial = chunk.isOnlyInitial();
|
|
1691
|
+
const byAsyncRequests =
|
|
1692
|
+
!isOnlyInitial &&
|
|
1693
|
+
(!chunk.canBeInitial() ||
|
|
1694
|
+
item.cacheGroup.maxAsyncRequests <
|
|
1695
|
+
item.cacheGroup.maxInitialRequests);
|
|
1696
|
+
const maxRequests = byAsyncRequests
|
|
1697
|
+
? item.cacheGroup.maxAsyncRequests
|
|
1698
|
+
: item.cacheGroup.maxInitialRequests;
|
|
1556
1699
|
if (
|
|
1557
1700
|
Number.isFinite(maxRequests) &&
|
|
1558
1701
|
getRequests(chunk) >= maxRequests
|
|
1559
1702
|
) {
|
|
1703
|
+
if (cappedSplits !== undefined) {
|
|
1704
|
+
cappedSplits.push({
|
|
1705
|
+
cacheGroup: item.cacheGroup.key,
|
|
1706
|
+
chunk,
|
|
1707
|
+
// which cap it was cannot be read back off the value:
|
|
1708
|
+
// the two are equal by default in production
|
|
1709
|
+
limit: byAsyncRequests
|
|
1710
|
+
? "maxAsyncRequests"
|
|
1711
|
+
: "maxInitialRequests",
|
|
1712
|
+
maxRequests:
|
|
1713
|
+
/** @type {number} */
|
|
1714
|
+
(maxRequests),
|
|
1715
|
+
modules: item.modules.size
|
|
1716
|
+
});
|
|
1717
|
+
}
|
|
1560
1718
|
usedChunks.delete(chunk);
|
|
1561
1719
|
}
|
|
1562
1720
|
}
|
|
@@ -1577,12 +1735,14 @@ module.exports = class SplitChunksPlugin {
|
|
|
1577
1735
|
}
|
|
1578
1736
|
if (usedChunks.size >= item.cacheGroup.minChunks) {
|
|
1579
1737
|
const chunksArr = [...usedChunks];
|
|
1738
|
+
// invariant across the module loop below
|
|
1739
|
+
const usedChunksKey = getKey(usedChunks);
|
|
1580
1740
|
for (const module of item.modules) {
|
|
1581
1741
|
addModuleToChunksInfoMap(
|
|
1582
1742
|
item.cacheGroup,
|
|
1583
1743
|
item.cacheGroupIndex,
|
|
1584
1744
|
chunksArr,
|
|
1585
|
-
|
|
1745
|
+
usedChunksKey,
|
|
1586
1746
|
module
|
|
1587
1747
|
);
|
|
1588
1748
|
}
|
|
@@ -1881,4 +2041,8 @@ module.exports = class SplitChunksPlugin {
|
|
|
1881
2041
|
);
|
|
1882
2042
|
});
|
|
1883
2043
|
}
|
|
1884
|
-
}
|
|
2044
|
+
}
|
|
2045
|
+
|
|
2046
|
+
SplitChunksPlugin.getCappedSplits = getCappedSplits;
|
|
2047
|
+
|
|
2048
|
+
module.exports = SplitChunksPlugin;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
const WebpackError = require("../errors/WebpackError");
|
|
9
9
|
const formatSize = require("../util/formatSize");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
11
|
+
/** @import { AssetDetails } from "./SizeLimitsPlugin" */
|
|
12
12
|
|
|
13
13
|
class AssetsOverSizeLimitWarning extends WebpackError {
|
|
14
14
|
/**
|
|
@@ -18,7 +18,15 @@ class AssetsOverSizeLimitWarning extends WebpackError {
|
|
|
18
18
|
*/
|
|
19
19
|
constructor(assetsOverSizeLimit, assetLimit) {
|
|
20
20
|
const assetLists = assetsOverSizeLimit
|
|
21
|
-
.map((asset) =>
|
|
21
|
+
.map((asset) => {
|
|
22
|
+
const largest = asset.modules
|
|
23
|
+
? `\n Largest modules: ${asset.modules
|
|
24
|
+
.map((module) => `${module.name} (${formatSize(module.size)})`)
|
|
25
|
+
.join(", ")}`
|
|
26
|
+
: "";
|
|
27
|
+
|
|
28
|
+
return `\n ${asset.name} (${formatSize(asset.size)})${largest}`;
|
|
29
|
+
})
|
|
22
30
|
.join("");
|
|
23
31
|
|
|
24
32
|
super(`asset size limit: The following asset(s) exceed the recommended size limit (${formatSize(
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const AsyncChunkWaterfallWarning = require("../errors/AsyncChunkWaterfallWarning");
|
|
9
|
+
|
|
10
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
11
|
+
/** @import ChunkGroup from "../ChunkGroup" */
|
|
12
|
+
/** @import Compiler from "../Compiler" */
|
|
13
|
+
/** @import { WaterfallDetails } from "../errors/AsyncChunkWaterfallWarning" */
|
|
14
|
+
|
|
15
|
+
const PLUGIN_NAME = "AsyncChunkWaterfallsPlugin";
|
|
16
|
+
|
|
17
|
+
// Enough to name the offenders without printing the whole chunk graph.
|
|
18
|
+
const MAX_REPORTED_WATERFALLS = 5;
|
|
19
|
+
|
|
20
|
+
// Two levels is the shape `import()` is for — a route that loads its own data.
|
|
21
|
+
// Three is where the round trips start outweighing what splitting saved.
|
|
22
|
+
const MIN_REPORTED_DEPTH = 3;
|
|
23
|
+
|
|
24
|
+
class AsyncChunkWaterfallsPlugin {
|
|
25
|
+
/**
|
|
26
|
+
* Creates an instance of AsyncChunkWaterfallsPlugin.
|
|
27
|
+
* @param {PerformanceOptions} options the plugin options
|
|
28
|
+
*/
|
|
29
|
+
constructor(options) {
|
|
30
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
31
|
+
this.hints = options.hints;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
36
|
+
* @param {Compiler} compiler the compiler instance
|
|
37
|
+
* @returns {void}
|
|
38
|
+
*/
|
|
39
|
+
apply(compiler) {
|
|
40
|
+
const hints = this.hints;
|
|
41
|
+
|
|
42
|
+
if (!hints) return;
|
|
43
|
+
|
|
44
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
45
|
+
// `afterSeal` is past the hash, which folds every message into it — a
|
|
46
|
+
// hint reported earlier would change the build's identity.
|
|
47
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
48
|
+
const { chunkGraph } = compilation;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The name to print for a group; ids exist by `afterSeal`.
|
|
52
|
+
* @param {ChunkGroup} group the group
|
|
53
|
+
* @returns {string} what to call it
|
|
54
|
+
*/
|
|
55
|
+
const nameOf = (group) => {
|
|
56
|
+
if (group.name) return group.name;
|
|
57
|
+
|
|
58
|
+
const [chunk] = group.chunks;
|
|
59
|
+
|
|
60
|
+
return chunk && chunk.id !== null ? `${chunk.id}` : "(unnamed)";
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Breadth-first from the initial groups, so the depth recorded for a
|
|
64
|
+
// group is the fewest requests a client makes to reach it.
|
|
65
|
+
/** @type {Map<ChunkGroup, ChunkGroup[]>} */
|
|
66
|
+
const pathTo = new Map();
|
|
67
|
+
/** @type {ChunkGroup[]} */
|
|
68
|
+
const queue = [];
|
|
69
|
+
|
|
70
|
+
for (const group of compilation.chunkGroups) {
|
|
71
|
+
if (!group.isInitial()) continue;
|
|
72
|
+
|
|
73
|
+
pathTo.set(group, []);
|
|
74
|
+
queue.push(group);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** @type {WaterfallDetails[]} */
|
|
78
|
+
const waterfalls = [];
|
|
79
|
+
let deepest = 0;
|
|
80
|
+
|
|
81
|
+
for (let i = 0; i < queue.length; i++) {
|
|
82
|
+
const group = queue[i];
|
|
83
|
+
const path = /** @type {ChunkGroup[]} */ (pathTo.get(group));
|
|
84
|
+
|
|
85
|
+
for (const child of group.getChildren()) {
|
|
86
|
+
if (pathTo.has(child)) continue;
|
|
87
|
+
|
|
88
|
+
const childPath = [...path, child];
|
|
89
|
+
|
|
90
|
+
pathTo.set(child, childPath);
|
|
91
|
+
queue.push(child);
|
|
92
|
+
|
|
93
|
+
if (childPath.length < MIN_REPORTED_DEPTH) continue;
|
|
94
|
+
|
|
95
|
+
// Only the end of a chain is reported: every prefix of it is a
|
|
96
|
+
// waterfall too, and naming them all says the same thing N times.
|
|
97
|
+
if (child.getNumberOfChildren() > 0) continue;
|
|
98
|
+
|
|
99
|
+
let size = 0;
|
|
100
|
+
|
|
101
|
+
for (const step of childPath) {
|
|
102
|
+
for (const chunk of step.chunks) {
|
|
103
|
+
size += chunkGraph.getChunkSize(chunk);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
deepest = Math.max(deepest, childPath.length);
|
|
108
|
+
waterfalls.push({ chain: childPath.map(nameOf), size });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (waterfalls.length === 0) return;
|
|
113
|
+
|
|
114
|
+
// Deepest first, then largest: the worst round-trip cost leads.
|
|
115
|
+
waterfalls.sort(
|
|
116
|
+
(a, b) => b.chain.length - a.chain.length || b.size - a.size
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
const warning = new AsyncChunkWaterfallWarning(
|
|
120
|
+
waterfalls.slice(0, MAX_REPORTED_WATERFALLS),
|
|
121
|
+
deepest
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
if (hints === "error") {
|
|
125
|
+
compilation.errors.push(warning);
|
|
126
|
+
} else if (hints === "stats") {
|
|
127
|
+
compilation.hints.push(warning);
|
|
128
|
+
} else {
|
|
129
|
+
compilation.warnings.push(warning);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
module.exports = AsyncChunkWaterfallsPlugin;
|