webpack 5.97.1 → 5.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const { SyncBailHook } = require("tapable");
|
|
9
|
-
const {
|
|
9
|
+
const { CachedSource, CompatSource, RawSource } = require("webpack-sources");
|
|
10
10
|
const Compilation = require("../Compilation");
|
|
11
11
|
const WebpackError = require("../WebpackError");
|
|
12
12
|
const { compareSelect, compareStrings } = require("../util/comparators");
|
|
13
13
|
const createHash = require("../util/createHash");
|
|
14
14
|
|
|
15
|
+
/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
|
|
16
|
+
/** @typedef {import("../../declarations/WebpackOptions").HashDigest} HashDigest */
|
|
15
17
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
16
18
|
/** @typedef {import("../Cache").Etag} Etag */
|
|
17
19
|
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
|
|
@@ -38,7 +40,7 @@ const addToList = (itemOrItems, list) => {
|
|
|
38
40
|
/**
|
|
39
41
|
* @template T
|
|
40
42
|
* @param {T[]} input list
|
|
41
|
-
* @param {
|
|
43
|
+
* @param {(item: T) => Buffer} fn map function
|
|
42
44
|
* @returns {Buffer[]} buffers without duplicates
|
|
43
45
|
*/
|
|
44
46
|
const mapAndDeduplicateBuffers = (input, fn) => {
|
|
@@ -61,7 +63,7 @@ const mapAndDeduplicateBuffers = (input, fn) => {
|
|
|
61
63
|
* @param {string} str String to quote
|
|
62
64
|
* @returns {string} Escaped string
|
|
63
65
|
*/
|
|
64
|
-
const quoteMeta = str => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
|
|
66
|
+
const quoteMeta = (str) => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
|
|
65
67
|
|
|
66
68
|
const cachedSourceMap = new WeakMap();
|
|
67
69
|
|
|
@@ -69,7 +71,7 @@ const cachedSourceMap = new WeakMap();
|
|
|
69
71
|
* @param {Source} source source
|
|
70
72
|
* @returns {CachedSource} cached source
|
|
71
73
|
*/
|
|
72
|
-
const toCachedSource = source => {
|
|
74
|
+
const toCachedSource = (source) => {
|
|
73
75
|
if (source instanceof CachedSource) {
|
|
74
76
|
return source;
|
|
75
77
|
}
|
|
@@ -107,6 +109,14 @@ const toCachedSource = source => {
|
|
|
107
109
|
/** @type {WeakMap<Compilation, CompilationHooks>} */
|
|
108
110
|
const compilationHooksMap = new WeakMap();
|
|
109
111
|
|
|
112
|
+
/**
|
|
113
|
+
* @typedef {object} RealContentHashPluginOptions
|
|
114
|
+
* @property {HashFunction} hashFunction the hash function to use
|
|
115
|
+
* @property {HashDigest} hashDigest the hash digest to use
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
const PLUGIN_NAME = "RealContentHashPlugin";
|
|
119
|
+
|
|
110
120
|
class RealContentHashPlugin {
|
|
111
121
|
/**
|
|
112
122
|
* @param {Compilation} compilation the compilation
|
|
@@ -129,9 +139,7 @@ class RealContentHashPlugin {
|
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
/**
|
|
132
|
-
* @param {
|
|
133
|
-
* @param {string | Hash} options.hashFunction the hash function to use
|
|
134
|
-
* @param {string} options.hashDigest the hash digest to use
|
|
142
|
+
* @param {RealContentHashPluginOptions} options options
|
|
135
143
|
*/
|
|
136
144
|
constructor({ hashFunction, hashDigest }) {
|
|
137
145
|
this._hashFunction = hashFunction;
|
|
@@ -144,7 +152,7 @@ class RealContentHashPlugin {
|
|
|
144
152
|
* @returns {void}
|
|
145
153
|
*/
|
|
146
154
|
apply(compiler) {
|
|
147
|
-
compiler.hooks.compilation.tap(
|
|
155
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
148
156
|
const cacheAnalyse = compilation.getCache(
|
|
149
157
|
"RealContentHashPlugin|analyse"
|
|
150
158
|
);
|
|
@@ -154,7 +162,7 @@ class RealContentHashPlugin {
|
|
|
154
162
|
const hooks = RealContentHashPlugin.getCompilationHooks(compilation);
|
|
155
163
|
compilation.hooks.processAssets.tapPromise(
|
|
156
164
|
{
|
|
157
|
-
name:
|
|
165
|
+
name: PLUGIN_NAME,
|
|
158
166
|
stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH
|
|
159
167
|
},
|
|
160
168
|
async () => {
|
|
@@ -199,7 +207,7 @@ class RealContentHashPlugin {
|
|
|
199
207
|
"g"
|
|
200
208
|
);
|
|
201
209
|
await Promise.all(
|
|
202
|
-
assetsWithInfo.map(async asset => {
|
|
210
|
+
assetsWithInfo.map(async (asset) => {
|
|
203
211
|
const { name, source, content, hashes } = asset;
|
|
204
212
|
if (Buffer.isBuffer(content)) {
|
|
205
213
|
asset.referencedHashes = EMPTY_SET;
|
|
@@ -208,7 +216,7 @@ class RealContentHashPlugin {
|
|
|
208
216
|
}
|
|
209
217
|
const etag = cacheAnalyse.mergeEtags(
|
|
210
218
|
cacheAnalyse.getLazyHashedEtag(source),
|
|
211
|
-
|
|
219
|
+
[...hashes].join("|")
|
|
212
220
|
);
|
|
213
221
|
[asset.referencedHashes, asset.ownHashes] =
|
|
214
222
|
await cacheAnalyse.providePromise(name, etag, () => {
|
|
@@ -232,10 +240,10 @@ class RealContentHashPlugin {
|
|
|
232
240
|
* @param {string} hash the hash
|
|
233
241
|
* @returns {undefined | ReferencedHashes} the referenced hashes
|
|
234
242
|
*/
|
|
235
|
-
const getDependencies = hash => {
|
|
243
|
+
const getDependencies = (hash) => {
|
|
236
244
|
const assets = hashToAssets.get(hash);
|
|
237
245
|
if (!assets) {
|
|
238
|
-
const referencingAssets = assetsWithInfo.filter(asset =>
|
|
246
|
+
const referencingAssets = assetsWithInfo.filter((asset) =>
|
|
239
247
|
/** @type {ReferencedHashes} */ (asset.referencedHashes).has(
|
|
240
248
|
hash
|
|
241
249
|
)
|
|
@@ -246,7 +254,7 @@ An asset was cached with a reference to another asset (${hash}) that's not in th
|
|
|
246
254
|
Either the asset was incorrectly cached, or the referenced asset should also be restored from cache.
|
|
247
255
|
Referenced by:
|
|
248
256
|
${referencingAssets
|
|
249
|
-
.map(a => {
|
|
257
|
+
.map((a) => {
|
|
250
258
|
const match = new RegExp(`.{0,20}${quoteMeta(hash)}.{0,20}`).exec(
|
|
251
259
|
a.content
|
|
252
260
|
);
|
|
@@ -275,13 +283,14 @@ ${referencingAssets
|
|
|
275
283
|
* @param {string} hash the hash
|
|
276
284
|
* @returns {string} the hash info
|
|
277
285
|
*/
|
|
278
|
-
const hashInfo = hash => {
|
|
286
|
+
const hashInfo = (hash) => {
|
|
279
287
|
const assets = hashToAssets.get(hash);
|
|
280
288
|
return `${hash} (${Array.from(
|
|
281
289
|
/** @type {AssetInfoForRealContentHash[]} */ (assets),
|
|
282
|
-
a => a.name
|
|
290
|
+
(a) => a.name
|
|
283
291
|
)})`;
|
|
284
292
|
};
|
|
293
|
+
/** @type {Set<string>} */
|
|
285
294
|
const hashesInOrder = new Set();
|
|
286
295
|
for (const hash of hashToAssets.keys()) {
|
|
287
296
|
/**
|
|
@@ -310,32 +319,32 @@ ${referencingAssets
|
|
|
310
319
|
if (hashesInOrder.has(hash)) continue;
|
|
311
320
|
add(hash, new Set());
|
|
312
321
|
}
|
|
322
|
+
/** @type {Map<string, string>} */
|
|
313
323
|
const hashToNewHash = new Map();
|
|
314
324
|
/**
|
|
315
325
|
* @param {AssetInfoForRealContentHash} asset asset info
|
|
316
326
|
* @returns {Etag} etag
|
|
317
327
|
*/
|
|
318
|
-
const getEtag = asset =>
|
|
328
|
+
const getEtag = (asset) =>
|
|
319
329
|
cacheGenerate.mergeEtags(
|
|
320
330
|
cacheGenerate.getLazyHashedEtag(asset.source),
|
|
321
331
|
Array.from(
|
|
322
332
|
/** @type {ReferencedHashes} */ (asset.referencedHashes),
|
|
323
|
-
hash => hashToNewHash.get(hash)
|
|
333
|
+
(hash) => hashToNewHash.get(hash)
|
|
324
334
|
).join("|")
|
|
325
335
|
);
|
|
326
336
|
/**
|
|
327
337
|
* @param {AssetInfoForRealContentHash} asset asset info
|
|
328
338
|
* @returns {Promise<void>}
|
|
329
339
|
*/
|
|
330
|
-
const computeNewContent = asset => {
|
|
340
|
+
const computeNewContent = (asset) => {
|
|
331
341
|
if (asset.contentComputePromise) return asset.contentComputePromise;
|
|
332
342
|
return (asset.contentComputePromise = (async () => {
|
|
333
343
|
if (
|
|
334
344
|
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
).some(hash => hashToNewHash.get(hash) !== hash)
|
|
345
|
+
[
|
|
346
|
+
.../** @type {ReferencedHashes} */ (asset.referencedHashes)
|
|
347
|
+
].some((hash) => hashToNewHash.get(hash) !== hash)
|
|
339
348
|
) {
|
|
340
349
|
const identifier = asset.name;
|
|
341
350
|
const etag = getEtag(asset);
|
|
@@ -343,8 +352,9 @@ ${referencingAssets
|
|
|
343
352
|
identifier,
|
|
344
353
|
etag,
|
|
345
354
|
() => {
|
|
346
|
-
const newContent = asset.content.replace(
|
|
347
|
-
|
|
355
|
+
const newContent = asset.content.replace(
|
|
356
|
+
hashRegExp,
|
|
357
|
+
(hash) => /** @type {string} */ (hashToNewHash.get(hash))
|
|
348
358
|
);
|
|
349
359
|
return new RawSource(newContent);
|
|
350
360
|
}
|
|
@@ -356,16 +366,16 @@ ${referencingAssets
|
|
|
356
366
|
* @param {AssetInfoForRealContentHash} asset asset info
|
|
357
367
|
* @returns {Promise<void>}
|
|
358
368
|
*/
|
|
359
|
-
const computeNewContentWithoutOwn = asset => {
|
|
360
|
-
if (asset.contentComputeWithoutOwnPromise)
|
|
369
|
+
const computeNewContentWithoutOwn = (asset) => {
|
|
370
|
+
if (asset.contentComputeWithoutOwnPromise) {
|
|
361
371
|
return asset.contentComputeWithoutOwnPromise;
|
|
372
|
+
}
|
|
362
373
|
return (asset.contentComputeWithoutOwnPromise = (async () => {
|
|
363
374
|
if (
|
|
364
375
|
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
).some(hash => hashToNewHash.get(hash) !== hash)
|
|
376
|
+
[
|
|
377
|
+
.../** @type {ReferencedHashes} */ (asset.referencedHashes)
|
|
378
|
+
].some((hash) => hashToNewHash.get(hash) !== hash)
|
|
369
379
|
) {
|
|
370
380
|
const identifier = `${asset.name}|without-own`;
|
|
371
381
|
const etag = getEtag(asset);
|
|
@@ -375,13 +385,14 @@ ${referencingAssets
|
|
|
375
385
|
() => {
|
|
376
386
|
const newContent = asset.content.replace(
|
|
377
387
|
hashRegExp,
|
|
378
|
-
hash => {
|
|
388
|
+
(hash) => {
|
|
379
389
|
if (
|
|
380
|
-
/** @type {OwnHashes} */
|
|
390
|
+
/** @type {OwnHashes} */
|
|
391
|
+
(asset.ownHashes).has(hash)
|
|
381
392
|
) {
|
|
382
393
|
return "";
|
|
383
394
|
}
|
|
384
|
-
return hashToNewHash.get(hash);
|
|
395
|
+
return /** @type {string} */ (hashToNewHash.get(hash));
|
|
385
396
|
}
|
|
386
397
|
);
|
|
387
398
|
return new RawSource(newContent);
|
|
@@ -390,20 +401,20 @@ ${referencingAssets
|
|
|
390
401
|
}
|
|
391
402
|
})());
|
|
392
403
|
};
|
|
393
|
-
const comparator = compareSelect(a => a.name, compareStrings);
|
|
404
|
+
const comparator = compareSelect((a) => a.name, compareStrings);
|
|
394
405
|
for (const oldHash of hashesInOrder) {
|
|
395
406
|
const assets =
|
|
396
407
|
/** @type {AssetInfoForRealContentHash[]} */
|
|
397
408
|
(hashToAssets.get(oldHash));
|
|
398
409
|
assets.sort(comparator);
|
|
399
410
|
await Promise.all(
|
|
400
|
-
assets.map(asset =>
|
|
411
|
+
assets.map((asset) =>
|
|
401
412
|
/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)
|
|
402
413
|
? computeNewContentWithoutOwn(asset)
|
|
403
414
|
: computeNewContent(asset)
|
|
404
415
|
)
|
|
405
416
|
);
|
|
406
|
-
const assetsContent = mapAndDeduplicateBuffers(assets, asset => {
|
|
417
|
+
const assetsContent = mapAndDeduplicateBuffers(assets, (asset) => {
|
|
407
418
|
if (/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)) {
|
|
408
419
|
return asset.newSourceWithoutOwn
|
|
409
420
|
? asset.newSourceWithoutOwn.buffer()
|
|
@@ -423,22 +434,25 @@ ${referencingAssets
|
|
|
423
434
|
hash.update(content);
|
|
424
435
|
}
|
|
425
436
|
const digest = hash.digest(this._hashDigest);
|
|
426
|
-
newHash =
|
|
437
|
+
newHash = digest.slice(0, oldHash.length);
|
|
427
438
|
}
|
|
428
439
|
hashToNewHash.set(oldHash, newHash);
|
|
429
440
|
}
|
|
430
441
|
await Promise.all(
|
|
431
|
-
assetsWithInfo.map(async asset => {
|
|
442
|
+
assetsWithInfo.map(async (asset) => {
|
|
432
443
|
await computeNewContent(asset);
|
|
433
|
-
const newName = asset.name.replace(
|
|
434
|
-
|
|
444
|
+
const newName = asset.name.replace(
|
|
445
|
+
hashRegExp,
|
|
446
|
+
(hash) => /** @type {string} */ (hashToNewHash.get(hash))
|
|
435
447
|
);
|
|
436
448
|
|
|
437
449
|
const infoUpdate = {};
|
|
438
|
-
const hash = asset.info.contenthash;
|
|
450
|
+
const hash = /** @type {string} */ (asset.info.contenthash);
|
|
439
451
|
infoUpdate.contenthash = Array.isArray(hash)
|
|
440
|
-
? hash.map(
|
|
441
|
-
|
|
452
|
+
? hash.map(
|
|
453
|
+
(hash) => /** @type {string} */ (hashToNewHash.get(hash))
|
|
454
|
+
)
|
|
455
|
+
: /** @type {string} */ (hashToNewHash.get(hash));
|
|
442
456
|
|
|
443
457
|
if (asset.newSource !== undefined) {
|
|
444
458
|
compilation.updateAsset(
|
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const {
|
|
8
|
+
const { STAGE_ADVANCED, STAGE_BASIC } = require("../OptimizationStages");
|
|
9
9
|
|
|
10
10
|
/** @typedef {import("../Chunk")} Chunk */
|
|
11
11
|
/** @typedef {import("../Compiler")} Compiler */
|
|
12
12
|
|
|
13
|
+
const PLUGIN_NAME = "RemoveEmptyChunksPlugin";
|
|
14
|
+
|
|
13
15
|
class RemoveEmptyChunksPlugin {
|
|
14
16
|
/**
|
|
15
17
|
* Apply the plugin
|
|
@@ -17,12 +19,12 @@ class RemoveEmptyChunksPlugin {
|
|
|
17
19
|
* @returns {void}
|
|
18
20
|
*/
|
|
19
21
|
apply(compiler) {
|
|
20
|
-
compiler.hooks.compilation.tap(
|
|
22
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
21
23
|
/**
|
|
22
24
|
* @param {Iterable<Chunk>} chunks the chunks array
|
|
23
25
|
* @returns {void}
|
|
24
26
|
*/
|
|
25
|
-
const handler = chunks => {
|
|
27
|
+
const handler = (chunks) => {
|
|
26
28
|
const chunkGraph = compilation.chunkGraph;
|
|
27
29
|
for (const chunk of chunks) {
|
|
28
30
|
if (
|
|
@@ -39,14 +41,14 @@ class RemoveEmptyChunksPlugin {
|
|
|
39
41
|
// TODO do it once
|
|
40
42
|
compilation.hooks.optimizeChunks.tap(
|
|
41
43
|
{
|
|
42
|
-
name:
|
|
44
|
+
name: PLUGIN_NAME,
|
|
43
45
|
stage: STAGE_BASIC
|
|
44
46
|
},
|
|
45
47
|
handler
|
|
46
48
|
);
|
|
47
49
|
compilation.hooks.optimizeChunks.tap(
|
|
48
50
|
{
|
|
49
|
-
name:
|
|
51
|
+
name: PLUGIN_NAME,
|
|
50
52
|
stage: STAGE_ADVANCED
|
|
51
53
|
},
|
|
52
54
|
handler
|
|
@@ -54,4 +56,5 @@ class RemoveEmptyChunksPlugin {
|
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
}
|
|
59
|
+
|
|
57
60
|
module.exports = RemoveEmptyChunksPlugin;
|
|
@@ -59,13 +59,15 @@ function* getModulesFromMask(mask, ordinalModules) {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
const PLUGIN_NAME = "RemoveParentModulesPlugin";
|
|
63
|
+
|
|
62
64
|
class RemoveParentModulesPlugin {
|
|
63
65
|
/**
|
|
64
66
|
* @param {Compiler} compiler the compiler
|
|
65
67
|
* @returns {void}
|
|
66
68
|
*/
|
|
67
69
|
apply(compiler) {
|
|
68
|
-
compiler.hooks.compilation.tap(
|
|
70
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
69
71
|
/**
|
|
70
72
|
* @param {Iterable<Chunk>} chunks the chunks
|
|
71
73
|
* @param {ChunkGroup[]} chunkGroups the chunk groups
|
|
@@ -85,7 +87,7 @@ class RemoveParentModulesPlugin {
|
|
|
85
87
|
* @param {Module} mod the module to get the mask for
|
|
86
88
|
* @returns {bigint} the module mask to uniquely identify the module
|
|
87
89
|
*/
|
|
88
|
-
const getOrCreateModuleMask = mod => {
|
|
90
|
+
const getOrCreateModuleMask = (mod) => {
|
|
89
91
|
let id = maskByModule.get(mod);
|
|
90
92
|
if (id === undefined) {
|
|
91
93
|
id = nextModuleMask;
|
|
@@ -175,7 +177,7 @@ class RemoveParentModulesPlugin {
|
|
|
175
177
|
|
|
176
178
|
const availableModulesSets = Array.from(
|
|
177
179
|
chunk.groupsIterable,
|
|
178
|
-
chunkGroup => availableModulesMap.get(chunkGroup)
|
|
180
|
+
(chunkGroup) => availableModulesMap.get(chunkGroup)
|
|
179
181
|
);
|
|
180
182
|
if (availableModulesSets.includes(undefined)) continue; // No info about this chunk group
|
|
181
183
|
|
|
@@ -193,7 +195,7 @@ class RemoveParentModulesPlugin {
|
|
|
193
195
|
};
|
|
194
196
|
compilation.hooks.optimizeChunks.tap(
|
|
195
197
|
{
|
|
196
|
-
name:
|
|
198
|
+
name: PLUGIN_NAME,
|
|
197
199
|
stage: STAGE_BASIC
|
|
198
200
|
},
|
|
199
201
|
handler
|
|
@@ -201,4 +203,5 @@ class RemoveParentModulesPlugin {
|
|
|
201
203
|
});
|
|
202
204
|
}
|
|
203
205
|
}
|
|
206
|
+
|
|
204
207
|
module.exports = RemoveParentModulesPlugin;
|
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
|
|
8
8
|
/** @typedef {import("../Compilation").EntryData} EntryData */
|
|
9
9
|
/** @typedef {import("../Compiler")} Compiler */
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
const PLUGIN_NAME = "RuntimeChunkPlugin";
|
|
12
|
+
|
|
13
|
+
/** @typedef {(entrypoint: { name: string }) => string} RuntimeChunkFunction */
|
|
11
14
|
|
|
12
15
|
class RuntimeChunkPlugin {
|
|
13
16
|
/**
|
|
14
|
-
* @param {{ name?:
|
|
17
|
+
* @param {{ name?: RuntimeChunkFunction }=} options options
|
|
15
18
|
*/
|
|
16
19
|
constructor(options) {
|
|
17
20
|
this.options = {
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
* @returns {string} runtime chunk name
|
|
21
|
-
*/
|
|
22
|
-
name: entrypoint => `runtime~${entrypoint.name}`,
|
|
21
|
+
/** @type {RuntimeChunkFunction} */
|
|
22
|
+
name: (entrypoint) => `runtime~${entrypoint.name}`,
|
|
23
23
|
...options
|
|
24
24
|
};
|
|
25
25
|
}
|
|
@@ -30,26 +30,23 @@ class RuntimeChunkPlugin {
|
|
|
30
30
|
* @returns {void}
|
|
31
31
|
*/
|
|
32
32
|
apply(compiler) {
|
|
33
|
-
compiler.hooks.thisCompilation.tap(
|
|
34
|
-
compilation.hooks.addEntry.tap(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (typeof name === "function") {
|
|
47
|
-
name = name({ name: entryName });
|
|
48
|
-
}
|
|
49
|
-
data.options.runtime = name;
|
|
33
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
34
|
+
compilation.hooks.addEntry.tap(PLUGIN_NAME, (_, { name: entryName }) => {
|
|
35
|
+
if (entryName === undefined) return;
|
|
36
|
+
const data =
|
|
37
|
+
/** @type {EntryData} */
|
|
38
|
+
(compilation.entries.get(entryName));
|
|
39
|
+
if (data.options.runtime === undefined && !data.options.dependOn) {
|
|
40
|
+
// Determine runtime chunk name
|
|
41
|
+
let name =
|
|
42
|
+
/** @type {string | RuntimeChunkFunction} */
|
|
43
|
+
(this.options.name);
|
|
44
|
+
if (typeof name === "function") {
|
|
45
|
+
name = name({ name: entryName });
|
|
50
46
|
}
|
|
47
|
+
data.options.runtime = name;
|
|
51
48
|
}
|
|
52
|
-
);
|
|
49
|
+
});
|
|
53
50
|
});
|
|
54
51
|
}
|
|
55
52
|
}
|
|
@@ -8,18 +8,19 @@
|
|
|
8
8
|
const glob2regexp = require("glob-to-regexp");
|
|
9
9
|
const {
|
|
10
10
|
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
12
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
|
13
13
|
} = require("../ModuleTypeConstants");
|
|
14
14
|
const { STAGE_DEFAULT } = require("../OptimizationStages");
|
|
15
15
|
const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
|
|
16
16
|
const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
|
|
17
17
|
const formatLocation = require("../formatLocation");
|
|
18
18
|
|
|
19
|
+
/** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
|
|
20
|
+
/** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
|
|
19
21
|
/** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
|
|
20
22
|
/** @typedef {import("estree").Statement} Statement */
|
|
21
23
|
/** @typedef {import("../Compiler")} Compiler */
|
|
22
|
-
/** @typedef {import("../Dependency")} Dependency */
|
|
23
24
|
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
24
25
|
/** @typedef {import("../Module")} Module */
|
|
25
26
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
@@ -35,20 +36,16 @@ const formatLocation = require("../formatLocation");
|
|
|
35
36
|
* @property {boolean} checked if the export is conditional
|
|
36
37
|
*/
|
|
37
38
|
|
|
38
|
-
/**
|
|
39
|
-
* @typedef {object} ReexportInfo
|
|
40
|
-
* @property {Map<string, ExportInModule[]>} static
|
|
41
|
-
* @property {Map<Module, Set<string>>} dynamic
|
|
42
|
-
*/
|
|
39
|
+
/** @typedef {string | boolean | string[] | undefined} SideEffectsFlagValue */
|
|
43
40
|
|
|
44
41
|
/** @typedef {Map<string, RegExp>} CacheItem */
|
|
45
42
|
|
|
46
|
-
/** @type {WeakMap<
|
|
43
|
+
/** @type {WeakMap<Compiler, CacheItem>} */
|
|
47
44
|
const globToRegexpCache = new WeakMap();
|
|
48
45
|
|
|
49
46
|
/**
|
|
50
47
|
* @param {string} glob the pattern
|
|
51
|
-
* @param {
|
|
48
|
+
* @param {CacheItem} cache the glob to RegExp cache
|
|
52
49
|
* @returns {RegExp} a regular expression
|
|
53
50
|
*/
|
|
54
51
|
const globToRegexp = (glob, cache) => {
|
|
@@ -103,7 +100,7 @@ class SideEffectsFlagPlugin {
|
|
|
103
100
|
}
|
|
104
101
|
const hasSideEffects = SideEffectsFlagPlugin.moduleHasSideEffects(
|
|
105
102
|
resolveData.relativePath,
|
|
106
|
-
sideEffects,
|
|
103
|
+
/** @type {SideEffectsFlagValue} */ (sideEffects),
|
|
107
104
|
/** @type {CacheItem} */ (cache)
|
|
108
105
|
);
|
|
109
106
|
module.factoryMeta.sideEffectFree = !hasSideEffects;
|
|
@@ -127,15 +124,15 @@ class SideEffectsFlagPlugin {
|
|
|
127
124
|
* @param {JavascriptParser} parser the parser
|
|
128
125
|
* @returns {void}
|
|
129
126
|
*/
|
|
130
|
-
const parserHandler = parser => {
|
|
131
|
-
/** @type {undefined | Statement | ModuleDeclaration} */
|
|
127
|
+
const parserHandler = (parser) => {
|
|
128
|
+
/** @type {undefined | Statement | ModuleDeclaration | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration} */
|
|
132
129
|
let sideEffectsStatement;
|
|
133
130
|
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
|
134
131
|
sideEffectsStatement = undefined;
|
|
135
132
|
});
|
|
136
133
|
parser.hooks.statement.tap(
|
|
137
134
|
{ name: PLUGIN_NAME, stage: -100 },
|
|
138
|
-
statement => {
|
|
135
|
+
(statement) => {
|
|
139
136
|
if (sideEffectsStatement) return;
|
|
140
137
|
if (parser.scope.topLevelScope !== true) return;
|
|
141
138
|
switch (statement.type) {
|
|
@@ -143,7 +140,8 @@ class SideEffectsFlagPlugin {
|
|
|
143
140
|
if (
|
|
144
141
|
!parser.isPure(
|
|
145
142
|
statement.expression,
|
|
146
|
-
/** @type {Range} */
|
|
143
|
+
/** @type {Range} */
|
|
144
|
+
(statement.range)[0]
|
|
147
145
|
)
|
|
148
146
|
) {
|
|
149
147
|
sideEffectsStatement = statement;
|
|
@@ -155,7 +153,8 @@ class SideEffectsFlagPlugin {
|
|
|
155
153
|
if (
|
|
156
154
|
!parser.isPure(
|
|
157
155
|
statement.test,
|
|
158
|
-
/** @type {Range} */
|
|
156
|
+
/** @type {Range} */
|
|
157
|
+
(statement.range)[0]
|
|
159
158
|
)
|
|
160
159
|
) {
|
|
161
160
|
sideEffectsStatement = statement;
|
|
@@ -191,7 +190,8 @@ class SideEffectsFlagPlugin {
|
|
|
191
190
|
if (
|
|
192
191
|
!parser.isPure(
|
|
193
192
|
statement.discriminant,
|
|
194
|
-
/** @type {Range} */
|
|
193
|
+
/** @type {Range} */
|
|
194
|
+
(statement.range)[0]
|
|
195
195
|
)
|
|
196
196
|
) {
|
|
197
197
|
sideEffectsStatement = statement;
|
|
@@ -214,9 +214,9 @@ class SideEffectsFlagPlugin {
|
|
|
214
214
|
case "ExportDefaultDeclaration":
|
|
215
215
|
if (
|
|
216
216
|
!parser.isPure(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
statement.declaration,
|
|
218
|
+
/** @type {Range} */
|
|
219
|
+
(statement.range)[0]
|
|
220
220
|
)
|
|
221
221
|
) {
|
|
222
222
|
sideEffectsStatement = statement;
|
|
@@ -270,7 +270,7 @@ class SideEffectsFlagPlugin {
|
|
|
270
270
|
name: PLUGIN_NAME,
|
|
271
271
|
stage: STAGE_DEFAULT
|
|
272
272
|
},
|
|
273
|
-
modules => {
|
|
273
|
+
(modules) => {
|
|
274
274
|
const logger = compilation.getLogger(
|
|
275
275
|
"webpack.SideEffectsFlagPlugin"
|
|
276
276
|
);
|
|
@@ -282,7 +282,7 @@ class SideEffectsFlagPlugin {
|
|
|
282
282
|
/**
|
|
283
283
|
* @param {Module} module module
|
|
284
284
|
*/
|
|
285
|
-
const optimizeIncomingConnections = module => {
|
|
285
|
+
const optimizeIncomingConnections = (module) => {
|
|
286
286
|
if (optimizedModules.has(module)) return;
|
|
287
287
|
optimizedModules.add(module);
|
|
288
288
|
if (module.getSideEffectsConnectionState(moduleGraph) === false) {
|
|
@@ -313,8 +313,17 @@ class SideEffectsFlagPlugin {
|
|
|
313
313
|
({ module }) =>
|
|
314
314
|
module.getSideEffectsConnectionState(moduleGraph) ===
|
|
315
315
|
false,
|
|
316
|
-
({
|
|
316
|
+
({
|
|
317
|
+
module: newModule,
|
|
318
|
+
export: exportName,
|
|
319
|
+
connection: targetConnection
|
|
320
|
+
}) => {
|
|
317
321
|
moduleGraph.updateModule(dep, newModule);
|
|
322
|
+
moduleGraph.updateParent(
|
|
323
|
+
dep,
|
|
324
|
+
targetConnection,
|
|
325
|
+
/** @type {Module} */ (connection.originModule)
|
|
326
|
+
);
|
|
318
327
|
moduleGraph.addExplanation(
|
|
319
328
|
dep,
|
|
320
329
|
"(skipped side-effect-free modules)"
|
|
@@ -346,6 +355,13 @@ class SideEffectsFlagPlugin {
|
|
|
346
355
|
if (!target) continue;
|
|
347
356
|
|
|
348
357
|
moduleGraph.updateModule(dep, target.module);
|
|
358
|
+
moduleGraph.updateParent(
|
|
359
|
+
dep,
|
|
360
|
+
/** @type {ModuleGraphConnection} */ (
|
|
361
|
+
target.connection
|
|
362
|
+
),
|
|
363
|
+
/** @type {Module} */ (connection.originModule)
|
|
364
|
+
);
|
|
349
365
|
moduleGraph.addExplanation(
|
|
350
366
|
dep,
|
|
351
367
|
"(skipped side-effect-free modules)"
|
|
@@ -365,6 +381,7 @@ class SideEffectsFlagPlugin {
|
|
|
365
381
|
for (const module of modules) {
|
|
366
382
|
optimizeIncomingConnections(module);
|
|
367
383
|
}
|
|
384
|
+
moduleGraph.finishUpdateParent();
|
|
368
385
|
logger.timeEnd("update dependencies");
|
|
369
386
|
}
|
|
370
387
|
);
|
|
@@ -374,8 +391,8 @@ class SideEffectsFlagPlugin {
|
|
|
374
391
|
|
|
375
392
|
/**
|
|
376
393
|
* @param {string} moduleName the module name
|
|
377
|
-
* @param {
|
|
378
|
-
* @param {
|
|
394
|
+
* @param {SideEffectsFlagValue} flagValue the flag value
|
|
395
|
+
* @param {CacheItem} cache cache for glob to regexp
|
|
379
396
|
* @returns {boolean | undefined} true, when the module has side effects, undefined or false when not
|
|
380
397
|
*/
|
|
381
398
|
static moduleHasSideEffects(moduleName, flagValue, cache) {
|
|
@@ -387,10 +404,11 @@ class SideEffectsFlagPlugin {
|
|
|
387
404
|
case "string":
|
|
388
405
|
return globToRegexp(flagValue, cache).test(moduleName);
|
|
389
406
|
case "object":
|
|
390
|
-
return flagValue.some(glob =>
|
|
407
|
+
return flagValue.some((glob) =>
|
|
391
408
|
SideEffectsFlagPlugin.moduleHasSideEffects(moduleName, glob, cache)
|
|
392
409
|
);
|
|
393
410
|
}
|
|
394
411
|
}
|
|
395
412
|
}
|
|
413
|
+
|
|
396
414
|
module.exports = SideEffectsFlagPlugin;
|