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
package/lib/ChunkGroup.js
CHANGED
@@ -22,12 +22,13 @@ const {
|
|
22
22
|
/** @typedef {import("./ModuleGraph")} ModuleGraph */
|
23
23
|
|
24
24
|
/** @typedef {{id: number}} HasId */
|
25
|
-
/** @typedef {{module: Module, loc: DependencyLocation, request: string}} OriginRecord */
|
25
|
+
/** @typedef {{module: Module | null, loc: DependencyLocation, request: string}} OriginRecord */
|
26
26
|
|
27
27
|
/**
|
28
|
-
* @typedef {
|
28
|
+
* @typedef {object} RawChunkGroupOptions
|
29
29
|
* @property {number=} preloadOrder
|
30
30
|
* @property {number=} prefetchOrder
|
31
|
+
* @property {("low" | "high" | "auto")=} fetchPriority
|
31
32
|
*/
|
32
33
|
|
33
34
|
/** @typedef {RawChunkGroupOptions & { name?: string }} ChunkGroupOptions */
|
@@ -69,7 +70,7 @@ const sortOrigin = (a, b) => {
|
|
69
70
|
class ChunkGroup {
|
70
71
|
/**
|
71
72
|
* Creates an instance of ChunkGroup.
|
72
|
-
* @param {string|ChunkGroupOptions=} options chunk group options passed to chunkGroup
|
73
|
+
* @param {string | ChunkGroupOptions=} options chunk group options passed to chunkGroup
|
73
74
|
*/
|
74
75
|
constructor(options) {
|
75
76
|
if (typeof options === "string") {
|
@@ -79,7 +80,7 @@ class ChunkGroup {
|
|
79
80
|
}
|
80
81
|
/** @type {number} */
|
81
82
|
this.groupDebugId = debugId++;
|
82
|
-
this.options = options;
|
83
|
+
this.options = /** @type {ChunkGroupOptions} */ (options);
|
83
84
|
/** @type {SortableSet<ChunkGroup>} */
|
84
85
|
this._children = new SortableSet(undefined, sortById);
|
85
86
|
/** @type {SortableSet<ChunkGroup>} */
|
@@ -92,12 +93,18 @@ class ChunkGroup {
|
|
92
93
|
/** @type {OriginRecord[]} */
|
93
94
|
this.origins = [];
|
94
95
|
/** Indices in top-down order */
|
95
|
-
/**
|
96
|
+
/**
|
97
|
+
* @private
|
98
|
+
* @type {Map<Module, number>}
|
99
|
+
*/
|
96
100
|
this._modulePreOrderIndices = new Map();
|
97
101
|
/** Indices in bottom-up order */
|
98
|
-
/**
|
102
|
+
/**
|
103
|
+
* @private
|
104
|
+
* @type {Map<Module, number>}
|
105
|
+
*/
|
99
106
|
this._modulePostOrderIndices = new Map();
|
100
|
-
/** @type {number} */
|
107
|
+
/** @type {number | undefined} */
|
101
108
|
this.index = undefined;
|
102
109
|
}
|
103
110
|
|
@@ -107,12 +114,18 @@ class ChunkGroup {
|
|
107
114
|
* @returns {void}
|
108
115
|
*/
|
109
116
|
addOptions(options) {
|
110
|
-
for (const
|
117
|
+
for (const _key of Object.keys(options)) {
|
118
|
+
const key = /** @type {keyof ChunkGroupOptions} */ (_key);
|
111
119
|
if (this.options[key] === undefined) {
|
112
|
-
|
120
|
+
/** @type {TODO} */
|
121
|
+
(this.options)[key] = options[key];
|
113
122
|
} else if (this.options[key] !== options[key]) {
|
114
123
|
if (key.endsWith("Order")) {
|
115
|
-
|
124
|
+
/** @type {TODO} */
|
125
|
+
(this.options)[key] = Math.max(
|
126
|
+
/** @type {number} */ (this.options[key]),
|
127
|
+
/** @type {number} */ (options[key])
|
128
|
+
);
|
116
129
|
} else {
|
117
130
|
throw new Error(
|
118
131
|
`ChunkGroup.addOptions: No option merge strategy for ${key}`
|
@@ -124,7 +137,7 @@ class ChunkGroup {
|
|
124
137
|
|
125
138
|
/**
|
126
139
|
* returns the name of current ChunkGroup
|
127
|
-
* @returns {string|undefined} returns the ChunkGroup name
|
140
|
+
* @returns {string | undefined} returns the ChunkGroup name
|
128
141
|
*/
|
129
142
|
get name() {
|
130
143
|
return this.options.name;
|
@@ -132,7 +145,7 @@ class ChunkGroup {
|
|
132
145
|
|
133
146
|
/**
|
134
147
|
* sets a new name for current ChunkGroup
|
135
|
-
* @param {string} value the new name for ChunkGroup
|
148
|
+
* @param {string | undefined} value the new name for ChunkGroup
|
136
149
|
* @returns {void}
|
137
150
|
*/
|
138
151
|
set name(value) {
|
@@ -212,7 +225,7 @@ class ChunkGroup {
|
|
212
225
|
/**
|
213
226
|
* @param {Chunk} oldChunk chunk to be replaced
|
214
227
|
* @param {Chunk} newChunk New chunk that will be replaced with
|
215
|
-
* @returns {boolean} returns true if the replacement was successful
|
228
|
+
* @returns {boolean | undefined} returns true if the replacement was successful
|
216
229
|
*/
|
217
230
|
replaceChunk(oldChunk, newChunk) {
|
218
231
|
const oldIdx = this.chunks.indexOf(oldChunk);
|
@@ -353,7 +366,7 @@ class ChunkGroup {
|
|
353
366
|
}
|
354
367
|
|
355
368
|
/**
|
356
|
-
* @returns {Array} an array containing the blocks
|
369
|
+
* @returns {Array<AsyncDependenciesBlock>} an array containing the blocks
|
357
370
|
*/
|
358
371
|
getBlocks() {
|
359
372
|
return this._blocks.getFromCache(getArray);
|
@@ -363,6 +376,10 @@ class ChunkGroup {
|
|
363
376
|
return this._blocks.size;
|
364
377
|
}
|
365
378
|
|
379
|
+
/**
|
380
|
+
* @param {AsyncDependenciesBlock} block block
|
381
|
+
* @returns {boolean} true, if block exists
|
382
|
+
*/
|
366
383
|
hasBlock(block) {
|
367
384
|
return this._blocks.has(block);
|
368
385
|
}
|
@@ -387,7 +404,7 @@ class ChunkGroup {
|
|
387
404
|
}
|
388
405
|
|
389
406
|
/**
|
390
|
-
* @param {Module} module origin module
|
407
|
+
* @param {Module | null} module origin module
|
391
408
|
* @param {DependencyLocation} loc location of the reference in the origin module
|
392
409
|
* @param {string} request request name of the reference
|
393
410
|
* @returns {void}
|
@@ -461,7 +478,6 @@ class ChunkGroup {
|
|
461
478
|
/**
|
462
479
|
* Sorting predicate which allows current ChunkGroup to be compared against another.
|
463
480
|
* Sorting values are based off of number of chunks in ChunkGroup.
|
464
|
-
*
|
465
481
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
466
482
|
* @param {ChunkGroup} otherGroup the chunkGroup to compare this against
|
467
483
|
* @returns {-1|0|1} sort position for comparison
|
@@ -486,13 +502,17 @@ class ChunkGroup {
|
|
486
502
|
for (const childGroup of this._children) {
|
487
503
|
for (const key of Object.keys(childGroup.options)) {
|
488
504
|
if (key.endsWith("Order")) {
|
489
|
-
const name = key.
|
505
|
+
const name = key.slice(0, key.length - "Order".length);
|
490
506
|
let list = lists.get(name);
|
491
507
|
if (list === undefined) {
|
492
508
|
lists.set(name, (list = []));
|
493
509
|
}
|
494
510
|
list.push({
|
495
|
-
order:
|
511
|
+
order:
|
512
|
+
/** @type {number} */
|
513
|
+
(
|
514
|
+
childGroup.options[/** @type {keyof ChunkGroupOptions} */ (key)]
|
515
|
+
),
|
496
516
|
group: childGroup
|
497
517
|
});
|
498
518
|
}
|
@@ -524,7 +544,7 @@ class ChunkGroup {
|
|
524
544
|
/**
|
525
545
|
* Gets the top-down index of a module in this ChunkGroup
|
526
546
|
* @param {Module} module the module
|
527
|
-
* @returns {number} index
|
547
|
+
* @returns {number | undefined} index
|
528
548
|
*/
|
529
549
|
getModulePreOrderIndex(module) {
|
530
550
|
return this._modulePreOrderIndices.get(module);
|
@@ -543,7 +563,7 @@ class ChunkGroup {
|
|
543
563
|
/**
|
544
564
|
* Gets the bottom-up index of a module in this ChunkGroup
|
545
565
|
* @param {Module} module the module
|
546
|
-
* @returns {number} index
|
566
|
+
* @returns {number | undefined} index
|
547
567
|
*/
|
548
568
|
getModulePostOrderIndex(module) {
|
549
569
|
return this._modulePostOrderIndices.get(module);
|
package/lib/ChunkTemplate.js
CHANGED
@@ -8,8 +8,21 @@
|
|
8
8
|
const util = require("util");
|
9
9
|
const memoize = require("./util/memoize");
|
10
10
|
|
11
|
+
/** @typedef {import("tapable").Tap} Tap */
|
11
12
|
/** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */
|
13
|
+
/** @typedef {import("./Chunk")} Chunk */
|
12
14
|
/** @typedef {import("./Compilation")} Compilation */
|
15
|
+
/** @typedef {import("./Compilation").ChunkHashContext} ChunkHashContext */
|
16
|
+
/** @typedef {import("./Compilation").Hash} Hash */
|
17
|
+
/** @typedef {import("./Compilation").RenderManifestEntry} RenderManifestEntry */
|
18
|
+
/** @typedef {import("./Compilation").RenderManifestOptions} RenderManifestOptions */
|
19
|
+
/** @typedef {import("./Compilation").Source} Source */
|
20
|
+
/** @typedef {import("./ModuleTemplate")} ModuleTemplate */
|
21
|
+
/** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
|
22
|
+
/**
|
23
|
+
* @template T
|
24
|
+
* @typedef {import("tapable").IfSet<T>} IfSet
|
25
|
+
*/
|
13
26
|
|
14
27
|
const getJavascriptModulesPlugin = memoize(() =>
|
15
28
|
require("./javascript/JavascriptModulesPlugin")
|
@@ -26,6 +39,11 @@ class ChunkTemplate {
|
|
26
39
|
this.hooks = Object.freeze({
|
27
40
|
renderManifest: {
|
28
41
|
tap: util.deprecate(
|
42
|
+
/**
|
43
|
+
* @template AdditionalOptions
|
44
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
45
|
+
* @param {function(RenderManifestEntry[], RenderManifestOptions): RenderManifestEntry[]} fn function
|
46
|
+
*/
|
29
47
|
(options, fn) => {
|
30
48
|
compilation.hooks.renderManifest.tap(
|
31
49
|
options,
|
@@ -41,6 +59,11 @@ class ChunkTemplate {
|
|
41
59
|
},
|
42
60
|
modules: {
|
43
61
|
tap: util.deprecate(
|
62
|
+
/**
|
63
|
+
* @template AdditionalOptions
|
64
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
65
|
+
* @param {function(Source, ModuleTemplate, RenderContext): Source} fn function
|
66
|
+
*/
|
44
67
|
(options, fn) => {
|
45
68
|
getJavascriptModulesPlugin()
|
46
69
|
.getCompilationHooks(compilation)
|
@@ -58,6 +81,11 @@ class ChunkTemplate {
|
|
58
81
|
},
|
59
82
|
render: {
|
60
83
|
tap: util.deprecate(
|
84
|
+
/**
|
85
|
+
* @template AdditionalOptions
|
86
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
87
|
+
* @param {function(Source, ModuleTemplate, RenderContext): Source} fn function
|
88
|
+
*/
|
61
89
|
(options, fn) => {
|
62
90
|
getJavascriptModulesPlugin()
|
63
91
|
.getCompilationHooks(compilation)
|
@@ -75,6 +103,11 @@ class ChunkTemplate {
|
|
75
103
|
},
|
76
104
|
renderWithEntry: {
|
77
105
|
tap: util.deprecate(
|
106
|
+
/**
|
107
|
+
* @template AdditionalOptions
|
108
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
109
|
+
* @param {function(Source, Chunk): Source} fn function
|
110
|
+
*/
|
78
111
|
(options, fn) => {
|
79
112
|
getJavascriptModulesPlugin()
|
80
113
|
.getCompilationHooks(compilation)
|
@@ -96,6 +129,11 @@ class ChunkTemplate {
|
|
96
129
|
},
|
97
130
|
hash: {
|
98
131
|
tap: util.deprecate(
|
132
|
+
/**
|
133
|
+
* @template AdditionalOptions
|
134
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
135
|
+
* @param {function(Hash): void} fn function
|
136
|
+
*/
|
99
137
|
(options, fn) => {
|
100
138
|
compilation.hooks.fullHash.tap(options, fn);
|
101
139
|
},
|
@@ -105,6 +143,11 @@ class ChunkTemplate {
|
|
105
143
|
},
|
106
144
|
hashForChunk: {
|
107
145
|
tap: util.deprecate(
|
146
|
+
/**
|
147
|
+
* @template AdditionalOptions
|
148
|
+
* @param {string | Tap & IfSet<AdditionalOptions>} options options
|
149
|
+
* @param {function(Hash, Chunk, ChunkHashContext): void} fn function
|
150
|
+
*/
|
108
151
|
(options, fn) => {
|
109
152
|
getJavascriptModulesPlugin()
|
110
153
|
.getCompilationHooks(compilation)
|
package/lib/CleanPlugin.js
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
const asyncLib = require("neo-async");
|
9
9
|
const { SyncBailHook } = require("tapable");
|
10
|
-
const Compilation = require("
|
10
|
+
const Compilation = require("./Compilation");
|
11
11
|
const createSchemaValidation = require("./util/create-schema-validation");
|
12
12
|
const { join } = require("./util/fs");
|
13
13
|
const processAsyncTree = require("./util/processAsyncTree");
|
@@ -15,16 +15,25 @@ const processAsyncTree = require("./util/processAsyncTree");
|
|
15
15
|
/** @typedef {import("../declarations/WebpackOptions").CleanOptions} CleanOptions */
|
16
16
|
/** @typedef {import("./Compiler")} Compiler */
|
17
17
|
/** @typedef {import("./logging/Logger").Logger} Logger */
|
18
|
+
/** @typedef {import("./util/fs").IStats} IStats */
|
18
19
|
/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
|
20
|
+
/** @typedef {import("./util/fs").StatsCallback} StatsCallback */
|
19
21
|
|
20
22
|
/** @typedef {(function(string):boolean)|RegExp} IgnoreItem */
|
23
|
+
/** @typedef {Map<string, number>} Assets */
|
21
24
|
/** @typedef {function(IgnoreItem): void} AddToIgnoreCallback */
|
22
25
|
|
23
26
|
/**
|
24
|
-
* @typedef {
|
27
|
+
* @typedef {object} CleanPluginCompilationHooks
|
25
28
|
* @property {SyncBailHook<[string], boolean>} keep when returning true the file/directory will be kept during cleaning, returning false will clean it and ignore the following plugins and config
|
26
29
|
*/
|
27
30
|
|
31
|
+
/**
|
32
|
+
* @callback KeepFn
|
33
|
+
* @param {string} path path
|
34
|
+
* @returns {boolean} true, if the path should be kept
|
35
|
+
*/
|
36
|
+
|
28
37
|
const validate = createSchemaValidation(
|
29
38
|
undefined,
|
30
39
|
() => {
|
@@ -39,18 +48,32 @@ const validate = createSchemaValidation(
|
|
39
48
|
baseDataPath: "options"
|
40
49
|
}
|
41
50
|
);
|
51
|
+
const _10sec = 10 * 1000;
|
52
|
+
|
53
|
+
/**
|
54
|
+
* marge assets map 2 into map 1
|
55
|
+
* @param {Assets} as1 assets
|
56
|
+
* @param {Assets} as2 assets
|
57
|
+
* @returns {void}
|
58
|
+
*/
|
59
|
+
const mergeAssets = (as1, as2) => {
|
60
|
+
for (const [key, value1] of as2) {
|
61
|
+
const value2 = as1.get(key);
|
62
|
+
if (!value2 || value1 > value2) as1.set(key, value1);
|
63
|
+
}
|
64
|
+
};
|
42
65
|
|
43
66
|
/**
|
44
67
|
* @param {OutputFileSystem} fs filesystem
|
45
68
|
* @param {string} outputPath output path
|
46
|
-
* @param {
|
47
|
-
* @param {function(Error=, Set<string>=): void} callback returns the filenames of the assets that shouldn't be there
|
69
|
+
* @param {Map<string, number>} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
|
70
|
+
* @param {function((Error | null)=, Set<string>=): void} callback returns the filenames of the assets that shouldn't be there
|
48
71
|
* @returns {void}
|
49
72
|
*/
|
50
73
|
const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
|
51
74
|
const directories = new Set();
|
52
75
|
// get directories of assets
|
53
|
-
for (const asset of currentAssets) {
|
76
|
+
for (const [asset] of currentAssets) {
|
54
77
|
directories.add(asset.replace(/(^|\/)[^/]*$/, ""));
|
55
78
|
}
|
56
79
|
// and all parent directories
|
@@ -62,7 +85,8 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
|
|
62
85
|
directories,
|
63
86
|
10,
|
64
87
|
(directory, callback) => {
|
65
|
-
|
88
|
+
/** @type {NonNullable<OutputFileSystem["readdir"]>} */
|
89
|
+
(fs.readdir)(join(fs, outputPath, directory), (err, entries) => {
|
66
90
|
if (err) {
|
67
91
|
if (err.code === "ENOENT") return callback();
|
68
92
|
if (err.code === "ENOTDIR") {
|
@@ -71,8 +95,8 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
|
|
71
95
|
}
|
72
96
|
return callback(err);
|
73
97
|
}
|
74
|
-
for (const entry of entries) {
|
75
|
-
const file =
|
98
|
+
for (const entry of /** @type {string[]} */ (entries)) {
|
99
|
+
const file = entry;
|
76
100
|
const filename = directory ? `${directory}/${file}` : file;
|
77
101
|
if (!directories.has(filename) && !currentAssets.has(filename)) {
|
78
102
|
diff.add(filename);
|
@@ -90,18 +114,35 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
|
|
90
114
|
};
|
91
115
|
|
92
116
|
/**
|
93
|
-
* @param {
|
94
|
-
* @param {
|
117
|
+
* @param {Assets} currentAssets assets list
|
118
|
+
* @param {Assets} oldAssets old assets list
|
95
119
|
* @returns {Set<string>} diff
|
96
120
|
*/
|
97
121
|
const getDiffToOldAssets = (currentAssets, oldAssets) => {
|
98
122
|
const diff = new Set();
|
99
|
-
|
123
|
+
const now = Date.now();
|
124
|
+
for (const [asset, ts] of oldAssets) {
|
125
|
+
if (ts >= now) continue;
|
100
126
|
if (!currentAssets.has(asset)) diff.add(asset);
|
101
127
|
}
|
102
128
|
return diff;
|
103
129
|
};
|
104
130
|
|
131
|
+
/**
|
132
|
+
* @param {OutputFileSystem} fs filesystem
|
133
|
+
* @param {string} filename path to file
|
134
|
+
* @param {StatsCallback} callback callback for provided filename
|
135
|
+
* @returns {void}
|
136
|
+
*/
|
137
|
+
const doStat = (fs, filename, callback) => {
|
138
|
+
if ("lstat" in fs) {
|
139
|
+
/** @type {NonNullable<OutputFileSystem["lstat"]>} */
|
140
|
+
(fs.lstat)(filename, callback);
|
141
|
+
} else {
|
142
|
+
fs.stat(filename, callback);
|
143
|
+
}
|
144
|
+
};
|
145
|
+
|
105
146
|
/**
|
106
147
|
* @param {OutputFileSystem} fs filesystem
|
107
148
|
* @param {string} outputPath output path
|
@@ -109,10 +150,13 @@ const getDiffToOldAssets = (currentAssets, oldAssets) => {
|
|
109
150
|
* @param {Logger} logger logger
|
110
151
|
* @param {Set<string>} diff filenames of the assets that shouldn't be there
|
111
152
|
* @param {function(string): boolean} isKept check if the entry is ignored
|
112
|
-
* @param {function(Error=): void} callback callback
|
153
|
+
* @param {function(Error=, Assets=): void} callback callback
|
113
154
|
* @returns {void}
|
114
155
|
*/
|
115
156
|
const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
157
|
+
/**
|
158
|
+
* @param {string} msg message
|
159
|
+
*/
|
116
160
|
const log = msg => {
|
117
161
|
if (dry) {
|
118
162
|
logger.info(msg);
|
@@ -122,15 +166,21 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
|
122
166
|
};
|
123
167
|
/** @typedef {{ type: "check" | "unlink" | "rmdir", filename: string, parent: { remaining: number, job: Job } | undefined }} Job */
|
124
168
|
/** @type {Job[]} */
|
125
|
-
const jobs = Array.from(diff, filename => ({
|
169
|
+
const jobs = Array.from(diff.keys(), filename => ({
|
126
170
|
type: "check",
|
127
171
|
filename,
|
128
172
|
parent: undefined
|
129
173
|
}));
|
174
|
+
/** @type {Assets} */
|
175
|
+
const keptAssets = new Map();
|
130
176
|
processAsyncTree(
|
131
177
|
jobs,
|
132
178
|
10,
|
133
179
|
({ type, filename, parent }, push, callback) => {
|
180
|
+
/**
|
181
|
+
* @param {Error & { code?: string }} err error
|
182
|
+
* @returns {void}
|
183
|
+
*/
|
134
184
|
const handleError = err => {
|
135
185
|
if (err.code === "ENOENT") {
|
136
186
|
log(`${filename} was removed during cleaning by something else`);
|
@@ -146,13 +196,14 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
|
146
196
|
switch (type) {
|
147
197
|
case "check":
|
148
198
|
if (isKept(filename)) {
|
199
|
+
keptAssets.set(filename, 0);
|
149
200
|
// do not decrement parent entry as we don't want to delete the parent
|
150
201
|
log(`${filename} will be kept`);
|
151
202
|
return process.nextTick(callback);
|
152
203
|
}
|
153
|
-
fs
|
204
|
+
doStat(fs, path, (err, stats) => {
|
154
205
|
if (err) return handleError(err);
|
155
|
-
if (!stats.isDirectory()) {
|
206
|
+
if (!(/** @type {IStats} */ (stats).isDirectory())) {
|
156
207
|
push({
|
157
208
|
type: "unlink",
|
158
209
|
filename,
|
@@ -160,7 +211,9 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
|
160
211
|
});
|
161
212
|
return callback();
|
162
213
|
}
|
163
|
-
|
214
|
+
|
215
|
+
/** @type {NonNullable<OutputFileSystem["readdir"]>} */
|
216
|
+
(fs.readdir)(path, (err, _entries) => {
|
164
217
|
if (err) return handleError(err);
|
165
218
|
/** @type {Job} */
|
166
219
|
const deleteJob = {
|
@@ -168,6 +221,7 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
|
168
221
|
filename,
|
169
222
|
parent
|
170
223
|
};
|
224
|
+
const entries = /** @type {string[]} */ (_entries);
|
171
225
|
if (entries.length === 0) {
|
172
226
|
push(deleteJob);
|
173
227
|
} else {
|
@@ -232,7 +286,10 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
|
|
232
286
|
break;
|
233
287
|
}
|
234
288
|
},
|
235
|
-
|
289
|
+
err => {
|
290
|
+
if (err) return callback(err);
|
291
|
+
callback(undefined, keptAssets);
|
292
|
+
}
|
236
293
|
);
|
237
294
|
};
|
238
295
|
|
@@ -275,18 +332,20 @@ class CleanPlugin {
|
|
275
332
|
apply(compiler) {
|
276
333
|
const { dry, keep } = this.options;
|
277
334
|
|
335
|
+
/** @type {KeepFn} */
|
278
336
|
const keepFn =
|
279
337
|
typeof keep === "function"
|
280
338
|
? keep
|
281
339
|
: typeof keep === "string"
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
340
|
+
? path => path.startsWith(keep)
|
341
|
+
: typeof keep === "object" && keep.test
|
342
|
+
? path => keep.test(path)
|
343
|
+
: () => false;
|
286
344
|
|
287
345
|
// We assume that no external modification happens while the compiler is active
|
288
346
|
// So we can store the old assets and only diff to them to avoid fs access on
|
289
347
|
// incremental builds
|
348
|
+
/** @type {undefined|Assets} */
|
290
349
|
let oldAssets;
|
291
350
|
|
292
351
|
compiler.hooks.emit.tapAsync(
|
@@ -297,7 +356,7 @@ class CleanPlugin {
|
|
297
356
|
(compilation, callback) => {
|
298
357
|
const hooks = CleanPlugin.getCompilationHooks(compilation);
|
299
358
|
const logger = compilation.getLogger("webpack.CleanPlugin");
|
300
|
-
const fs = compiler.outputFileSystem;
|
359
|
+
const fs = /** @type {OutputFileSystem} */ (compiler.outputFileSystem);
|
301
360
|
|
302
361
|
if (!fs.readdir) {
|
303
362
|
return callback(
|
@@ -307,7 +366,9 @@ class CleanPlugin {
|
|
307
366
|
);
|
308
367
|
}
|
309
368
|
|
310
|
-
|
369
|
+
/** @type {Assets} */
|
370
|
+
const currentAssets = new Map();
|
371
|
+
const now = Date.now();
|
311
372
|
for (const asset of Object.keys(compilation.assets)) {
|
312
373
|
if (/^[A-Za-z]:\\|^\/|^\\\\/.test(asset)) continue;
|
313
374
|
let normalizedAsset;
|
@@ -320,30 +381,54 @@ class CleanPlugin {
|
|
320
381
|
);
|
321
382
|
} while (newNormalizedAsset !== normalizedAsset);
|
322
383
|
if (normalizedAsset.startsWith("../")) continue;
|
323
|
-
|
384
|
+
const assetInfo = compilation.assetsInfo.get(asset);
|
385
|
+
if (assetInfo && assetInfo.hotModuleReplacement) {
|
386
|
+
currentAssets.set(normalizedAsset, now + _10sec);
|
387
|
+
} else {
|
388
|
+
currentAssets.set(normalizedAsset, 0);
|
389
|
+
}
|
324
390
|
}
|
325
391
|
|
326
392
|
const outputPath = compilation.getPath(compiler.outputPath, {});
|
327
393
|
|
394
|
+
/**
|
395
|
+
* @param {string} path path
|
396
|
+
* @returns {boolean} true, if needs to be kept
|
397
|
+
*/
|
328
398
|
const isKept = path => {
|
329
399
|
const result = hooks.keep.call(path);
|
330
400
|
if (result !== undefined) return result;
|
331
401
|
return keepFn(path);
|
332
402
|
};
|
333
403
|
|
404
|
+
/**
|
405
|
+
* @param {(Error | null)=} err err
|
406
|
+
* @param {Set<string>=} diff diff
|
407
|
+
*/
|
334
408
|
const diffCallback = (err, diff) => {
|
335
409
|
if (err) {
|
336
410
|
oldAssets = undefined;
|
337
|
-
|
411
|
+
callback(err);
|
412
|
+
return;
|
338
413
|
}
|
339
|
-
applyDiff(
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
414
|
+
applyDiff(
|
415
|
+
fs,
|
416
|
+
outputPath,
|
417
|
+
dry,
|
418
|
+
logger,
|
419
|
+
/** @type {Set<string>} */ (diff),
|
420
|
+
isKept,
|
421
|
+
(err, keptAssets) => {
|
422
|
+
if (err) {
|
423
|
+
oldAssets = undefined;
|
424
|
+
} else {
|
425
|
+
if (oldAssets) mergeAssets(currentAssets, oldAssets);
|
426
|
+
oldAssets = currentAssets;
|
427
|
+
if (keptAssets) mergeAssets(oldAssets, keptAssets);
|
428
|
+
}
|
429
|
+
callback(err);
|
344
430
|
}
|
345
|
-
|
346
|
-
});
|
431
|
+
);
|
347
432
|
};
|
348
433
|
|
349
434
|
if (oldAssets) {
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
-
const {
|
8
|
+
const { getOrInsert } = require("./util/MapHelpers");
|
9
9
|
const { first } = require("./util/SetHelpers");
|
10
10
|
const createHash = require("./util/createHash");
|
11
11
|
const { runtimeToString, RuntimeSpecMap } = require("./util/runtime");
|
@@ -42,7 +42,9 @@ class CodeGenerationResults {
|
|
42
42
|
);
|
43
43
|
}
|
44
44
|
if (runtime === undefined) {
|
45
|
-
if (
|
45
|
+
if (
|
46
|
+
/** @type {RuntimeSpecMap<CodeGenerationResult>} */ (entry).size > 1
|
47
|
+
) {
|
46
48
|
const results = new Set(entry.values());
|
47
49
|
if (results.size !== 1) {
|
48
50
|
throw new Error(
|
@@ -53,9 +55,9 @@ class CodeGenerationResults {
|
|
53
55
|
Caller might not support runtime-dependent code generation (opt-out via optimization.usedExports: "global").`
|
54
56
|
);
|
55
57
|
}
|
56
|
-
return first(results);
|
58
|
+
return /** @type {CodeGenerationResult} */ (first(results));
|
57
59
|
}
|
58
|
-
return entry.values().next().value;
|
60
|
+
return /** @type {CodeGenerationResult} */ (entry.values().next().value);
|
59
61
|
}
|
60
62
|
const result = entry.get(runtime);
|
61
63
|
if (result === undefined) {
|
@@ -86,9 +88,8 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
|
|
86
88
|
} else if (entry.size > 1) {
|
87
89
|
const results = new Set(entry.values());
|
88
90
|
return results.size === 1;
|
89
|
-
} else {
|
90
|
-
return entry.size === 1;
|
91
91
|
}
|
92
|
+
return entry.size === 1;
|
92
93
|
}
|
93
94
|
|
94
95
|
/**
|
@@ -147,7 +148,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
|
|
147
148
|
* @returns {void}
|
148
149
|
*/
|
149
150
|
add(module, runtime, result) {
|
150
|
-
const map =
|
151
|
+
const map = getOrInsert(this.map, module, () => new RuntimeSpecMap());
|
151
152
|
map.set(runtime, result);
|
152
153
|
}
|
153
154
|
}
|