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
@@ -13,11 +13,18 @@ const { compareSelect, compareStrings } = require("../util/comparators");
|
|
13
13
|
const createHash = require("../util/createHash");
|
14
14
|
|
15
15
|
/** @typedef {import("webpack-sources").Source} Source */
|
16
|
+
/** @typedef {import("../Cache").Etag} Etag */
|
16
17
|
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
|
17
18
|
/** @typedef {import("../Compiler")} Compiler */
|
19
|
+
/** @typedef {typeof import("../util/Hash")} Hash */
|
18
20
|
|
19
21
|
const EMPTY_SET = new Set();
|
20
22
|
|
23
|
+
/**
|
24
|
+
* @template T
|
25
|
+
* @param {T | T[]} itemOrItems item or items
|
26
|
+
* @param {Set<T>} list list
|
27
|
+
*/
|
21
28
|
const addToList = (itemOrItems, list) => {
|
22
29
|
if (Array.isArray(itemOrItems)) {
|
23
30
|
for (const item of itemOrItems) {
|
@@ -54,12 +61,14 @@ const mapAndDeduplicateBuffers = (input, fn) => {
|
|
54
61
|
* @param {string} str String to quote
|
55
62
|
* @returns {string} Escaped string
|
56
63
|
*/
|
57
|
-
const quoteMeta = str => {
|
58
|
-
return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
|
59
|
-
};
|
64
|
+
const quoteMeta = str => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
|
60
65
|
|
61
66
|
const cachedSourceMap = new WeakMap();
|
62
67
|
|
68
|
+
/**
|
69
|
+
* @param {Source} source source
|
70
|
+
* @returns {CachedSource} cached source
|
71
|
+
*/
|
63
72
|
const toCachedSource = source => {
|
64
73
|
if (source instanceof CachedSource) {
|
65
74
|
return source;
|
@@ -71,23 +80,27 @@ const toCachedSource = source => {
|
|
71
80
|
return newSource;
|
72
81
|
};
|
73
82
|
|
83
|
+
/** @typedef {Set<string>} OwnHashes */
|
84
|
+
/** @typedef {Set<string>} ReferencedHashes */
|
85
|
+
/** @typedef {Set<string>} Hashes */
|
86
|
+
|
74
87
|
/**
|
75
|
-
* @typedef {
|
88
|
+
* @typedef {object} AssetInfoForRealContentHash
|
76
89
|
* @property {string} name
|
77
90
|
* @property {AssetInfo} info
|
78
91
|
* @property {Source} source
|
79
92
|
* @property {RawSource | undefined} newSource
|
80
93
|
* @property {RawSource | undefined} newSourceWithoutOwn
|
81
94
|
* @property {string} content
|
82
|
-
* @property {
|
83
|
-
* @property {Promise} contentComputePromise
|
84
|
-
* @property {Promise} contentComputeWithoutOwnPromise
|
85
|
-
* @property {
|
86
|
-
* @property {
|
95
|
+
* @property {OwnHashes | undefined} ownHashes
|
96
|
+
* @property {Promise<void> | undefined} contentComputePromise
|
97
|
+
* @property {Promise<void> | undefined} contentComputeWithoutOwnPromise
|
98
|
+
* @property {ReferencedHashes | undefined} referencedHashes
|
99
|
+
* @property {Hashes} hashes
|
87
100
|
*/
|
88
101
|
|
89
102
|
/**
|
90
|
-
* @typedef {
|
103
|
+
* @typedef {object} CompilationHooks
|
91
104
|
* @property {SyncBailHook<[Buffer[], string], string>} updateHash
|
92
105
|
*/
|
93
106
|
|
@@ -115,6 +128,11 @@ class RealContentHashPlugin {
|
|
115
128
|
return hooks;
|
116
129
|
}
|
117
130
|
|
131
|
+
/**
|
132
|
+
* @param {object} options options object
|
133
|
+
* @param {string | Hash} options.hashFunction the hash function to use
|
134
|
+
* @param {string} options.hashDigest the hash digest to use
|
135
|
+
*/
|
118
136
|
constructor({ hashFunction, hashDigest }) {
|
119
137
|
this._hashFunction = hashFunction;
|
120
138
|
this._hashDigest = hashDigest;
|
@@ -143,27 +161,25 @@ class RealContentHashPlugin {
|
|
143
161
|
const assets = compilation.getAssets();
|
144
162
|
/** @type {AssetInfoForRealContentHash[]} */
|
145
163
|
const assetsWithInfo = [];
|
164
|
+
/** @type {Map<string, [AssetInfoForRealContentHash]>} */
|
146
165
|
const hashToAssets = new Map();
|
147
166
|
for (const { source, info, name } of assets) {
|
148
167
|
const cachedSource = toCachedSource(source);
|
149
|
-
const content = cachedSource.source();
|
150
|
-
/** @type {
|
168
|
+
const content = /** @type {string} */ (cachedSource.source());
|
169
|
+
/** @type {Hashes} */
|
151
170
|
const hashes = new Set();
|
152
171
|
addToList(info.contenthash, hashes);
|
172
|
+
/** @type {AssetInfoForRealContentHash} */
|
153
173
|
const data = {
|
154
174
|
name,
|
155
175
|
info,
|
156
176
|
source: cachedSource,
|
157
|
-
/** @type {RawSource | undefined} */
|
158
177
|
newSource: undefined,
|
159
|
-
/** @type {RawSource | undefined} */
|
160
178
|
newSourceWithoutOwn: undefined,
|
161
179
|
content,
|
162
|
-
/** @type {Set<string>} */
|
163
180
|
ownHashes: undefined,
|
164
181
|
contentComputePromise: undefined,
|
165
182
|
contentComputeWithoutOwnPromise: undefined,
|
166
|
-
/** @type {Set<string>} */
|
167
183
|
referencedHashes: undefined,
|
168
184
|
hashes
|
169
185
|
};
|
@@ -197,7 +213,7 @@ class RealContentHashPlugin {
|
|
197
213
|
[asset.referencedHashes, asset.ownHashes] =
|
198
214
|
await cacheAnalyse.providePromise(name, etag, () => {
|
199
215
|
const referencedHashes = new Set();
|
200
|
-
|
216
|
+
const ownHashes = new Set();
|
201
217
|
const inContent = content.match(hashRegExp);
|
202
218
|
if (inContent) {
|
203
219
|
for (const hash of inContent) {
|
@@ -212,11 +228,17 @@ class RealContentHashPlugin {
|
|
212
228
|
});
|
213
229
|
})
|
214
230
|
);
|
231
|
+
/**
|
232
|
+
* @param {string} hash the hash
|
233
|
+
* @returns {undefined | ReferencedHashes} the referenced hashes
|
234
|
+
*/
|
215
235
|
const getDependencies = hash => {
|
216
236
|
const assets = hashToAssets.get(hash);
|
217
237
|
if (!assets) {
|
218
238
|
const referencingAssets = assetsWithInfo.filter(asset =>
|
219
|
-
asset.referencedHashes.has(
|
239
|
+
/** @type {ReferencedHashes} */ (asset.referencedHashes).has(
|
240
|
+
hash
|
241
|
+
)
|
220
242
|
);
|
221
243
|
const err = new WebpackError(`RealContentHashPlugin
|
222
244
|
Some kind of unexpected caching problem occurred.
|
@@ -232,27 +254,40 @@ ${referencingAssets
|
|
232
254
|
})
|
233
255
|
.join("\n")}`);
|
234
256
|
compilation.errors.push(err);
|
235
|
-
return
|
257
|
+
return;
|
236
258
|
}
|
237
259
|
const hashes = new Set();
|
238
260
|
for (const { referencedHashes, ownHashes } of assets) {
|
239
|
-
if (!ownHashes.has(hash)) {
|
240
|
-
for (const hash of ownHashes) {
|
261
|
+
if (!(/** @type {OwnHashes} */ (ownHashes).has(hash))) {
|
262
|
+
for (const hash of /** @type {OwnHashes} */ (ownHashes)) {
|
241
263
|
hashes.add(hash);
|
242
264
|
}
|
243
265
|
}
|
244
|
-
for (const hash of
|
266
|
+
for (const hash of /** @type {ReferencedHashes} */ (
|
267
|
+
referencedHashes
|
268
|
+
)) {
|
245
269
|
hashes.add(hash);
|
246
270
|
}
|
247
271
|
}
|
248
272
|
return hashes;
|
249
273
|
};
|
274
|
+
/**
|
275
|
+
* @param {string} hash the hash
|
276
|
+
* @returns {string} the hash info
|
277
|
+
*/
|
250
278
|
const hashInfo = hash => {
|
251
279
|
const assets = hashToAssets.get(hash);
|
252
|
-
return `${hash} (${Array.from(
|
280
|
+
return `${hash} (${Array.from(
|
281
|
+
/** @type {AssetInfoForRealContentHash[]} */ (assets),
|
282
|
+
a => a.name
|
283
|
+
)})`;
|
253
284
|
};
|
254
285
|
const hashesInOrder = new Set();
|
255
286
|
for (const hash of hashToAssets.keys()) {
|
287
|
+
/**
|
288
|
+
* @param {string} hash the hash
|
289
|
+
* @param {Set<string>} stack stack of hashes
|
290
|
+
*/
|
256
291
|
const add = (hash, stack) => {
|
257
292
|
const deps = getDependencies(hash);
|
258
293
|
if (!deps) return;
|
@@ -276,21 +311,31 @@ ${referencingAssets
|
|
276
311
|
add(hash, new Set());
|
277
312
|
}
|
278
313
|
const hashToNewHash = new Map();
|
314
|
+
/**
|
315
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
316
|
+
* @returns {Etag} etag
|
317
|
+
*/
|
279
318
|
const getEtag = asset =>
|
280
319
|
cacheGenerate.mergeEtags(
|
281
320
|
cacheGenerate.getLazyHashedEtag(asset.source),
|
282
|
-
Array.from(
|
283
|
-
|
321
|
+
Array.from(
|
322
|
+
/** @type {ReferencedHashes} */ (asset.referencedHashes),
|
323
|
+
hash => hashToNewHash.get(hash)
|
284
324
|
).join("|")
|
285
325
|
);
|
326
|
+
/**
|
327
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
328
|
+
* @returns {Promise<void>}
|
329
|
+
*/
|
286
330
|
const computeNewContent = asset => {
|
287
331
|
if (asset.contentComputePromise) return asset.contentComputePromise;
|
288
332
|
return (asset.contentComputePromise = (async () => {
|
289
333
|
if (
|
290
|
-
asset.ownHashes.size > 0 ||
|
291
|
-
Array.from(
|
292
|
-
|
293
|
-
|
334
|
+
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
335
|
+
Array.from(
|
336
|
+
/** @type {ReferencedHashes} */
|
337
|
+
(asset.referencedHashes)
|
338
|
+
).some(hash => hashToNewHash.get(hash) !== hash)
|
294
339
|
) {
|
295
340
|
const identifier = asset.name;
|
296
341
|
const etag = getEtag(asset);
|
@@ -307,17 +352,22 @@ ${referencingAssets
|
|
307
352
|
}
|
308
353
|
})());
|
309
354
|
};
|
355
|
+
/**
|
356
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
357
|
+
* @returns {Promise<void>}
|
358
|
+
*/
|
310
359
|
const computeNewContentWithoutOwn = asset => {
|
311
360
|
if (asset.contentComputeWithoutOwnPromise)
|
312
361
|
return asset.contentComputeWithoutOwnPromise;
|
313
362
|
return (asset.contentComputeWithoutOwnPromise = (async () => {
|
314
363
|
if (
|
315
|
-
asset.ownHashes.size > 0 ||
|
316
|
-
Array.from(
|
317
|
-
|
318
|
-
|
364
|
+
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
365
|
+
Array.from(
|
366
|
+
/** @type {ReferencedHashes} */
|
367
|
+
(asset.referencedHashes)
|
368
|
+
).some(hash => hashToNewHash.get(hash) !== hash)
|
319
369
|
) {
|
320
|
-
const identifier = asset.name
|
370
|
+
const identifier = `${asset.name}|without-own`;
|
321
371
|
const etag = getEtag(asset);
|
322
372
|
asset.newSourceWithoutOwn = await cacheGenerate.providePromise(
|
323
373
|
identifier,
|
@@ -326,7 +376,9 @@ ${referencingAssets
|
|
326
376
|
const newContent = asset.content.replace(
|
327
377
|
hashRegExp,
|
328
378
|
hash => {
|
329
|
-
if (
|
379
|
+
if (
|
380
|
+
/** @type {OwnHashes} */ (asset.ownHashes).has(hash)
|
381
|
+
) {
|
330
382
|
return "";
|
331
383
|
}
|
332
384
|
return hashToNewHash.get(hash);
|
@@ -340,29 +392,33 @@ ${referencingAssets
|
|
340
392
|
};
|
341
393
|
const comparator = compareSelect(a => a.name, compareStrings);
|
342
394
|
for (const oldHash of hashesInOrder) {
|
343
|
-
const assets =
|
395
|
+
const assets =
|
396
|
+
/** @type {AssetInfoForRealContentHash[]} */
|
397
|
+
(hashToAssets.get(oldHash));
|
344
398
|
assets.sort(comparator);
|
345
|
-
const hash = createHash(this._hashFunction);
|
346
399
|
await Promise.all(
|
347
400
|
assets.map(asset =>
|
348
|
-
asset.ownHashes.has(oldHash)
|
401
|
+
/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)
|
349
402
|
? computeNewContentWithoutOwn(asset)
|
350
403
|
: computeNewContent(asset)
|
351
404
|
)
|
352
405
|
);
|
353
406
|
const assetsContent = mapAndDeduplicateBuffers(assets, asset => {
|
354
|
-
if (asset.ownHashes.has(oldHash)) {
|
407
|
+
if (/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)) {
|
355
408
|
return asset.newSourceWithoutOwn
|
356
409
|
? asset.newSourceWithoutOwn.buffer()
|
357
410
|
: asset.source.buffer();
|
358
|
-
} else {
|
359
|
-
return asset.newSource
|
360
|
-
? asset.newSource.buffer()
|
361
|
-
: asset.source.buffer();
|
362
411
|
}
|
412
|
+
return asset.newSource
|
413
|
+
? asset.newSource.buffer()
|
414
|
+
: asset.source.buffer();
|
363
415
|
});
|
364
416
|
let newHash = hooks.updateHash.call(assetsContent, oldHash);
|
365
417
|
if (!newHash) {
|
418
|
+
const hash = createHash(this._hashFunction);
|
419
|
+
if (compilation.outputOptions.hashSalt) {
|
420
|
+
hash.update(compilation.outputOptions.hashSalt);
|
421
|
+
}
|
366
422
|
for (const content of assetsContent) {
|
367
423
|
hash.update(content);
|
368
424
|
}
|
@@ -6,10 +6,58 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const { STAGE_BASIC } = require("../OptimizationStages");
|
9
|
-
const Queue = require("../util/Queue");
|
10
|
-
const { intersect } = require("../util/SetHelpers");
|
11
9
|
|
10
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
|
+
/** @typedef {import("../ChunkGroup")} ChunkGroup */
|
12
12
|
/** @typedef {import("../Compiler")} Compiler */
|
13
|
+
/** @typedef {import("../Module")} Module */
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Intersects multiple masks represented as bigints
|
17
|
+
* @param {bigint[]} masks The module masks to intersect
|
18
|
+
* @returns {bigint} The intersection of all masks
|
19
|
+
*/
|
20
|
+
function intersectMasks(masks) {
|
21
|
+
let result = masks[0];
|
22
|
+
for (let i = masks.length - 1; i >= 1; i--) {
|
23
|
+
result &= masks[i];
|
24
|
+
}
|
25
|
+
return result;
|
26
|
+
}
|
27
|
+
|
28
|
+
const ZERO_BIGINT = BigInt(0);
|
29
|
+
const ONE_BIGINT = BigInt(1);
|
30
|
+
const THIRTY_TWO_BIGINT = BigInt(32);
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Parses the module mask and returns the modules represented by it
|
34
|
+
* @param {bigint} mask the module mask
|
35
|
+
* @param {Module[]} ordinalModules the modules in the order they were added to the mask (LSB is index 0)
|
36
|
+
* @returns {Generator<Module>} the modules represented by the mask
|
37
|
+
*/
|
38
|
+
function* getModulesFromMask(mask, ordinalModules) {
|
39
|
+
let offset = 31;
|
40
|
+
while (mask !== ZERO_BIGINT) {
|
41
|
+
// Consider the last 32 bits, since that's what Math.clz32 can handle
|
42
|
+
let last32 = Number(BigInt.asUintN(32, mask));
|
43
|
+
while (last32 > 0) {
|
44
|
+
const last = Math.clz32(last32);
|
45
|
+
// The number of trailing zeros is the number trimmed off the input mask + 31 - the number of leading zeros
|
46
|
+
// The 32 is baked into the initial value of offset
|
47
|
+
const moduleIndex = offset - last;
|
48
|
+
// The number of trailing zeros is the index into the array generated by getOrCreateModuleMask
|
49
|
+
const module = ordinalModules[moduleIndex];
|
50
|
+
yield module;
|
51
|
+
// Remove the matched module from the mask
|
52
|
+
// Since we can only count leading zeros, not trailing, we can't just downshift the mask
|
53
|
+
last32 &= ~(1 << (31 - last));
|
54
|
+
}
|
55
|
+
|
56
|
+
// Remove the processed chunk from the mask
|
57
|
+
mask >>= THIRTY_TWO_BIGINT;
|
58
|
+
offset += 32;
|
59
|
+
}
|
60
|
+
}
|
13
61
|
|
14
62
|
class RemoveParentModulesPlugin {
|
15
63
|
/**
|
@@ -18,94 +66,129 @@ class RemoveParentModulesPlugin {
|
|
18
66
|
*/
|
19
67
|
apply(compiler) {
|
20
68
|
compiler.hooks.compilation.tap("RemoveParentModulesPlugin", compilation => {
|
69
|
+
/**
|
70
|
+
* @param {Iterable<Chunk>} chunks the chunks
|
71
|
+
* @param {ChunkGroup[]} chunkGroups the chunk groups
|
72
|
+
*/
|
21
73
|
const handler = (chunks, chunkGroups) => {
|
22
74
|
const chunkGraph = compilation.chunkGraph;
|
23
|
-
const queue = new
|
75
|
+
const queue = new Set();
|
24
76
|
const availableModulesMap = new WeakMap();
|
25
77
|
|
78
|
+
let nextModuleMask = ONE_BIGINT;
|
79
|
+
const maskByModule = new WeakMap();
|
80
|
+
/** @type {Module[]} */
|
81
|
+
const ordinalModules = [];
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Gets or creates a unique mask for a module
|
85
|
+
* @param {Module} mod the module to get the mask for
|
86
|
+
* @returns {bigint} the module mask to uniquely identify the module
|
87
|
+
*/
|
88
|
+
const getOrCreateModuleMask = mod => {
|
89
|
+
let id = maskByModule.get(mod);
|
90
|
+
if (id === undefined) {
|
91
|
+
id = nextModuleMask;
|
92
|
+
ordinalModules.push(mod);
|
93
|
+
maskByModule.set(mod, id);
|
94
|
+
nextModuleMask <<= ONE_BIGINT;
|
95
|
+
}
|
96
|
+
return id;
|
97
|
+
};
|
98
|
+
|
99
|
+
// Initialize masks by chunk and by chunk group for quicker comparisons
|
100
|
+
const chunkMasks = new WeakMap();
|
101
|
+
for (const chunk of chunks) {
|
102
|
+
let mask = ZERO_BIGINT;
|
103
|
+
for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
|
104
|
+
const id = getOrCreateModuleMask(m);
|
105
|
+
mask |= id;
|
106
|
+
}
|
107
|
+
chunkMasks.set(chunk, mask);
|
108
|
+
}
|
109
|
+
|
110
|
+
const chunkGroupMasks = new WeakMap();
|
111
|
+
for (const chunkGroup of chunkGroups) {
|
112
|
+
let mask = ZERO_BIGINT;
|
113
|
+
for (const chunk of chunkGroup.chunks) {
|
114
|
+
const chunkMask = chunkMasks.get(chunk);
|
115
|
+
if (chunkMask !== undefined) {
|
116
|
+
mask |= chunkMask;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
chunkGroupMasks.set(chunkGroup, mask);
|
120
|
+
}
|
121
|
+
|
26
122
|
for (const chunkGroup of compilation.entrypoints.values()) {
|
27
123
|
// initialize available modules for chunks without parents
|
28
|
-
availableModulesMap.set(chunkGroup,
|
124
|
+
availableModulesMap.set(chunkGroup, ZERO_BIGINT);
|
29
125
|
for (const child of chunkGroup.childrenIterable) {
|
30
|
-
queue.
|
126
|
+
queue.add(child);
|
31
127
|
}
|
32
128
|
}
|
33
129
|
for (const chunkGroup of compilation.asyncEntrypoints) {
|
34
130
|
// initialize available modules for chunks without parents
|
35
|
-
availableModulesMap.set(chunkGroup,
|
131
|
+
availableModulesMap.set(chunkGroup, ZERO_BIGINT);
|
36
132
|
for (const child of chunkGroup.childrenIterable) {
|
37
|
-
queue.
|
133
|
+
queue.add(child);
|
38
134
|
}
|
39
135
|
}
|
40
136
|
|
41
|
-
|
42
|
-
|
43
|
-
let availableModules = availableModulesMap.get(chunkGroup);
|
137
|
+
for (const chunkGroup of queue) {
|
138
|
+
let availableModulesMask = availableModulesMap.get(chunkGroup);
|
44
139
|
let changed = false;
|
45
140
|
for (const parent of chunkGroup.parentsIterable) {
|
46
141
|
const availableModulesInParent = availableModulesMap.get(parent);
|
47
142
|
if (availableModulesInParent !== undefined) {
|
143
|
+
const parentMask =
|
144
|
+
availableModulesInParent | chunkGroupMasks.get(parent);
|
48
145
|
// If we know the available modules in parent: process these
|
49
|
-
if (
|
146
|
+
if (availableModulesMask === undefined) {
|
50
147
|
// if we have not own info yet: create new entry
|
51
|
-
|
52
|
-
for (const chunk of parent.chunks) {
|
53
|
-
for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
|
54
|
-
availableModules.add(m);
|
55
|
-
}
|
56
|
-
}
|
57
|
-
availableModulesMap.set(chunkGroup, availableModules);
|
148
|
+
availableModulesMask = parentMask;
|
58
149
|
changed = true;
|
59
150
|
} else {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
) {
|
65
|
-
availableModules.delete(m);
|
66
|
-
changed = true;
|
67
|
-
}
|
151
|
+
const newMask = availableModulesMask & parentMask;
|
152
|
+
if (newMask !== availableModulesMask) {
|
153
|
+
changed = true;
|
154
|
+
availableModulesMask = newMask;
|
68
155
|
}
|
69
156
|
}
|
70
157
|
}
|
71
158
|
}
|
159
|
+
|
72
160
|
if (changed) {
|
161
|
+
availableModulesMap.set(chunkGroup, availableModulesMask);
|
73
162
|
// if something changed: enqueue our children
|
74
163
|
for (const child of chunkGroup.childrenIterable) {
|
75
|
-
queue
|
164
|
+
// Push the child to the end of the queue
|
165
|
+
queue.delete(child);
|
166
|
+
queue.add(child);
|
76
167
|
}
|
77
168
|
}
|
78
169
|
}
|
79
170
|
|
80
171
|
// now we have available modules for every chunk
|
81
172
|
for (const chunk of chunks) {
|
173
|
+
const chunkMask = chunkMasks.get(chunk);
|
174
|
+
if (chunkMask === undefined) continue; // No info about this chunk
|
175
|
+
|
82
176
|
const availableModulesSets = Array.from(
|
83
177
|
chunk.groupsIterable,
|
84
178
|
chunkGroup => availableModulesMap.get(chunkGroup)
|
85
179
|
);
|
86
|
-
if (availableModulesSets.
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
toRemove.add(m);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
} else {
|
100
|
-
for (const m of availableModules) {
|
101
|
-
if (chunkGraph.isModuleInChunk(m, chunk)) {
|
102
|
-
toRemove.add(m);
|
103
|
-
}
|
180
|
+
if (availableModulesSets.includes(undefined)) continue; // No info about this chunk group
|
181
|
+
|
182
|
+
const availableModulesMask = intersectMasks(availableModulesSets);
|
183
|
+
const toRemoveMask = chunkMask & availableModulesMask;
|
184
|
+
if (toRemoveMask !== ZERO_BIGINT) {
|
185
|
+
for (const module of getModulesFromMask(
|
186
|
+
toRemoveMask,
|
187
|
+
ordinalModules
|
188
|
+
)) {
|
189
|
+
chunkGraph.disconnectChunkAndModule(chunk, module);
|
104
190
|
}
|
105
191
|
}
|
106
|
-
for (const module of toRemove) {
|
107
|
-
chunkGraph.disconnectChunkAndModule(chunk, module);
|
108
|
-
}
|
109
192
|
}
|
110
193
|
};
|
111
194
|
compilation.hooks.optimizeChunks.tap(
|
@@ -5,11 +5,20 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../Compilation").EntryData} EntryData */
|
8
9
|
/** @typedef {import("../Compiler")} Compiler */
|
10
|
+
/** @typedef {import("../Entrypoint")} Entrypoint */
|
9
11
|
|
10
12
|
class RuntimeChunkPlugin {
|
13
|
+
/**
|
14
|
+
* @param {{ name?: (entrypoint: { name: string }) => string }} options options
|
15
|
+
*/
|
11
16
|
constructor(options) {
|
12
17
|
this.options = {
|
18
|
+
/**
|
19
|
+
* @param {Entrypoint} entrypoint entrypoint name
|
20
|
+
* @returns {string} runtime chunk name
|
21
|
+
*/
|
13
22
|
name: entrypoint => `runtime~${entrypoint.name}`,
|
14
23
|
...options
|
15
24
|
};
|
@@ -26,10 +35,14 @@ class RuntimeChunkPlugin {
|
|
26
35
|
"RuntimeChunkPlugin",
|
27
36
|
(_, { name: entryName }) => {
|
28
37
|
if (entryName === undefined) return;
|
29
|
-
const data =
|
38
|
+
const data =
|
39
|
+
/** @type {EntryData} */
|
40
|
+
(compilation.entries.get(entryName));
|
30
41
|
if (data.options.runtime === undefined && !data.options.dependOn) {
|
31
42
|
// Determine runtime chunk name
|
32
|
-
let name =
|
43
|
+
let name =
|
44
|
+
/** @type {string | ((entrypoint: { name: string }) => string)} */
|
45
|
+
(this.options.name);
|
33
46
|
if (typeof name === "function") {
|
34
47
|
name = name({ name: entryName });
|
35
48
|
}
|