webpack 5.59.0 → 5.94.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 +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -24,7 +24,7 @@ const validate = createSchemaValidation(
|
|
24
24
|
);
|
25
25
|
|
26
26
|
/**
|
27
|
-
* @typedef {
|
27
|
+
* @typedef {object} ChunkCombination
|
28
28
|
* @property {boolean} deleted this is set to true when combination was removed
|
29
29
|
* @property {number} sizeDiff
|
30
30
|
* @property {number} integratedSize
|
@@ -36,6 +36,12 @@ const validate = createSchemaValidation(
|
|
36
36
|
* @property {number} bSize
|
37
37
|
*/
|
38
38
|
|
39
|
+
/**
|
40
|
+
* @template K, V
|
41
|
+
* @param {Map<K, Set<V>>} map map
|
42
|
+
* @param {K} key key
|
43
|
+
* @param {V} value value
|
44
|
+
*/
|
39
45
|
const addToSetMap = (map, key, value) => {
|
40
46
|
const set = map.get(key);
|
41
47
|
if (set === undefined) {
|
@@ -68,7 +74,9 @@ class LimitChunkCountPlugin {
|
|
68
74
|
},
|
69
75
|
chunks => {
|
70
76
|
const chunkGraph = compilation.chunkGraph;
|
71
|
-
const maxChunks =
|
77
|
+
const maxChunks =
|
78
|
+
/** @type {LimitChunkCountPluginOptions} */
|
79
|
+
(options).maxChunks;
|
72
80
|
if (!maxChunks) return;
|
73
81
|
if (maxChunks < 1) return;
|
74
82
|
if (compilation.chunks.size <= maxChunks) return;
|
@@ -88,9 +96,17 @@ class LimitChunkCountPlugin {
|
|
88
96
|
c => c.sizeDiff,
|
89
97
|
(a, b) => b - a,
|
90
98
|
// Layer 2: ordered by smallest combined size
|
99
|
+
/**
|
100
|
+
* @param {ChunkCombination} c combination
|
101
|
+
* @returns {number} integrated size
|
102
|
+
*/
|
91
103
|
c => c.integratedSize,
|
92
104
|
(a, b) => a - b,
|
93
105
|
// Layer 3: ordered by position difference in orderedChunk (-> to be deterministic)
|
106
|
+
/**
|
107
|
+
* @param {ChunkCombination} c combination
|
108
|
+
* @returns {number} position difference
|
109
|
+
*/
|
94
110
|
c => c.bIdx - c.aIdx,
|
95
111
|
(a, b) => a - b,
|
96
112
|
// Layer 4: ordered by position in orderedChunk (-> to be deterministic)
|
@@ -103,7 +119,7 @@ class LimitChunkCountPlugin {
|
|
103
119
|
/** @type {Map<Chunk, Set<ChunkCombination>>} */
|
104
120
|
const combinationsByChunk = new Map();
|
105
121
|
|
106
|
-
orderedChunks.
|
122
|
+
for (const [bIdx, b] of orderedChunks.entries()) {
|
107
123
|
// create combination pairs with size and integrated size
|
108
124
|
for (let aIdx = 0; aIdx < bIdx; aIdx++) {
|
109
125
|
const a = orderedChunks[aIdx];
|
@@ -133,8 +149,7 @@ class LimitChunkCountPlugin {
|
|
133
149
|
addToSetMap(combinationsByChunk, a, c);
|
134
150
|
addToSetMap(combinationsByChunk, b, c);
|
135
151
|
}
|
136
|
-
|
137
|
-
});
|
152
|
+
}
|
138
153
|
|
139
154
|
// list of modified chunks during this run
|
140
155
|
// combinations affected by this change are skipped to allow
|
@@ -143,7 +158,6 @@ class LimitChunkCountPlugin {
|
|
143
158
|
const modifiedChunks = new Set();
|
144
159
|
|
145
160
|
let changed = false;
|
146
|
-
// eslint-disable-next-line no-constant-condition
|
147
161
|
loop: while (true) {
|
148
162
|
const combination = combinations.popFirst();
|
149
163
|
if (combination === undefined) break;
|
@@ -193,14 +207,18 @@ class LimitChunkCountPlugin {
|
|
193
207
|
// Update all affected combinations
|
194
208
|
// delete all combination with the removed chunk
|
195
209
|
// we will use combinations with the kept chunk instead
|
196
|
-
for (const combination of
|
210
|
+
for (const combination of /** @type {Set<ChunkCombination>} */ (
|
211
|
+
combinationsByChunk.get(a)
|
212
|
+
)) {
|
197
213
|
if (combination.deleted) continue;
|
198
214
|
combination.deleted = true;
|
199
215
|
combinations.delete(combination);
|
200
216
|
}
|
201
217
|
|
202
218
|
// Update combinations with the kept chunk with new sizes
|
203
|
-
for (const combination of
|
219
|
+
for (const combination of /** @type {Set<ChunkCombination>} */ (
|
220
|
+
combinationsByChunk.get(b)
|
221
|
+
)) {
|
204
222
|
if (combination.deleted) continue;
|
205
223
|
if (combination.a === b) {
|
206
224
|
if (!chunkGraph.canChunksBeIntegrated(a, combination.b)) {
|
@@ -243,7 +261,12 @@ class LimitChunkCountPlugin {
|
|
243
261
|
finishUpdate();
|
244
262
|
}
|
245
263
|
}
|
246
|
-
combinationsByChunk.set(
|
264
|
+
combinationsByChunk.set(
|
265
|
+
a,
|
266
|
+
/** @type {Set<ChunkCombination>} */ (
|
267
|
+
combinationsByChunk.get(b)
|
268
|
+
)
|
269
|
+
);
|
247
270
|
combinationsByChunk.delete(b);
|
248
271
|
}
|
249
272
|
}
|
@@ -39,7 +39,7 @@ const comparator = compareSelect(e => e.name, compareStringsNumeric);
|
|
39
39
|
/**
|
40
40
|
* @param {boolean} deterministic use deterministic names
|
41
41
|
* @param {ExportsInfo} exportsInfo exports info
|
42
|
-
* @param {boolean} isNamespace is namespace object
|
42
|
+
* @param {boolean | undefined} isNamespace is namespace object
|
43
43
|
* @returns {void}
|
44
44
|
*/
|
45
45
|
const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
|
@@ -88,7 +88,11 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
|
|
88
88
|
used === UsageState.OnlyPropertiesUsed ||
|
89
89
|
used === UsageState.Unused
|
90
90
|
) {
|
91
|
-
mangleExportsInfo(
|
91
|
+
mangleExportsInfo(
|
92
|
+
deterministic,
|
93
|
+
/** @type {ExportsInfo} */ (exportInfo.exportsInfo),
|
94
|
+
false
|
95
|
+
);
|
92
96
|
}
|
93
97
|
}
|
94
98
|
}
|
@@ -145,6 +149,7 @@ class MangleExportsPlugin {
|
|
145
149
|
constructor(deterministic) {
|
146
150
|
this._deterministic = deterministic;
|
147
151
|
}
|
152
|
+
|
148
153
|
/**
|
149
154
|
* Apply the plugin
|
150
155
|
* @param {Compiler} compiler the compiler instance
|
@@ -9,6 +9,11 @@ const SizeFormatHelpers = require("../SizeFormatHelpers");
|
|
9
9
|
const WebpackError = require("../WebpackError");
|
10
10
|
|
11
11
|
class MinMaxSizeWarning extends WebpackError {
|
12
|
+
/**
|
13
|
+
* @param {string[] | undefined} keys keys
|
14
|
+
* @param {number} minSize minimum size
|
15
|
+
* @param {number} maxSize maximum size
|
16
|
+
*/
|
12
17
|
constructor(keys, minSize, maxSize) {
|
13
18
|
let keysMessage = "Fallback cache group";
|
14
19
|
if (keys) {
|
@@ -18,7 +23,7 @@ class MinMaxSizeWarning extends WebpackError {
|
|
18
23
|
: `Cache group ${keys[0]}`;
|
19
24
|
}
|
20
25
|
super(
|
21
|
-
|
26
|
+
"SplitChunksPlugin\n" +
|
22
27
|
`${keysMessage}\n` +
|
23
28
|
`Configured minSize (${SizeFormatHelpers.formatSize(minSize)}) is ` +
|
24
29
|
`bigger than maxSize (${SizeFormatHelpers.formatSize(maxSize)}).\n` +
|
@@ -23,11 +23,12 @@ const ConcatenatedModule = require("./ConcatenatedModule");
|
|
23
23
|
/** @typedef {import("../Compilation")} Compilation */
|
24
24
|
/** @typedef {import("../Compiler")} Compiler */
|
25
25
|
/** @typedef {import("../Module")} Module */
|
26
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
26
27
|
/** @typedef {import("../RequestShortener")} RequestShortener */
|
27
28
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
28
29
|
|
29
30
|
/**
|
30
|
-
* @typedef {
|
31
|
+
* @typedef {object} Statistics
|
31
32
|
* @property {number} cached
|
32
33
|
* @property {number} alreadyInConfig
|
33
34
|
* @property {number} invalidModule
|
@@ -40,26 +41,34 @@ const ConcatenatedModule = require("./ConcatenatedModule");
|
|
40
41
|
* @property {number} added
|
41
42
|
*/
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
}
|
44
|
+
/**
|
45
|
+
* @param {string} msg message
|
46
|
+
* @returns {string} formatted message
|
47
|
+
*/
|
48
|
+
const formatBailoutReason = msg => `ModuleConcatenation bailout: ${msg}`;
|
46
49
|
|
47
50
|
class ModuleConcatenationPlugin {
|
48
|
-
constructor(options) {
|
49
|
-
if (typeof options !== "object") options = {};
|
50
|
-
this.options = options;
|
51
|
-
}
|
52
|
-
|
53
51
|
/**
|
54
52
|
* Apply the plugin
|
55
53
|
* @param {Compiler} compiler the compiler instance
|
56
54
|
* @returns {void}
|
57
55
|
*/
|
58
56
|
apply(compiler) {
|
57
|
+
const { _backCompat: backCompat } = compiler;
|
59
58
|
compiler.hooks.compilation.tap("ModuleConcatenationPlugin", compilation => {
|
59
|
+
if (compilation.moduleMemCaches) {
|
60
|
+
throw new Error(
|
61
|
+
"optimization.concatenateModules can't be used with cacheUnaffected as module concatenation is a global effect"
|
62
|
+
);
|
63
|
+
}
|
60
64
|
const moduleGraph = compilation.moduleGraph;
|
65
|
+
/** @type {Map<Module, string | ((requestShortener: RequestShortener) => string)>} */
|
61
66
|
const bailoutReasonMap = new Map();
|
62
67
|
|
68
|
+
/**
|
69
|
+
* @param {Module} module the module
|
70
|
+
* @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
|
71
|
+
*/
|
63
72
|
const setBailoutReason = (module, reason) => {
|
64
73
|
setInnerBailoutReason(module, reason);
|
65
74
|
moduleGraph
|
@@ -71,16 +80,30 @@ class ModuleConcatenationPlugin {
|
|
71
80
|
);
|
72
81
|
};
|
73
82
|
|
83
|
+
/**
|
84
|
+
* @param {Module} module the module
|
85
|
+
* @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
|
86
|
+
*/
|
74
87
|
const setInnerBailoutReason = (module, reason) => {
|
75
88
|
bailoutReasonMap.set(module, reason);
|
76
89
|
};
|
77
90
|
|
91
|
+
/**
|
92
|
+
* @param {Module} module the module
|
93
|
+
* @param {RequestShortener} requestShortener the request shortener
|
94
|
+
* @returns {string | ((requestShortener: RequestShortener) => string) | undefined} the reason
|
95
|
+
*/
|
78
96
|
const getInnerBailoutReason = (module, requestShortener) => {
|
79
97
|
const reason = bailoutReasonMap.get(module);
|
80
98
|
if (typeof reason === "function") return reason(requestShortener);
|
81
99
|
return reason;
|
82
100
|
};
|
83
101
|
|
102
|
+
/**
|
103
|
+
* @param {Module} module the module
|
104
|
+
* @param {Module | function(RequestShortener): string} problem the problem
|
105
|
+
* @returns {(requestShortener: RequestShortener) => string} the reason
|
106
|
+
*/
|
84
107
|
const formatBailoutWarning = (module, problem) => requestShortener => {
|
85
108
|
if (typeof problem === "function") {
|
86
109
|
return formatBailoutReason(
|
@@ -97,15 +120,14 @@ class ModuleConcatenationPlugin {
|
|
97
120
|
requestShortener
|
98
121
|
)}${reasonWithPrefix}`
|
99
122
|
);
|
100
|
-
} else {
|
101
|
-
return formatBailoutReason(
|
102
|
-
`Cannot concat with ${module.readableIdentifier(
|
103
|
-
requestShortener
|
104
|
-
)} because of ${problem.readableIdentifier(
|
105
|
-
requestShortener
|
106
|
-
)}${reasonWithPrefix}`
|
107
|
-
);
|
108
123
|
}
|
124
|
+
return formatBailoutReason(
|
125
|
+
`Cannot concat with ${module.readableIdentifier(
|
126
|
+
requestShortener
|
127
|
+
)} because of ${problem.readableIdentifier(
|
128
|
+
requestShortener
|
129
|
+
)}${reasonWithPrefix}`
|
130
|
+
);
|
109
131
|
};
|
110
132
|
|
111
133
|
compilation.hooks.optimizeChunkModules.tapAsync(
|
@@ -137,13 +159,13 @@ class ModuleConcatenationPlugin {
|
|
137
159
|
|
138
160
|
// Must not be an async module
|
139
161
|
if (moduleGraph.isAsync(module)) {
|
140
|
-
setBailoutReason(module,
|
162
|
+
setBailoutReason(module, "Module is async");
|
141
163
|
continue;
|
142
164
|
}
|
143
165
|
|
144
166
|
// Must be in strict mode
|
145
|
-
if (!module.buildInfo.strict) {
|
146
|
-
setBailoutReason(module,
|
167
|
+
if (!(/** @type {BuildInfo} */ (module.buildInfo).strict)) {
|
168
|
+
setBailoutReason(module, "Module is not in strict mode");
|
147
169
|
continue;
|
148
170
|
}
|
149
171
|
|
@@ -156,11 +178,10 @@ class ModuleConcatenationPlugin {
|
|
156
178
|
// Exports must be known (and not dynamic)
|
157
179
|
const exportsInfo = moduleGraph.getExportsInfo(module);
|
158
180
|
const relevantExports = exportsInfo.getRelevantExports(undefined);
|
159
|
-
const unknownReexports = relevantExports.filter(
|
160
|
-
|
181
|
+
const unknownReexports = relevantExports.filter(
|
182
|
+
exportInfo =>
|
161
183
|
exportInfo.isReexport() && !exportInfo.getTarget(moduleGraph)
|
162
|
-
|
163
|
-
});
|
184
|
+
);
|
164
185
|
if (unknownReexports.length > 0) {
|
165
186
|
setBailoutReason(
|
166
187
|
module,
|
@@ -177,9 +198,7 @@ class ModuleConcatenationPlugin {
|
|
177
198
|
|
178
199
|
// Root modules must have a static list of exports
|
179
200
|
const unknownProvidedExports = relevantExports.filter(
|
180
|
-
exportInfo =>
|
181
|
-
return exportInfo.provided !== true;
|
182
|
-
}
|
201
|
+
exportInfo => exportInfo.provided !== true
|
183
202
|
);
|
184
203
|
if (unknownProvidedExports.length > 0) {
|
185
204
|
setBailoutReason(
|
@@ -212,9 +231,11 @@ class ModuleConcatenationPlugin {
|
|
212
231
|
// modules with lower depth are more likely suited as roots
|
213
232
|
// this improves performance, because modules already selected as inner are skipped
|
214
233
|
logger.time("sort relevant modules");
|
215
|
-
relevantModules.sort(
|
216
|
-
|
217
|
-
|
234
|
+
relevantModules.sort(
|
235
|
+
(a, b) =>
|
236
|
+
/** @type {number} */ (moduleGraph.getDepth(a)) -
|
237
|
+
/** @type {number} */ (moduleGraph.getDepth(b))
|
238
|
+
);
|
218
239
|
logger.timeEnd("sort relevant modules");
|
219
240
|
|
220
241
|
/** @type {Statistics} */
|
@@ -243,7 +264,7 @@ class ModuleConcatenationPlugin {
|
|
243
264
|
// TODO reconsider that when it's only used in a different runtime
|
244
265
|
if (usedAsInner.has(currentRoot)) continue;
|
245
266
|
|
246
|
-
let chunkRuntime
|
267
|
+
let chunkRuntime;
|
247
268
|
for (const r of chunkGraph.getModuleRuntimes(currentRoot)) {
|
248
269
|
chunkRuntime = mergeRuntimeOwned(chunkRuntime, r);
|
249
270
|
}
|
@@ -255,8 +276,8 @@ class ModuleConcatenationPlugin {
|
|
255
276
|
filteredRuntime === true
|
256
277
|
? chunkRuntime
|
257
278
|
: filteredRuntime === false
|
258
|
-
|
259
|
-
|
279
|
+
? undefined
|
280
|
+
: filteredRuntime;
|
260
281
|
|
261
282
|
// create a configuration with the root
|
262
283
|
const currentConfiguration = new ConcatConfiguration(
|
@@ -340,11 +361,9 @@ class ModuleConcatenationPlugin {
|
|
340
361
|
// to get the biggest groups possible. Used modules are marked with usedModules
|
341
362
|
// TODO: Allow to reuse existing configuration while trying to add dependencies.
|
342
363
|
// This would improve performance. O(n^2) -> O(n)
|
343
|
-
logger.time(
|
344
|
-
concatConfigurations.sort((a, b) =>
|
345
|
-
|
346
|
-
});
|
347
|
-
logger.timeEnd(`sort concat configurations`);
|
364
|
+
logger.time("sort concat configurations");
|
365
|
+
concatConfigurations.sort((a, b) => b.modules.size - a.modules.size);
|
366
|
+
logger.timeEnd("sort concat configurations");
|
348
367
|
const usedModules = new Set();
|
349
368
|
|
350
369
|
logger.time("create concatenated modules");
|
@@ -362,10 +381,12 @@ class ModuleConcatenationPlugin {
|
|
362
381
|
}
|
363
382
|
|
364
383
|
// Create a new ConcatenatedModule
|
365
|
-
|
384
|
+
ConcatenatedModule.getCompilationHooks(compilation);
|
385
|
+
const newModule = ConcatenatedModule.create(
|
366
386
|
rootModule,
|
367
387
|
modules,
|
368
388
|
concatConfiguration.runtime,
|
389
|
+
compilation,
|
369
390
|
compiler.root,
|
370
391
|
compilation.outputOptions.hashFunction
|
371
392
|
);
|
@@ -389,8 +410,10 @@ class ModuleConcatenationPlugin {
|
|
389
410
|
};
|
390
411
|
|
391
412
|
const integrate = () => {
|
392
|
-
|
393
|
-
|
413
|
+
if (backCompat) {
|
414
|
+
ChunkGraph.setChunkGraphForModule(newModule, chunkGraph);
|
415
|
+
ModuleGraph.setModuleGraphForModule(newModule, moduleGraph);
|
416
|
+
}
|
394
417
|
|
395
418
|
for (const warning of concatConfiguration.getWarningsSorted()) {
|
396
419
|
moduleGraph
|
@@ -408,21 +431,32 @@ class ModuleConcatenationPlugin {
|
|
408
431
|
moduleGraph.copyOutgoingModuleConnections(
|
409
432
|
m,
|
410
433
|
newModule,
|
411
|
-
c =>
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
)
|
418
|
-
);
|
419
|
-
}
|
434
|
+
c =>
|
435
|
+
c.originModule === m &&
|
436
|
+
!(
|
437
|
+
c.dependency instanceof HarmonyImportDependency &&
|
438
|
+
modules.has(c.module)
|
439
|
+
)
|
420
440
|
);
|
421
441
|
// remove module from chunk
|
422
442
|
for (const chunk of chunkGraph.getModuleChunksIterable(
|
423
443
|
rootModule
|
424
444
|
)) {
|
425
|
-
chunkGraph.
|
445
|
+
const sourceTypes = chunkGraph.getChunkModuleSourceTypes(
|
446
|
+
chunk,
|
447
|
+
m
|
448
|
+
);
|
449
|
+
if (sourceTypes.size === 1) {
|
450
|
+
chunkGraph.disconnectChunkAndModule(chunk, m);
|
451
|
+
} else {
|
452
|
+
const newSourceTypes = new Set(sourceTypes);
|
453
|
+
newSourceTypes.delete("javascript");
|
454
|
+
chunkGraph.setChunkModuleSourceTypes(
|
455
|
+
chunk,
|
456
|
+
m,
|
457
|
+
newSourceTypes
|
458
|
+
);
|
459
|
+
}
|
426
460
|
}
|
427
461
|
}
|
428
462
|
}
|
@@ -438,7 +472,7 @@ class ModuleConcatenationPlugin {
|
|
438
472
|
c.module === rootModule ? c.originModule : c.module;
|
439
473
|
const innerConnection =
|
440
474
|
c.dependency instanceof HarmonyImportDependency &&
|
441
|
-
modules.has(otherModule);
|
475
|
+
modules.has(/** @type {Module} */ (otherModule));
|
442
476
|
return !innerConnection;
|
443
477
|
});
|
444
478
|
// add concatenated module to the compilation
|
@@ -511,7 +545,7 @@ class ModuleConcatenationPlugin {
|
|
511
545
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
512
546
|
* @param {boolean} avoidMutateOnFailure avoid mutating the config when adding fails
|
513
547
|
* @param {Statistics} statistics gathering metrics
|
514
|
-
* @returns {Module | function(RequestShortener): string} the problematic module
|
548
|
+
* @returns {null | Module | function(RequestShortener): string} the problematic module
|
515
549
|
*/
|
516
550
|
_tryToAdd(
|
517
551
|
compilation,
|
@@ -550,6 +584,10 @@ class ModuleConcatenationPlugin {
|
|
550
584
|
chunkGraph.getModuleChunksIterable(config.rootModule)
|
551
585
|
).filter(chunk => !chunkGraph.isModuleInChunk(module, chunk));
|
552
586
|
if (missingChunks.length > 0) {
|
587
|
+
/**
|
588
|
+
* @param {RequestShortener} requestShortener request shortener
|
589
|
+
* @returns {string} problem description
|
590
|
+
*/
|
553
591
|
const problem = requestShortener => {
|
554
592
|
const missingChunksList = Array.from(
|
555
593
|
new Set(missingChunks.map(chunk => chunk.name || "unnamed chunk(s)"))
|
@@ -581,12 +619,16 @@ class ModuleConcatenationPlugin {
|
|
581
619
|
incomingConnections.get(null) || incomingConnections.get(undefined);
|
582
620
|
if (incomingConnectionsFromNonModules) {
|
583
621
|
const activeNonModulesConnections =
|
584
|
-
incomingConnectionsFromNonModules.filter(connection =>
|
622
|
+
incomingConnectionsFromNonModules.filter(connection =>
|
585
623
|
// We are not interested in inactive connections
|
586
624
|
// or connections without dependency
|
587
|
-
|
588
|
-
|
625
|
+
connection.isActive(runtime)
|
626
|
+
);
|
589
627
|
if (activeNonModulesConnections.length > 0) {
|
628
|
+
/**
|
629
|
+
* @param {RequestShortener} requestShortener request shortener
|
630
|
+
* @returns {string} problem description
|
631
|
+
*/
|
590
632
|
const problem = requestShortener => {
|
591
633
|
const importingExplanations = new Set(
|
592
634
|
activeNonModulesConnections.map(c => c.explanation).filter(Boolean)
|
@@ -614,7 +656,7 @@ class ModuleConcatenationPlugin {
|
|
614
656
|
if (chunkGraph.getNumberOfModuleChunks(originModule) === 0) continue;
|
615
657
|
|
616
658
|
// We don't care for connections from other runtimes
|
617
|
-
let originRuntime
|
659
|
+
let originRuntime;
|
618
660
|
for (const r of chunkGraph.getModuleRuntimes(originModule)) {
|
619
661
|
originRuntime = mergeRuntimeOwned(originRuntime, r);
|
620
662
|
}
|
@@ -644,6 +686,10 @@ class ModuleConcatenationPlugin {
|
|
644
686
|
return false;
|
645
687
|
});
|
646
688
|
if (otherChunkModules.length > 0) {
|
689
|
+
/**
|
690
|
+
* @param {RequestShortener} requestShortener request shortener
|
691
|
+
* @returns {string} problem description
|
692
|
+
*/
|
647
693
|
const problem = requestShortener => {
|
648
694
|
const names = otherChunkModules
|
649
695
|
.map(m => m.readableIdentifier(requestShortener))
|
@@ -671,21 +717,26 @@ class ModuleConcatenationPlugin {
|
|
671
717
|
nonHarmonyConnections.set(originModule, connections);
|
672
718
|
}
|
673
719
|
if (nonHarmonyConnections.size > 0) {
|
720
|
+
/**
|
721
|
+
* @param {RequestShortener} requestShortener request shortener
|
722
|
+
* @returns {string} problem description
|
723
|
+
*/
|
674
724
|
const problem = requestShortener => {
|
675
725
|
const names = Array.from(nonHarmonyConnections)
|
676
|
-
.map(
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
726
|
+
.map(
|
727
|
+
([originModule, connections]) =>
|
728
|
+
`${originModule.readableIdentifier(
|
729
|
+
requestShortener
|
730
|
+
)} (referenced with ${Array.from(
|
731
|
+
new Set(
|
732
|
+
connections
|
733
|
+
.map(c => c.dependency && c.dependency.type)
|
734
|
+
.filter(Boolean)
|
735
|
+
)
|
684
736
|
)
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
})
|
737
|
+
.sort()
|
738
|
+
.join(", ")})`
|
739
|
+
)
|
689
740
|
.sort();
|
690
741
|
return `Module ${module.readableIdentifier(
|
691
742
|
requestShortener
|
@@ -709,19 +760,15 @@ class ModuleConcatenationPlugin {
|
|
709
760
|
/** @type {false | RuntimeSpec} */
|
710
761
|
let currentRuntimeCondition = false;
|
711
762
|
for (const connection of connections) {
|
712
|
-
const runtimeCondition = filterRuntime(runtime, runtime =>
|
713
|
-
|
714
|
-
|
763
|
+
const runtimeCondition = filterRuntime(runtime, runtime =>
|
764
|
+
connection.isTargetActive(runtime)
|
765
|
+
);
|
715
766
|
if (runtimeCondition === false) continue;
|
716
767
|
if (runtimeCondition === true) continue outer;
|
717
|
-
|
718
|
-
currentRuntimeCondition
|
719
|
-
currentRuntimeCondition,
|
720
|
-
runtimeCondition
|
721
|
-
);
|
722
|
-
} else {
|
723
|
-
currentRuntimeCondition = runtimeCondition;
|
724
|
-
}
|
768
|
+
currentRuntimeCondition =
|
769
|
+
currentRuntimeCondition !== false
|
770
|
+
? mergeRuntime(currentRuntimeCondition, runtimeCondition)
|
771
|
+
: runtimeCondition;
|
725
772
|
}
|
726
773
|
if (currentRuntimeCondition !== false) {
|
727
774
|
otherRuntimeConnections.push({
|
@@ -731,8 +778,12 @@ class ModuleConcatenationPlugin {
|
|
731
778
|
}
|
732
779
|
}
|
733
780
|
if (otherRuntimeConnections.length > 0) {
|
734
|
-
|
735
|
-
|
781
|
+
/**
|
782
|
+
* @param {RequestShortener} requestShortener request shortener
|
783
|
+
* @returns {string} problem description
|
784
|
+
*/
|
785
|
+
const problem = requestShortener =>
|
786
|
+
`Module ${module.readableIdentifier(
|
736
787
|
requestShortener
|
737
788
|
)} is runtime-dependent referenced by these modules: ${Array.from(
|
738
789
|
otherRuntimeConnections,
|
@@ -745,7 +796,6 @@ class ModuleConcatenationPlugin {
|
|
745
796
|
/** @type {RuntimeSpec} */ (runtimeCondition)
|
746
797
|
)})`
|
747
798
|
).join(", ")}`;
|
748
|
-
};
|
749
799
|
statistics.incorrectRuntimeCondition++;
|
750
800
|
failureCache.set(module, problem); // cache failures for performance
|
751
801
|
return problem;
|
@@ -809,10 +859,17 @@ class ConcatConfiguration {
|
|
809
859
|
this.warnings = new Map();
|
810
860
|
}
|
811
861
|
|
862
|
+
/**
|
863
|
+
* @param {Module} module the module
|
864
|
+
*/
|
812
865
|
add(module) {
|
813
866
|
this.modules.add(module);
|
814
867
|
}
|
815
868
|
|
869
|
+
/**
|
870
|
+
* @param {Module} module the module
|
871
|
+
* @returns {boolean} true, when the module is in the module set
|
872
|
+
*/
|
816
873
|
has(module) {
|
817
874
|
return this.modules.has(module);
|
818
875
|
}
|
@@ -821,10 +878,17 @@ class ConcatConfiguration {
|
|
821
878
|
return this.modules.size === 1;
|
822
879
|
}
|
823
880
|
|
881
|
+
/**
|
882
|
+
* @param {Module} module the module
|
883
|
+
* @param {Module | function(RequestShortener): string} problem the problem
|
884
|
+
*/
|
824
885
|
addWarning(module, problem) {
|
825
886
|
this.warnings.set(module, problem);
|
826
887
|
}
|
827
888
|
|
889
|
+
/**
|
890
|
+
* @returns {Map<Module, Module | function(RequestShortener): string>} warnings
|
891
|
+
*/
|
828
892
|
getWarningsSorted() {
|
829
893
|
return new Map(
|
830
894
|
Array.from(this.warnings).sort((a, b) => {
|
@@ -848,6 +912,9 @@ class ConcatConfiguration {
|
|
848
912
|
return this.modules.size;
|
849
913
|
}
|
850
914
|
|
915
|
+
/**
|
916
|
+
* @param {number} snapshot snapshot
|
917
|
+
*/
|
851
918
|
rollback(snapshot) {
|
852
919
|
const modules = this.modules;
|
853
920
|
for (const m of modules) {
|