webpack 5.59.0 → 5.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
package/lib/DefinePlugin.js
CHANGED
@@ -5,10 +5,16 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const {
|
9
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
10
|
+
JAVASCRIPT_MODULE_TYPE_ESM,
|
11
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC
|
12
|
+
} = require("./ModuleTypeConstants");
|
8
13
|
const RuntimeGlobals = require("./RuntimeGlobals");
|
9
14
|
const WebpackError = require("./WebpackError");
|
10
15
|
const ConstDependency = require("./dependencies/ConstDependency");
|
11
16
|
const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
|
17
|
+
|
12
18
|
const {
|
13
19
|
evaluateToString,
|
14
20
|
toConstantDependency
|
@@ -16,16 +22,22 @@ const {
|
|
16
22
|
const createHash = require("./util/createHash");
|
17
23
|
|
18
24
|
/** @typedef {import("estree").Expression} Expression */
|
25
|
+
/** @typedef {import("./Compilation").ValueCacheVersion} ValueCacheVersion */
|
19
26
|
/** @typedef {import("./Compiler")} Compiler */
|
27
|
+
/** @typedef {import("./Module").BuildInfo} BuildInfo */
|
20
28
|
/** @typedef {import("./NormalModule")} NormalModule */
|
21
29
|
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
|
22
30
|
/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
|
31
|
+
/** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
|
32
|
+
/** @typedef {import("./javascript/JavascriptParser").Range} Range */
|
33
|
+
/** @typedef {import("./logging/Logger").Logger} Logger */
|
34
|
+
/** @typedef {import("./util/createHash").Algorithm} Algorithm */
|
23
35
|
|
24
36
|
/** @typedef {null|undefined|RegExp|Function|string|number|boolean|bigint|undefined} CodeValuePrimitive */
|
25
37
|
/** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive|RuntimeValue>} CodeValue */
|
26
38
|
|
27
39
|
/**
|
28
|
-
* @typedef {
|
40
|
+
* @typedef {object} RuntimeValueOptions
|
29
41
|
* @property {string[]=} fileDependencies
|
30
42
|
* @property {string[]=} contextDependencies
|
31
43
|
* @property {string[]=} missingDependencies
|
@@ -33,9 +45,11 @@ const createHash = require("./util/createHash");
|
|
33
45
|
* @property {string|function(): string=} version
|
34
46
|
*/
|
35
47
|
|
48
|
+
/** @typedef {function({ module: NormalModule, key: string, readonly version: ValueCacheVersion }): CodeValuePrimitive} GeneratorFn */
|
49
|
+
|
36
50
|
class RuntimeValue {
|
37
51
|
/**
|
38
|
-
* @param {
|
52
|
+
* @param {GeneratorFn} fn generator function
|
39
53
|
* @param {true | string[] | RuntimeValueOptions=} options options
|
40
54
|
*/
|
41
55
|
constructor(fn, options) {
|
@@ -54,33 +68,37 @@ class RuntimeValue {
|
|
54
68
|
|
55
69
|
/**
|
56
70
|
* @param {JavascriptParser} parser the parser
|
57
|
-
* @param {Map<string,
|
71
|
+
* @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
|
58
72
|
* @param {string} key the defined key
|
59
73
|
* @returns {CodeValuePrimitive} code
|
60
74
|
*/
|
61
75
|
exec(parser, valueCacheVersions, key) {
|
62
|
-
const buildInfo = parser.state.module.buildInfo;
|
76
|
+
const buildInfo = /** @type {BuildInfo} */ (parser.state.module.buildInfo);
|
63
77
|
if (this.options === true) {
|
64
78
|
buildInfo.cacheable = false;
|
65
79
|
} else {
|
66
80
|
if (this.options.fileDependencies) {
|
67
81
|
for (const dep of this.options.fileDependencies) {
|
68
|
-
|
82
|
+
/** @type {NonNullable<BuildInfo["fileDependencies"]>} */
|
83
|
+
(buildInfo.fileDependencies).add(dep);
|
69
84
|
}
|
70
85
|
}
|
71
86
|
if (this.options.contextDependencies) {
|
72
87
|
for (const dep of this.options.contextDependencies) {
|
73
|
-
|
88
|
+
/** @type {NonNullable<BuildInfo["contextDependencies"]>} */
|
89
|
+
(buildInfo.contextDependencies).add(dep);
|
74
90
|
}
|
75
91
|
}
|
76
92
|
if (this.options.missingDependencies) {
|
77
93
|
for (const dep of this.options.missingDependencies) {
|
78
|
-
|
94
|
+
/** @type {NonNullable<BuildInfo["missingDependencies"]>} */
|
95
|
+
(buildInfo.missingDependencies).add(dep);
|
79
96
|
}
|
80
97
|
}
|
81
98
|
if (this.options.buildDependencies) {
|
82
99
|
for (const dep of this.options.buildDependencies) {
|
83
|
-
|
100
|
+
/** @type {NonNullable<BuildInfo["buildDependencies"]>} */
|
101
|
+
(buildInfo.buildDependencies).add(dep);
|
84
102
|
}
|
85
103
|
}
|
86
104
|
}
|
@@ -89,9 +107,7 @@ class RuntimeValue {
|
|
89
107
|
module: parser.state.module,
|
90
108
|
key,
|
91
109
|
get version() {
|
92
|
-
return
|
93
|
-
valueCacheVersions.get(VALUE_DEP_PREFIX + key)
|
94
|
-
);
|
110
|
+
return valueCacheVersions.get(VALUE_DEP_PREFIX + key);
|
95
111
|
}
|
96
112
|
});
|
97
113
|
}
|
@@ -105,13 +121,27 @@ class RuntimeValue {
|
|
105
121
|
}
|
106
122
|
}
|
107
123
|
|
124
|
+
/**
|
125
|
+
* @param {Set<DestructuringAssignmentProperty> | undefined} properties properties
|
126
|
+
* @returns {Set<string> | undefined} used keys
|
127
|
+
*/
|
128
|
+
function getObjKeys(properties) {
|
129
|
+
if (!properties) return;
|
130
|
+
return new Set([...properties].map(p => p.id));
|
131
|
+
}
|
132
|
+
|
133
|
+
/** @typedef {Set<string> | null} ObjKeys */
|
134
|
+
/** @typedef {boolean | undefined | null} AsiSafe */
|
135
|
+
|
108
136
|
/**
|
109
137
|
* @param {any[]|{[k: string]: any}} obj obj
|
110
138
|
* @param {JavascriptParser} parser Parser
|
111
|
-
* @param {Map<string,
|
139
|
+
* @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
|
112
140
|
* @param {string} key the defined key
|
113
141
|
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
114
|
-
* @param {
|
142
|
+
* @param {Logger} logger the logger object
|
143
|
+
* @param {AsiSafe=} asiSafe asi safe (undefined: unknown, null: unneeded)
|
144
|
+
* @param {ObjKeys=} objKeys used keys
|
115
145
|
* @returns {string} code converted to string that evaluates
|
116
146
|
*/
|
117
147
|
const stringifyObj = (
|
@@ -120,25 +150,45 @@ const stringifyObj = (
|
|
120
150
|
valueCacheVersions,
|
121
151
|
key,
|
122
152
|
runtimeTemplate,
|
123
|
-
|
153
|
+
logger,
|
154
|
+
asiSafe,
|
155
|
+
objKeys
|
124
156
|
) => {
|
125
157
|
let code;
|
126
|
-
|
158
|
+
const arr = Array.isArray(obj);
|
127
159
|
if (arr) {
|
128
|
-
code = `[${
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
160
|
+
code = `[${
|
161
|
+
/** @type {any[]} */ (obj)
|
162
|
+
.map(code =>
|
163
|
+
toCode(
|
164
|
+
code,
|
165
|
+
parser,
|
166
|
+
valueCacheVersions,
|
167
|
+
key,
|
168
|
+
runtimeTemplate,
|
169
|
+
logger,
|
170
|
+
null
|
171
|
+
)
|
172
|
+
)
|
173
|
+
.join(",")
|
174
|
+
}]`;
|
133
175
|
} else {
|
134
|
-
|
176
|
+
let keys = Object.keys(obj);
|
177
|
+
if (objKeys) {
|
178
|
+
keys = objKeys.size === 0 ? [] : keys.filter(k => objKeys.has(k));
|
179
|
+
}
|
180
|
+
code = `{${keys
|
135
181
|
.map(key => {
|
136
|
-
const code = obj[key];
|
137
|
-
return (
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
182
|
+
const code = /** @type {{[k: string]: any}} */ (obj)[key];
|
183
|
+
return `${JSON.stringify(key)}:${toCode(
|
184
|
+
code,
|
185
|
+
parser,
|
186
|
+
valueCacheVersions,
|
187
|
+
key,
|
188
|
+
runtimeTemplate,
|
189
|
+
logger,
|
190
|
+
null
|
191
|
+
)}`;
|
142
192
|
})
|
143
193
|
.join(",")}}`;
|
144
194
|
}
|
@@ -159,10 +209,12 @@ const stringifyObj = (
|
|
159
209
|
* Convert code to a string that evaluates
|
160
210
|
* @param {CodeValue} code Code to evaluate
|
161
211
|
* @param {JavascriptParser} parser Parser
|
162
|
-
* @param {Map<string,
|
212
|
+
* @param {Map<string, ValueCacheVersion>} valueCacheVersions valueCacheVersions
|
163
213
|
* @param {string} key the defined key
|
164
214
|
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
165
|
-
* @param {
|
215
|
+
* @param {Logger} logger the logger object
|
216
|
+
* @param {boolean | undefined | null=} asiSafe asi safe (undefined: unknown, null: unneeded)
|
217
|
+
* @param {ObjKeys=} objKeys used keys
|
166
218
|
* @returns {string} code converted to string that evaluates
|
167
219
|
*/
|
168
220
|
const toCode = (
|
@@ -171,51 +223,68 @@ const toCode = (
|
|
171
223
|
valueCacheVersions,
|
172
224
|
key,
|
173
225
|
runtimeTemplate,
|
174
|
-
|
226
|
+
logger,
|
227
|
+
asiSafe,
|
228
|
+
objKeys
|
175
229
|
) => {
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
230
|
+
const transformToCode = () => {
|
231
|
+
if (code === null) {
|
232
|
+
return "null";
|
233
|
+
}
|
234
|
+
if (code === undefined) {
|
235
|
+
return "undefined";
|
236
|
+
}
|
237
|
+
if (Object.is(code, -0)) {
|
238
|
+
return "-0";
|
239
|
+
}
|
240
|
+
if (code instanceof RuntimeValue) {
|
241
|
+
return toCode(
|
242
|
+
code.exec(parser, valueCacheVersions, key),
|
243
|
+
parser,
|
244
|
+
valueCacheVersions,
|
245
|
+
key,
|
246
|
+
runtimeTemplate,
|
247
|
+
logger,
|
248
|
+
asiSafe
|
249
|
+
);
|
250
|
+
}
|
251
|
+
if (code instanceof RegExp && code.toString) {
|
252
|
+
return code.toString();
|
253
|
+
}
|
254
|
+
if (typeof code === "function" && code.toString) {
|
255
|
+
return `(${code.toString()})`;
|
256
|
+
}
|
257
|
+
if (typeof code === "object") {
|
258
|
+
return stringifyObj(
|
259
|
+
code,
|
260
|
+
parser,
|
261
|
+
valueCacheVersions,
|
262
|
+
key,
|
263
|
+
runtimeTemplate,
|
264
|
+
logger,
|
265
|
+
asiSafe,
|
266
|
+
objKeys
|
267
|
+
);
|
268
|
+
}
|
269
|
+
if (typeof code === "bigint") {
|
270
|
+
return runtimeTemplate.supportsBigIntLiteral()
|
271
|
+
? `${code}n`
|
272
|
+
: `BigInt("${code}")`;
|
273
|
+
}
|
274
|
+
return `${code}`;
|
275
|
+
};
|
276
|
+
|
277
|
+
const strCode = transformToCode();
|
278
|
+
|
279
|
+
logger.debug(`Replaced "${key}" with "${strCode}"`);
|
280
|
+
|
281
|
+
return strCode;
|
217
282
|
};
|
218
283
|
|
284
|
+
/**
|
285
|
+
* @param {CodeValue} code code
|
286
|
+
* @returns {string | undefined} result
|
287
|
+
*/
|
219
288
|
const toCacheVersion = code => {
|
220
289
|
if (code === null) {
|
221
290
|
return "null";
|
@@ -233,24 +302,30 @@ const toCacheVersion = code => {
|
|
233
302
|
return code.toString();
|
234
303
|
}
|
235
304
|
if (typeof code === "function" && code.toString) {
|
236
|
-
return
|
305
|
+
return `(${code.toString()})`;
|
237
306
|
}
|
238
307
|
if (typeof code === "object") {
|
239
308
|
const items = Object.keys(code).map(key => ({
|
240
309
|
key,
|
241
|
-
value: toCacheVersion(code[key])
|
310
|
+
value: toCacheVersion(/** @type {Record<string, any>} */ (code)[key])
|
242
311
|
}));
|
243
|
-
if (items.some(({ value }) => value === undefined)) return
|
312
|
+
if (items.some(({ value }) => value === undefined)) return;
|
244
313
|
return `{${items.map(({ key, value }) => `${key}: ${value}`).join(", ")}}`;
|
245
314
|
}
|
246
315
|
if (typeof code === "bigint") {
|
247
316
|
return `${code}n`;
|
248
317
|
}
|
249
|
-
return code
|
318
|
+
return `${code}`;
|
250
319
|
};
|
251
320
|
|
252
|
-
const
|
253
|
-
const
|
321
|
+
const PLUGIN_NAME = "DefinePlugin";
|
322
|
+
const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
|
323
|
+
const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
|
324
|
+
const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
|
325
|
+
const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
|
326
|
+
`${RuntimeGlobals.require}\\s*(!?\\.)`
|
327
|
+
);
|
328
|
+
const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
|
254
329
|
|
255
330
|
class DefinePlugin {
|
256
331
|
/**
|
@@ -262,7 +337,7 @@ class DefinePlugin {
|
|
262
337
|
}
|
263
338
|
|
264
339
|
/**
|
265
|
-
* @param {
|
340
|
+
* @param {GeneratorFn} fn generator function
|
266
341
|
* @param {true | string[] | RuntimeValueOptions=} options options
|
267
342
|
* @returns {RuntimeValue} runtime value
|
268
343
|
*/
|
@@ -278,19 +353,22 @@ class DefinePlugin {
|
|
278
353
|
apply(compiler) {
|
279
354
|
const definitions = this.definitions;
|
280
355
|
compiler.hooks.compilation.tap(
|
281
|
-
|
356
|
+
PLUGIN_NAME,
|
282
357
|
(compilation, { normalModuleFactory }) => {
|
358
|
+
const logger = compilation.getLogger("webpack.DefinePlugin");
|
283
359
|
compilation.dependencyTemplates.set(
|
284
360
|
ConstDependency,
|
285
361
|
new ConstDependency.Template()
|
286
362
|
);
|
287
363
|
const { runtimeTemplate } = compilation;
|
288
364
|
|
289
|
-
const mainHash = createHash(
|
365
|
+
const mainHash = createHash(
|
366
|
+
/** @type {Algorithm} */
|
367
|
+
(compilation.outputOptions.hashFunction)
|
368
|
+
);
|
290
369
|
mainHash.update(
|
291
|
-
/** @type {string} */
|
292
|
-
|
293
|
-
) || ""
|
370
|
+
/** @type {string} */
|
371
|
+
(compilation.valueCacheVersions.get(VALUE_DEP_MAIN)) || ""
|
294
372
|
);
|
295
373
|
|
296
374
|
/**
|
@@ -300,21 +378,35 @@ class DefinePlugin {
|
|
300
378
|
*/
|
301
379
|
const handler = parser => {
|
302
380
|
const mainValue = compilation.valueCacheVersions.get(VALUE_DEP_MAIN);
|
303
|
-
parser.hooks.program.tap(
|
304
|
-
const
|
381
|
+
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
382
|
+
const buildInfo = /** @type {BuildInfo} */ (
|
383
|
+
parser.state.module.buildInfo
|
384
|
+
);
|
305
385
|
if (!buildInfo.valueDependencies)
|
306
386
|
buildInfo.valueDependencies = new Map();
|
307
387
|
buildInfo.valueDependencies.set(VALUE_DEP_MAIN, mainValue);
|
308
388
|
});
|
309
389
|
|
390
|
+
/**
|
391
|
+
* @param {string} key key
|
392
|
+
*/
|
310
393
|
const addValueDependency = key => {
|
311
|
-
const
|
312
|
-
|
394
|
+
const buildInfo =
|
395
|
+
/** @type {BuildInfo} */
|
396
|
+
(parser.state.module.buildInfo);
|
397
|
+
/** @type {NonNullable<BuildInfo["valueDependencies"]>} */
|
398
|
+
(buildInfo.valueDependencies).set(
|
313
399
|
VALUE_DEP_PREFIX + key,
|
314
400
|
compilation.valueCacheVersions.get(VALUE_DEP_PREFIX + key)
|
315
401
|
);
|
316
402
|
};
|
317
403
|
|
404
|
+
/**
|
405
|
+
* @template {Function} T
|
406
|
+
* @param {string} key key
|
407
|
+
* @param {T} fn fn
|
408
|
+
* @returns {function(TODO): TODO} result
|
409
|
+
*/
|
318
410
|
const withValueDependency =
|
319
411
|
(key, fn) =>
|
320
412
|
(...args) => {
|
@@ -324,12 +416,12 @@ class DefinePlugin {
|
|
324
416
|
|
325
417
|
/**
|
326
418
|
* Walk definitions
|
327
|
-
* @param {
|
419
|
+
* @param {Record<string, CodeValue>} definitions Definitions map
|
328
420
|
* @param {string} prefix Prefix string
|
329
421
|
* @returns {void}
|
330
422
|
*/
|
331
423
|
const walkDefinitions = (definitions, prefix) => {
|
332
|
-
Object.keys(definitions)
|
424
|
+
for (const key of Object.keys(definitions)) {
|
333
425
|
const code = definitions[key];
|
334
426
|
if (
|
335
427
|
code &&
|
@@ -337,13 +429,16 @@ class DefinePlugin {
|
|
337
429
|
!(code instanceof RuntimeValue) &&
|
338
430
|
!(code instanceof RegExp)
|
339
431
|
) {
|
340
|
-
walkDefinitions(
|
432
|
+
walkDefinitions(
|
433
|
+
/** @type {Record<string, CodeValue>} */ (code),
|
434
|
+
`${prefix + key}.`
|
435
|
+
);
|
341
436
|
applyObjectDefine(prefix + key, code);
|
342
|
-
|
437
|
+
continue;
|
343
438
|
}
|
344
439
|
applyDefineKey(prefix, key);
|
345
440
|
applyDefine(prefix + key, code);
|
346
|
-
}
|
441
|
+
}
|
347
442
|
};
|
348
443
|
|
349
444
|
/**
|
@@ -354,13 +449,13 @@ class DefinePlugin {
|
|
354
449
|
*/
|
355
450
|
const applyDefineKey = (prefix, key) => {
|
356
451
|
const splittedKey = key.split(".");
|
357
|
-
splittedKey.slice(1).
|
452
|
+
for (const [i, _] of splittedKey.slice(1).entries()) {
|
358
453
|
const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
|
359
|
-
parser.hooks.canRename.for(fullKey).tap(
|
454
|
+
parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
|
360
455
|
addValueDependency(key);
|
361
456
|
return true;
|
362
457
|
});
|
363
|
-
}
|
458
|
+
}
|
364
459
|
};
|
365
460
|
|
366
461
|
/**
|
@@ -371,18 +466,18 @@ class DefinePlugin {
|
|
371
466
|
*/
|
372
467
|
const applyDefine = (key, code) => {
|
373
468
|
const originalKey = key;
|
374
|
-
const isTypeof =
|
375
|
-
if (isTypeof) key = key.replace(
|
469
|
+
const isTypeof = TYPEOF_OPERATOR_REGEXP.test(key);
|
470
|
+
if (isTypeof) key = key.replace(TYPEOF_OPERATOR_REGEXP, "");
|
376
471
|
let recurse = false;
|
377
472
|
let recurseTypeof = false;
|
378
473
|
if (!isTypeof) {
|
379
|
-
parser.hooks.canRename.for(key).tap(
|
474
|
+
parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
|
380
475
|
addValueDependency(originalKey);
|
381
476
|
return true;
|
382
477
|
});
|
383
478
|
parser.hooks.evaluateIdentifier
|
384
479
|
.for(key)
|
385
|
-
.tap(
|
480
|
+
.tap(PLUGIN_NAME, expr => {
|
386
481
|
/**
|
387
482
|
* this is needed in case there is a recursion in the DefinePlugin
|
388
483
|
* to prevent an endless recursion
|
@@ -401,37 +496,44 @@ class DefinePlugin {
|
|
401
496
|
compilation.valueCacheVersions,
|
402
497
|
key,
|
403
498
|
runtimeTemplate,
|
499
|
+
logger,
|
404
500
|
null
|
405
501
|
)
|
406
502
|
);
|
407
503
|
recurse = false;
|
408
|
-
res.setRange(expr.range);
|
504
|
+
res.setRange(/** @type {Range} */ (expr.range));
|
409
505
|
return res;
|
410
506
|
});
|
411
|
-
parser.hooks.expression.for(key).tap(
|
507
|
+
parser.hooks.expression.for(key).tap(PLUGIN_NAME, expr => {
|
412
508
|
addValueDependency(originalKey);
|
413
|
-
|
509
|
+
let strCode = toCode(
|
414
510
|
code,
|
415
511
|
parser,
|
416
512
|
compilation.valueCacheVersions,
|
417
513
|
originalKey,
|
418
514
|
runtimeTemplate,
|
419
|
-
|
515
|
+
logger,
|
516
|
+
!parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
|
517
|
+
null
|
420
518
|
);
|
421
|
-
|
519
|
+
|
520
|
+
if (parser.scope.inShorthand) {
|
521
|
+
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
522
|
+
}
|
523
|
+
|
524
|
+
if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
|
422
525
|
return toConstantDependency(parser, strCode, [
|
423
526
|
RuntimeGlobals.require
|
424
527
|
])(expr);
|
425
|
-
} else if (
|
528
|
+
} else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
|
426
529
|
return toConstantDependency(parser, strCode, [
|
427
530
|
RuntimeGlobals.requireScope
|
428
531
|
])(expr);
|
429
|
-
} else {
|
430
|
-
return toConstantDependency(parser, strCode)(expr);
|
431
532
|
}
|
533
|
+
return toConstantDependency(parser, strCode)(expr);
|
432
534
|
});
|
433
535
|
}
|
434
|
-
parser.hooks.evaluateTypeof.for(key).tap(
|
536
|
+
parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, expr => {
|
435
537
|
/**
|
436
538
|
* this is needed in case there is a recursion in the DefinePlugin
|
437
539
|
* to prevent an endless recursion
|
@@ -449,17 +551,16 @@ class DefinePlugin {
|
|
449
551
|
compilation.valueCacheVersions,
|
450
552
|
originalKey,
|
451
553
|
runtimeTemplate,
|
554
|
+
logger,
|
452
555
|
null
|
453
556
|
);
|
454
|
-
const typeofCode = isTypeof
|
455
|
-
? codeCode
|
456
|
-
: "typeof (" + codeCode + ")";
|
557
|
+
const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
|
457
558
|
const res = parser.evaluate(typeofCode);
|
458
559
|
recurseTypeof = false;
|
459
|
-
res.setRange(expr.range);
|
560
|
+
res.setRange(/** @type {Range} */ (expr.range));
|
460
561
|
return res;
|
461
562
|
});
|
462
|
-
parser.hooks.typeof.for(key).tap(
|
563
|
+
parser.hooks.typeof.for(key).tap(PLUGIN_NAME, expr => {
|
463
564
|
addValueDependency(originalKey);
|
464
565
|
const codeCode = toCode(
|
465
566
|
code,
|
@@ -467,11 +568,10 @@ class DefinePlugin {
|
|
467
568
|
compilation.valueCacheVersions,
|
468
569
|
originalKey,
|
469
570
|
runtimeTemplate,
|
571
|
+
logger,
|
470
572
|
null
|
471
573
|
);
|
472
|
-
const typeofCode = isTypeof
|
473
|
-
? codeCode
|
474
|
-
: "typeof (" + codeCode + ")";
|
574
|
+
const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
|
475
575
|
const res = parser.evaluate(typeofCode);
|
476
576
|
if (!res.isString()) return;
|
477
577
|
return toConstantDependency(
|
@@ -484,56 +584,59 @@ class DefinePlugin {
|
|
484
584
|
/**
|
485
585
|
* Apply Object
|
486
586
|
* @param {string} key Key
|
487
|
-
* @param {
|
587
|
+
* @param {object} obj Object
|
488
588
|
* @returns {void}
|
489
589
|
*/
|
490
590
|
const applyObjectDefine = (key, obj) => {
|
491
|
-
parser.hooks.canRename.for(key).tap(
|
591
|
+
parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
|
492
592
|
addValueDependency(key);
|
493
593
|
return true;
|
494
594
|
});
|
495
|
-
parser.hooks.evaluateIdentifier
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
.setRange(expr.range);
|
503
|
-
});
|
595
|
+
parser.hooks.evaluateIdentifier.for(key).tap(PLUGIN_NAME, expr => {
|
596
|
+
addValueDependency(key);
|
597
|
+
return new BasicEvaluatedExpression()
|
598
|
+
.setTruthy()
|
599
|
+
.setSideEffects(false)
|
600
|
+
.setRange(/** @type {Range} */ (expr.range));
|
601
|
+
});
|
504
602
|
parser.hooks.evaluateTypeof
|
505
603
|
.for(key)
|
506
604
|
.tap(
|
507
|
-
|
605
|
+
PLUGIN_NAME,
|
508
606
|
withValueDependency(key, evaluateToString("object"))
|
509
607
|
);
|
510
|
-
parser.hooks.expression.for(key).tap(
|
608
|
+
parser.hooks.expression.for(key).tap(PLUGIN_NAME, expr => {
|
511
609
|
addValueDependency(key);
|
512
|
-
|
610
|
+
let strCode = stringifyObj(
|
513
611
|
obj,
|
514
612
|
parser,
|
515
613
|
compilation.valueCacheVersions,
|
516
614
|
key,
|
517
615
|
runtimeTemplate,
|
518
|
-
|
616
|
+
logger,
|
617
|
+
!parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
|
618
|
+
getObjKeys(parser.destructuringAssignmentPropertiesFor(expr))
|
519
619
|
);
|
520
620
|
|
521
|
-
if (
|
621
|
+
if (parser.scope.inShorthand) {
|
622
|
+
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
623
|
+
}
|
624
|
+
|
625
|
+
if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
|
522
626
|
return toConstantDependency(parser, strCode, [
|
523
627
|
RuntimeGlobals.require
|
524
628
|
])(expr);
|
525
|
-
} else if (
|
629
|
+
} else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
|
526
630
|
return toConstantDependency(parser, strCode, [
|
527
631
|
RuntimeGlobals.requireScope
|
528
632
|
])(expr);
|
529
|
-
} else {
|
530
|
-
return toConstantDependency(parser, strCode)(expr);
|
531
633
|
}
|
634
|
+
return toConstantDependency(parser, strCode)(expr);
|
532
635
|
});
|
533
636
|
parser.hooks.typeof
|
534
637
|
.for(key)
|
535
638
|
.tap(
|
536
|
-
|
639
|
+
PLUGIN_NAME,
|
537
640
|
withValueDependency(
|
538
641
|
key,
|
539
642
|
toConstantDependency(parser, JSON.stringify("object"))
|
@@ -545,33 +648,33 @@ class DefinePlugin {
|
|
545
648
|
};
|
546
649
|
|
547
650
|
normalModuleFactory.hooks.parser
|
548
|
-
.for(
|
549
|
-
.tap(
|
651
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
652
|
+
.tap(PLUGIN_NAME, handler);
|
550
653
|
normalModuleFactory.hooks.parser
|
551
|
-
.for(
|
552
|
-
.tap(
|
654
|
+
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
655
|
+
.tap(PLUGIN_NAME, handler);
|
553
656
|
normalModuleFactory.hooks.parser
|
554
|
-
.for(
|
555
|
-
.tap(
|
657
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
658
|
+
.tap(PLUGIN_NAME, handler);
|
556
659
|
|
557
660
|
/**
|
558
661
|
* Walk definitions
|
559
|
-
* @param {
|
662
|
+
* @param {Record<string, CodeValue>} definitions Definitions map
|
560
663
|
* @param {string} prefix Prefix string
|
561
664
|
* @returns {void}
|
562
665
|
*/
|
563
666
|
const walkDefinitionsForValues = (definitions, prefix) => {
|
564
|
-
Object.keys(definitions)
|
667
|
+
for (const key of Object.keys(definitions)) {
|
565
668
|
const code = definitions[key];
|
566
669
|
const version = toCacheVersion(code);
|
567
670
|
const name = VALUE_DEP_PREFIX + prefix + key;
|
568
|
-
mainHash.update(
|
671
|
+
mainHash.update(`|${prefix}${key}`);
|
569
672
|
const oldVersion = compilation.valueCacheVersions.get(name);
|
570
673
|
if (oldVersion === undefined) {
|
571
674
|
compilation.valueCacheVersions.set(name, version);
|
572
675
|
} else if (oldVersion !== version) {
|
573
676
|
const warning = new WebpackError(
|
574
|
-
|
677
|
+
`${PLUGIN_NAME}\nConflicting values for '${prefix + key}'`
|
575
678
|
);
|
576
679
|
warning.details = `'${oldVersion}' !== '${version}'`;
|
577
680
|
warning.hideStack = true;
|
@@ -583,9 +686,12 @@ class DefinePlugin {
|
|
583
686
|
!(code instanceof RuntimeValue) &&
|
584
687
|
!(code instanceof RegExp)
|
585
688
|
) {
|
586
|
-
walkDefinitionsForValues(
|
689
|
+
walkDefinitionsForValues(
|
690
|
+
/** @type {Record<string, CodeValue>} */ (code),
|
691
|
+
`${prefix + key}.`
|
692
|
+
);
|
587
693
|
}
|
588
|
-
}
|
694
|
+
}
|
589
695
|
};
|
590
696
|
|
591
697
|
walkDefinitionsForValues(definitions, "");
|