webpack 5.76.1 → 5.88.2
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +6 -1
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +18 -14
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +95 -47
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +25 -4
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +61 -25
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +7 -0
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/Watching.js +62 -25
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +37 -21
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +59 -22
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- 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 +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- 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 +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- 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 +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +217 -198
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +19 -5
- package/lib/library/EnableLibraryPlugin.js +4 -0
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +24 -2
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- 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 +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- 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 +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +7 -1
- package/lib/util/StringXor.js +51 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +84 -21
- package/lib/util/semver.js +2 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- 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 +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +133 -6
- 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/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1629 -683
@@ -13,11 +13,18 @@ const { compareSelect, compareStrings } = require("../util/comparators");
|
|
13
13
|
const createHash = require("../util/createHash");
|
14
14
|
|
15
15
|
/** @typedef {import("webpack-sources").Source} Source */
|
16
|
+
/** @typedef {import("../Cache").Etag} Etag */
|
16
17
|
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
|
17
18
|
/** @typedef {import("../Compiler")} Compiler */
|
19
|
+
/** @typedef {typeof import("../util/Hash")} Hash */
|
18
20
|
|
19
21
|
const EMPTY_SET = new Set();
|
20
22
|
|
23
|
+
/**
|
24
|
+
* @template T
|
25
|
+
* @param {T | T[]} itemOrItems item or items
|
26
|
+
* @param {Set<T>} list list
|
27
|
+
*/
|
21
28
|
const addToList = (itemOrItems, list) => {
|
22
29
|
if (Array.isArray(itemOrItems)) {
|
23
30
|
for (const item of itemOrItems) {
|
@@ -60,6 +67,10 @@ const quoteMeta = str => {
|
|
60
67
|
|
61
68
|
const cachedSourceMap = new WeakMap();
|
62
69
|
|
70
|
+
/**
|
71
|
+
* @param {Source} source source
|
72
|
+
* @returns {CachedSource} cached source
|
73
|
+
*/
|
63
74
|
const toCachedSource = source => {
|
64
75
|
if (source instanceof CachedSource) {
|
65
76
|
return source;
|
@@ -71,6 +82,10 @@ const toCachedSource = source => {
|
|
71
82
|
return newSource;
|
72
83
|
};
|
73
84
|
|
85
|
+
/** @typedef {Set<string>} OwnHashes */
|
86
|
+
/** @typedef {Set<string>} ReferencedHashes */
|
87
|
+
/** @typedef {Set<string>} Hashes */
|
88
|
+
|
74
89
|
/**
|
75
90
|
* @typedef {Object} AssetInfoForRealContentHash
|
76
91
|
* @property {string} name
|
@@ -79,11 +94,11 @@ const toCachedSource = source => {
|
|
79
94
|
* @property {RawSource | undefined} newSource
|
80
95
|
* @property {RawSource | undefined} newSourceWithoutOwn
|
81
96
|
* @property {string} content
|
82
|
-
* @property {
|
83
|
-
* @property {Promise} contentComputePromise
|
84
|
-
* @property {Promise} contentComputeWithoutOwnPromise
|
85
|
-
* @property {
|
86
|
-
* @property {
|
97
|
+
* @property {OwnHashes | undefined} ownHashes
|
98
|
+
* @property {Promise<void> | undefined} contentComputePromise
|
99
|
+
* @property {Promise<void> | undefined} contentComputeWithoutOwnPromise
|
100
|
+
* @property {ReferencedHashes | undefined} referencedHashes
|
101
|
+
* @property {Hashes} hashes
|
87
102
|
*/
|
88
103
|
|
89
104
|
/**
|
@@ -115,6 +130,11 @@ class RealContentHashPlugin {
|
|
115
130
|
return hooks;
|
116
131
|
}
|
117
132
|
|
133
|
+
/**
|
134
|
+
* @param {Object} options options object
|
135
|
+
* @param {string | Hash} options.hashFunction the hash function to use
|
136
|
+
* @param {string} options.hashDigest the hash digest to use
|
137
|
+
*/
|
118
138
|
constructor({ hashFunction, hashDigest }) {
|
119
139
|
this._hashFunction = hashFunction;
|
120
140
|
this._hashDigest = hashDigest;
|
@@ -143,27 +163,25 @@ class RealContentHashPlugin {
|
|
143
163
|
const assets = compilation.getAssets();
|
144
164
|
/** @type {AssetInfoForRealContentHash[]} */
|
145
165
|
const assetsWithInfo = [];
|
166
|
+
/** @type {Map<string, [AssetInfoForRealContentHash]>} */
|
146
167
|
const hashToAssets = new Map();
|
147
168
|
for (const { source, info, name } of assets) {
|
148
169
|
const cachedSource = toCachedSource(source);
|
149
|
-
const content = cachedSource.source();
|
150
|
-
/** @type {
|
170
|
+
const content = /** @type {string} */ (cachedSource.source());
|
171
|
+
/** @type {Hashes} */
|
151
172
|
const hashes = new Set();
|
152
173
|
addToList(info.contenthash, hashes);
|
174
|
+
/** @type {AssetInfoForRealContentHash} */
|
153
175
|
const data = {
|
154
176
|
name,
|
155
177
|
info,
|
156
178
|
source: cachedSource,
|
157
|
-
/** @type {RawSource | undefined} */
|
158
179
|
newSource: undefined,
|
159
|
-
/** @type {RawSource | undefined} */
|
160
180
|
newSourceWithoutOwn: undefined,
|
161
181
|
content,
|
162
|
-
/** @type {Set<string>} */
|
163
182
|
ownHashes: undefined,
|
164
183
|
contentComputePromise: undefined,
|
165
184
|
contentComputeWithoutOwnPromise: undefined,
|
166
|
-
/** @type {Set<string>} */
|
167
185
|
referencedHashes: undefined,
|
168
186
|
hashes
|
169
187
|
};
|
@@ -212,11 +230,17 @@ class RealContentHashPlugin {
|
|
212
230
|
});
|
213
231
|
})
|
214
232
|
);
|
233
|
+
/**
|
234
|
+
* @param {string} hash the hash
|
235
|
+
* @returns {undefined | ReferencedHashes} the referenced hashes
|
236
|
+
*/
|
215
237
|
const getDependencies = hash => {
|
216
238
|
const assets = hashToAssets.get(hash);
|
217
239
|
if (!assets) {
|
218
240
|
const referencingAssets = assetsWithInfo.filter(asset =>
|
219
|
-
asset.referencedHashes.has(
|
241
|
+
/** @type {ReferencedHashes} */ (asset.referencedHashes).has(
|
242
|
+
hash
|
243
|
+
)
|
220
244
|
);
|
221
245
|
const err = new WebpackError(`RealContentHashPlugin
|
222
246
|
Some kind of unexpected caching problem occurred.
|
@@ -236,23 +260,36 @@ ${referencingAssets
|
|
236
260
|
}
|
237
261
|
const hashes = new Set();
|
238
262
|
for (const { referencedHashes, ownHashes } of assets) {
|
239
|
-
if (!ownHashes.has(hash)) {
|
240
|
-
for (const hash of ownHashes) {
|
263
|
+
if (!(/** @type {OwnHashes} */ (ownHashes).has(hash))) {
|
264
|
+
for (const hash of /** @type {OwnHashes} */ (ownHashes)) {
|
241
265
|
hashes.add(hash);
|
242
266
|
}
|
243
267
|
}
|
244
|
-
for (const hash of
|
268
|
+
for (const hash of /** @type {ReferencedHashes} */ (
|
269
|
+
referencedHashes
|
270
|
+
)) {
|
245
271
|
hashes.add(hash);
|
246
272
|
}
|
247
273
|
}
|
248
274
|
return hashes;
|
249
275
|
};
|
276
|
+
/**
|
277
|
+
* @param {string} hash the hash
|
278
|
+
* @returns {string} the hash info
|
279
|
+
*/
|
250
280
|
const hashInfo = hash => {
|
251
281
|
const assets = hashToAssets.get(hash);
|
252
|
-
return `${hash} (${Array.from(
|
282
|
+
return `${hash} (${Array.from(
|
283
|
+
/** @type {AssetInfoForRealContentHash[]} */ (assets),
|
284
|
+
a => a.name
|
285
|
+
)})`;
|
253
286
|
};
|
254
287
|
const hashesInOrder = new Set();
|
255
288
|
for (const hash of hashToAssets.keys()) {
|
289
|
+
/**
|
290
|
+
* @param {string} hash the hash
|
291
|
+
* @param {Set<string>} stack stack of hashes
|
292
|
+
*/
|
256
293
|
const add = (hash, stack) => {
|
257
294
|
const deps = getDependencies(hash);
|
258
295
|
if (!deps) return;
|
@@ -276,21 +313,31 @@ ${referencingAssets
|
|
276
313
|
add(hash, new Set());
|
277
314
|
}
|
278
315
|
const hashToNewHash = new Map();
|
316
|
+
/**
|
317
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
318
|
+
* @returns {Etag} etag
|
319
|
+
*/
|
279
320
|
const getEtag = asset =>
|
280
321
|
cacheGenerate.mergeEtags(
|
281
322
|
cacheGenerate.getLazyHashedEtag(asset.source),
|
282
|
-
Array.from(
|
283
|
-
|
323
|
+
Array.from(
|
324
|
+
/** @type {ReferencedHashes} */ (asset.referencedHashes),
|
325
|
+
hash => hashToNewHash.get(hash)
|
284
326
|
).join("|")
|
285
327
|
);
|
328
|
+
/**
|
329
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
330
|
+
* @returns {Promise<void>}
|
331
|
+
*/
|
286
332
|
const computeNewContent = asset => {
|
287
333
|
if (asset.contentComputePromise) return asset.contentComputePromise;
|
288
334
|
return (asset.contentComputePromise = (async () => {
|
289
335
|
if (
|
290
|
-
asset.ownHashes.size > 0 ||
|
291
|
-
Array.from(
|
292
|
-
|
293
|
-
|
336
|
+
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
337
|
+
Array.from(
|
338
|
+
/** @type {ReferencedHashes} */
|
339
|
+
(asset.referencedHashes)
|
340
|
+
).some(hash => hashToNewHash.get(hash) !== hash)
|
294
341
|
) {
|
295
342
|
const identifier = asset.name;
|
296
343
|
const etag = getEtag(asset);
|
@@ -307,15 +354,20 @@ ${referencingAssets
|
|
307
354
|
}
|
308
355
|
})());
|
309
356
|
};
|
357
|
+
/**
|
358
|
+
* @param {AssetInfoForRealContentHash} asset asset info
|
359
|
+
* @returns {Promise<void>}
|
360
|
+
*/
|
310
361
|
const computeNewContentWithoutOwn = asset => {
|
311
362
|
if (asset.contentComputeWithoutOwnPromise)
|
312
363
|
return asset.contentComputeWithoutOwnPromise;
|
313
364
|
return (asset.contentComputeWithoutOwnPromise = (async () => {
|
314
365
|
if (
|
315
|
-
asset.ownHashes.size > 0 ||
|
316
|
-
Array.from(
|
317
|
-
|
318
|
-
|
366
|
+
/** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
|
367
|
+
Array.from(
|
368
|
+
/** @type {ReferencedHashes} */
|
369
|
+
(asset.referencedHashes)
|
370
|
+
).some(hash => hashToNewHash.get(hash) !== hash)
|
319
371
|
) {
|
320
372
|
const identifier = asset.name + "|without-own";
|
321
373
|
const etag = getEtag(asset);
|
@@ -326,7 +378,9 @@ ${referencingAssets
|
|
326
378
|
const newContent = asset.content.replace(
|
327
379
|
hashRegExp,
|
328
380
|
hash => {
|
329
|
-
if (
|
381
|
+
if (
|
382
|
+
/** @type {OwnHashes} */ (asset.ownHashes).has(hash)
|
383
|
+
) {
|
330
384
|
return "";
|
331
385
|
}
|
332
386
|
return hashToNewHash.get(hash);
|
@@ -340,17 +394,19 @@ ${referencingAssets
|
|
340
394
|
};
|
341
395
|
const comparator = compareSelect(a => a.name, compareStrings);
|
342
396
|
for (const oldHash of hashesInOrder) {
|
343
|
-
const assets =
|
397
|
+
const assets =
|
398
|
+
/** @type {AssetInfoForRealContentHash[]} */
|
399
|
+
(hashToAssets.get(oldHash));
|
344
400
|
assets.sort(comparator);
|
345
401
|
await Promise.all(
|
346
402
|
assets.map(asset =>
|
347
|
-
asset.ownHashes.has(oldHash)
|
403
|
+
/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)
|
348
404
|
? computeNewContentWithoutOwn(asset)
|
349
405
|
: computeNewContent(asset)
|
350
406
|
)
|
351
407
|
);
|
352
408
|
const assetsContent = mapAndDeduplicateBuffers(assets, asset => {
|
353
|
-
if (asset.ownHashes.has(oldHash)) {
|
409
|
+
if (/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)) {
|
354
410
|
return asset.newSourceWithoutOwn
|
355
411
|
? asset.newSourceWithoutOwn.buffer()
|
356
412
|
: asset.source.buffer();
|
@@ -9,6 +9,8 @@ const { STAGE_BASIC } = require("../OptimizationStages");
|
|
9
9
|
const Queue = require("../util/Queue");
|
10
10
|
const { intersect } = require("../util/SetHelpers");
|
11
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
13
|
+
/** @typedef {import("../ChunkGroup")} ChunkGroup */
|
12
14
|
/** @typedef {import("../Compiler")} Compiler */
|
13
15
|
|
14
16
|
class RemoveParentModulesPlugin {
|
@@ -18,6 +20,10 @@ class RemoveParentModulesPlugin {
|
|
18
20
|
*/
|
19
21
|
apply(compiler) {
|
20
22
|
compiler.hooks.compilation.tap("RemoveParentModulesPlugin", compilation => {
|
23
|
+
/**
|
24
|
+
* @param {Iterable<Chunk>} chunks the chunks
|
25
|
+
* @param {ChunkGroup[]} chunkGroups the chunk groups
|
26
|
+
*/
|
21
27
|
const handler = (chunks, chunkGroups) => {
|
22
28
|
const chunkGraph = compilation.chunkGraph;
|
23
29
|
const queue = new Queue();
|
@@ -5,11 +5,17 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../Compilation").EntryData} EntryData */
|
8
9
|
/** @typedef {import("../Compiler")} Compiler */
|
10
|
+
/** @typedef {import("../Entrypoint")} Entrypoint */
|
9
11
|
|
10
12
|
class RuntimeChunkPlugin {
|
11
13
|
constructor(options) {
|
12
14
|
this.options = {
|
15
|
+
/**
|
16
|
+
* @param {Entrypoint} entrypoint entrypoint name
|
17
|
+
* @returns {string} runtime chunk name
|
18
|
+
*/
|
13
19
|
name: entrypoint => `runtime~${entrypoint.name}`,
|
14
20
|
...options
|
15
21
|
};
|
@@ -26,7 +32,9 @@ class RuntimeChunkPlugin {
|
|
26
32
|
"RuntimeChunkPlugin",
|
27
33
|
(_, { name: entryName }) => {
|
28
34
|
if (entryName === undefined) return;
|
29
|
-
const data =
|
35
|
+
const data =
|
36
|
+
/** @type {EntryData} */
|
37
|
+
(compilation.entries.get(entryName));
|
30
38
|
if (data.options.runtime === undefined && !data.options.dependOn) {
|
31
39
|
// Determine runtime chunk name
|
32
40
|
let name = this.options.name;
|
@@ -6,11 +6,18 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const glob2regexp = require("glob-to-regexp");
|
9
|
+
const {
|
10
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
11
|
+
JAVASCRIPT_MODULE_TYPE_ESM,
|
12
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC
|
13
|
+
} = require("../ModuleTypeConstants");
|
9
14
|
const { STAGE_DEFAULT } = require("../OptimizationStages");
|
10
15
|
const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
|
11
16
|
const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
|
12
17
|
const formatLocation = require("../formatLocation");
|
13
18
|
|
19
|
+
/** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
|
20
|
+
/** @typedef {import("estree").Statement} Statement */
|
14
21
|
/** @typedef {import("../Compiler")} Compiler */
|
15
22
|
/** @typedef {import("../Dependency")} Dependency */
|
16
23
|
/** @typedef {import("../Module")} Module */
|
@@ -50,6 +57,8 @@ const globToRegexp = (glob, cache) => {
|
|
50
57
|
return regexp;
|
51
58
|
};
|
52
59
|
|
60
|
+
const PLUGIN_NAME = "SideEffectsFlagPlugin";
|
61
|
+
|
53
62
|
class SideEffectsFlagPlugin {
|
54
63
|
/**
|
55
64
|
* @param {boolean} analyseSource analyse source code for side effects
|
@@ -69,60 +78,54 @@ class SideEffectsFlagPlugin {
|
|
69
78
|
globToRegexpCache.set(compiler.root, cache);
|
70
79
|
}
|
71
80
|
compiler.hooks.compilation.tap(
|
72
|
-
|
81
|
+
PLUGIN_NAME,
|
73
82
|
(compilation, { normalModuleFactory }) => {
|
74
83
|
const moduleGraph = compilation.moduleGraph;
|
75
|
-
normalModuleFactory.hooks.module.tap(
|
76
|
-
|
77
|
-
(
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
) {
|
84
|
-
const sideEffects = resolveData.descriptionFileData.sideEffects;
|
85
|
-
if (sideEffects !== undefined) {
|
86
|
-
if (module.factoryMeta === undefined) {
|
87
|
-
module.factoryMeta = {};
|
88
|
-
}
|
89
|
-
const hasSideEffects =
|
90
|
-
SideEffectsFlagPlugin.moduleHasSideEffects(
|
91
|
-
resolveData.relativePath,
|
92
|
-
sideEffects,
|
93
|
-
cache
|
94
|
-
);
|
95
|
-
module.factoryMeta.sideEffectFree = !hasSideEffects;
|
96
|
-
}
|
97
|
-
}
|
98
|
-
|
99
|
-
return module;
|
100
|
-
}
|
101
|
-
);
|
102
|
-
normalModuleFactory.hooks.module.tap(
|
103
|
-
"SideEffectsFlagPlugin",
|
104
|
-
(module, data) => {
|
105
|
-
if (typeof data.settings.sideEffects === "boolean") {
|
84
|
+
normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
|
85
|
+
const resolveData = data.resourceResolveData;
|
86
|
+
if (
|
87
|
+
resolveData &&
|
88
|
+
resolveData.descriptionFileData &&
|
89
|
+
resolveData.relativePath
|
90
|
+
) {
|
91
|
+
const sideEffects = resolveData.descriptionFileData.sideEffects;
|
92
|
+
if (sideEffects !== undefined) {
|
106
93
|
if (module.factoryMeta === undefined) {
|
107
94
|
module.factoryMeta = {};
|
108
95
|
}
|
109
|
-
|
96
|
+
const hasSideEffects = SideEffectsFlagPlugin.moduleHasSideEffects(
|
97
|
+
resolveData.relativePath,
|
98
|
+
sideEffects,
|
99
|
+
cache
|
100
|
+
);
|
101
|
+
module.factoryMeta.sideEffectFree = !hasSideEffects;
|
110
102
|
}
|
111
|
-
return module;
|
112
103
|
}
|
113
|
-
|
104
|
+
|
105
|
+
return module;
|
106
|
+
});
|
107
|
+
normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
|
108
|
+
if (typeof data.settings.sideEffects === "boolean") {
|
109
|
+
if (module.factoryMeta === undefined) {
|
110
|
+
module.factoryMeta = {};
|
111
|
+
}
|
112
|
+
module.factoryMeta.sideEffectFree = !data.settings.sideEffects;
|
113
|
+
}
|
114
|
+
return module;
|
115
|
+
});
|
114
116
|
if (this._analyseSource) {
|
115
117
|
/**
|
116
118
|
* @param {JavascriptParser} parser the parser
|
117
119
|
* @returns {void}
|
118
120
|
*/
|
119
121
|
const parserHandler = parser => {
|
122
|
+
/** @type {undefined | Statement | ModuleDeclaration} */
|
120
123
|
let sideEffectsStatement;
|
121
|
-
parser.hooks.program.tap(
|
124
|
+
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
122
125
|
sideEffectsStatement = undefined;
|
123
126
|
});
|
124
127
|
parser.hooks.statement.tap(
|
125
|
-
{ name:
|
128
|
+
{ name: PLUGIN_NAME, stage: -100 },
|
126
129
|
statement => {
|
127
130
|
if (sideEffectsStatement) return;
|
128
131
|
if (parser.scope.topLevelScope !== true) return;
|
@@ -203,7 +206,7 @@ class SideEffectsFlagPlugin {
|
|
203
206
|
}
|
204
207
|
}
|
205
208
|
);
|
206
|
-
parser.hooks.finish.tap(
|
209
|
+
parser.hooks.finish.tap(PLUGIN_NAME, () => {
|
207
210
|
if (sideEffectsStatement === undefined) {
|
208
211
|
parser.state.module.buildMeta.sideEffectFree = true;
|
209
212
|
} else {
|
@@ -220,18 +223,18 @@ class SideEffectsFlagPlugin {
|
|
220
223
|
});
|
221
224
|
};
|
222
225
|
for (const key of [
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
227
|
+
JAVASCRIPT_MODULE_TYPE_ESM,
|
228
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC
|
226
229
|
]) {
|
227
230
|
normalModuleFactory.hooks.parser
|
228
231
|
.for(key)
|
229
|
-
.tap(
|
232
|
+
.tap(PLUGIN_NAME, parserHandler);
|
230
233
|
}
|
231
234
|
}
|
232
235
|
compilation.hooks.optimizeDependencies.tap(
|
233
236
|
{
|
234
|
-
name:
|
237
|
+
name: PLUGIN_NAME,
|
235
238
|
stage: STAGE_DEFAULT
|
236
239
|
},
|
237
240
|
modules => {
|
@@ -258,7 +261,7 @@ class SideEffectsFlagPlugin {
|
|
258
261
|
// TODO improve for export *
|
259
262
|
if (isReexport && dep.name) {
|
260
263
|
const exportInfo = moduleGraph.getExportInfo(
|
261
|
-
connection.originModule,
|
264
|
+
/** @type {Module} */ (connection.originModule),
|
262
265
|
dep.name
|
263
266
|
);
|
264
267
|
exportInfo.moveTarget(
|
@@ -319,6 +322,12 @@ class SideEffectsFlagPlugin {
|
|
319
322
|
);
|
320
323
|
}
|
321
324
|
|
325
|
+
/**
|
326
|
+
* @param {string} moduleName the module name
|
327
|
+
* @param {undefined | boolean | string | string[]} flagValue the flag value
|
328
|
+
* @param {Map<string, RegExp>} cache cache for glob to regexp
|
329
|
+
* @returns {boolean | undefined} true, when the module has side effects, undefined or false when not
|
330
|
+
*/
|
322
331
|
static moduleHasSideEffects(moduleName, flagValue, cache) {
|
323
332
|
switch (typeof flagValue) {
|
324
333
|
case "undefined":
|