@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +49 -12
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- 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 +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
package/lib/DefinePlugin.js
CHANGED
|
@@ -12,8 +12,8 @@ const {
|
|
|
12
12
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
13
13
|
} = require("./ModuleTypeConstants");
|
|
14
14
|
const RuntimeGlobals = require("./RuntimeGlobals");
|
|
15
|
-
const WebpackError = require("./WebpackError");
|
|
16
15
|
const ConstDependency = require("./dependencies/ConstDependency");
|
|
16
|
+
const WebpackError = require("./errors/WebpackError");
|
|
17
17
|
const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
|
|
18
18
|
const { VariableInfo } = require("./javascript/JavascriptParser");
|
|
19
19
|
const {
|
|
@@ -21,6 +21,7 @@ const {
|
|
|
21
21
|
toConstantDependency
|
|
22
22
|
} = require("./javascript/JavascriptParserHelpers");
|
|
23
23
|
const createHash = require("./util/createHash");
|
|
24
|
+
const createHooksRegistry = require("./util/createHooksRegistry");
|
|
24
25
|
|
|
25
26
|
/** @typedef {import("estree").Expression} Expression */
|
|
26
27
|
/** @typedef {import("./Compiler")} Compiler */
|
|
@@ -31,14 +32,17 @@ const createHash = require("./util/createHash");
|
|
|
31
32
|
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
|
|
32
33
|
/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
|
|
33
34
|
/** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
|
|
35
|
+
/** @typedef {import("./javascript/JavascriptParser").Members} Members */
|
|
34
36
|
/** @typedef {import("./javascript/JavascriptParser").Range} Range */
|
|
35
37
|
/** @typedef {import("./logging/Logger").Logger} Logger */
|
|
36
38
|
/** @typedef {import("./Compilation")} Compilation */
|
|
39
|
+
/** @typedef {import("./NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
|
|
37
40
|
|
|
38
41
|
/** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
|
|
39
42
|
/** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive | RuntimeValue>} CodeValue */
|
|
40
43
|
|
|
41
44
|
/**
|
|
45
|
+
* Defines the runtime value options type used by this module.
|
|
42
46
|
* @typedef {object} RuntimeValueOptions
|
|
43
47
|
* @property {string[]=} fileDependencies
|
|
44
48
|
* @property {string[]=} contextDependencies
|
|
@@ -51,6 +55,7 @@ const createHash = require("./util/createHash");
|
|
|
51
55
|
|
|
52
56
|
class RuntimeValue {
|
|
53
57
|
/**
|
|
58
|
+
* Creates an instance of RuntimeValue.
|
|
54
59
|
* @param {GeneratorFn} fn generator function
|
|
55
60
|
* @param {true | string[] | RuntimeValueOptions=} options options
|
|
56
61
|
*/
|
|
@@ -71,6 +76,7 @@ class RuntimeValue {
|
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
/**
|
|
79
|
+
* Returns code.
|
|
74
80
|
* @param {JavascriptParser} parser the parser
|
|
75
81
|
* @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
|
|
76
82
|
* @param {string} key the defined key
|
|
@@ -80,6 +86,10 @@ class RuntimeValue {
|
|
|
80
86
|
const buildInfo = /** @type {BuildInfo} */ (parser.state.module.buildInfo);
|
|
81
87
|
if (this.options === true) {
|
|
82
88
|
buildInfo.cacheable = false;
|
|
89
|
+
const reasons =
|
|
90
|
+
buildInfo.notCacheableReasons || (buildInfo.notCacheableReasons = []);
|
|
91
|
+
const reason = `DefinePlugin runtime value ${key}`;
|
|
92
|
+
if (!reasons.includes(reason)) reasons.push(reason);
|
|
83
93
|
} else {
|
|
84
94
|
if (this.options.fileDependencies) {
|
|
85
95
|
for (const dep of this.options.fileDependencies) {
|
|
@@ -128,6 +138,7 @@ class RuntimeValue {
|
|
|
128
138
|
}
|
|
129
139
|
|
|
130
140
|
/**
|
|
141
|
+
* Returns used keys.
|
|
131
142
|
* @param {DestructuringAssignmentProperties | undefined} properties properties
|
|
132
143
|
* @returns {Set<string> | undefined} used keys
|
|
133
144
|
*/
|
|
@@ -136,10 +147,22 @@ function getObjKeys(properties) {
|
|
|
136
147
|
return new Set([...properties].map((p) => p.id));
|
|
137
148
|
}
|
|
138
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Whether a value is a nested definition (plain object/array) to recurse into.
|
|
152
|
+
* @param {CodeValue} code code value
|
|
153
|
+
* @returns {code is Definitions} true for a plain object or array
|
|
154
|
+
*/
|
|
155
|
+
const isObjectDefinition = (code) =>
|
|
156
|
+
Boolean(code) &&
|
|
157
|
+
typeof code === "object" &&
|
|
158
|
+
!(code instanceof RuntimeValue) &&
|
|
159
|
+
!(code instanceof RegExp);
|
|
160
|
+
|
|
139
161
|
/** @typedef {Set<string> | null} ObjKeys */
|
|
140
162
|
/** @typedef {boolean | undefined | null} AsiSafe */
|
|
141
163
|
|
|
142
164
|
/**
|
|
165
|
+
* Returns code converted to string that evaluates.
|
|
143
166
|
* @param {EXPECTED_ANY[] | { [k: string]: EXPECTED_ANY }} obj obj
|
|
144
167
|
* @param {JavascriptParser} parser Parser
|
|
145
168
|
* @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
|
|
@@ -185,7 +208,7 @@ const stringifyObj = (
|
|
|
185
208
|
code = `{${keys
|
|
186
209
|
.map((key) => {
|
|
187
210
|
const code = obj[key];
|
|
188
|
-
return `${
|
|
211
|
+
return `${toPropertyKey(key)}:${toCode(
|
|
189
212
|
code,
|
|
190
213
|
parser,
|
|
191
214
|
valueCacheVersions,
|
|
@@ -287,6 +310,7 @@ const toCode = (
|
|
|
287
310
|
};
|
|
288
311
|
|
|
289
312
|
/**
|
|
313
|
+
* Returns result.
|
|
290
314
|
* @param {CodeValue} code code
|
|
291
315
|
* @returns {string | undefined} result
|
|
292
316
|
*/
|
|
@@ -313,7 +337,7 @@ const toCacheVersion = (code) => {
|
|
|
313
337
|
const items = Object.keys(code).map((key) => ({
|
|
314
338
|
key,
|
|
315
339
|
value: toCacheVersion(
|
|
316
|
-
/** @type {Record<string,
|
|
340
|
+
/** @type {Record<string, CodeValue>} */
|
|
317
341
|
(code)[key]
|
|
318
342
|
)
|
|
319
343
|
}));
|
|
@@ -330,37 +354,315 @@ const PLUGIN_NAME = "DefinePlugin";
|
|
|
330
354
|
const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
|
|
331
355
|
const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
|
|
332
356
|
const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
357
|
+
const EMPTY_OBJECT = {};
|
|
358
|
+
|
|
359
|
+
/** @typedef {Map<string, MergedDefinitionNode>} MergedDefinitionMap */
|
|
360
|
+
/** @typedef {CodeValue | MergedDefinitionMap} MergedDefinitionNode */
|
|
337
361
|
|
|
338
362
|
/**
|
|
339
|
-
*
|
|
340
|
-
* @
|
|
363
|
+
* Merged view of the definitions of every DefinePlugin instance.
|
|
364
|
+
* @typedef {object} MergedDefinitions
|
|
365
|
+
* @property {Compilation} compilation the compilation
|
|
366
|
+
* @property {Definitions} definitions flat definitions
|
|
367
|
+
* @property {MergedDefinitionMap} root nested view (dotted keys expanded)
|
|
368
|
+
* @property {Map<string, Set<string>>} finalByNestedKey final key segments by nested object key
|
|
369
|
+
* @property {Map<string, Set<string>>} nestedByFinalKey nested object keys by final key segment
|
|
370
|
+
* @property {Map<string, string[]>} keysByPrefix definition keys below each dotted-key prefix
|
|
371
|
+
* @property {boolean} hasRuntimeValue renders are module-dependent (RuntimeValue present)
|
|
372
|
+
* @property {WeakMap<MergedDefinitionMap, string>} codeCache rendered code per node (static trees only)
|
|
373
|
+
* @property {Logger} logger the logger
|
|
341
374
|
*/
|
|
342
375
|
|
|
343
|
-
/** @
|
|
376
|
+
/** @type {WeakMap<Compilation, MergedDefinitions>} */
|
|
377
|
+
const mergedDefinitionsMap = new WeakMap();
|
|
344
378
|
|
|
345
|
-
/**
|
|
346
|
-
|
|
379
|
+
/**
|
|
380
|
+
* Whether a definition value is a plain object to expand into the nested view.
|
|
381
|
+
* @param {CodeValue} code definition value
|
|
382
|
+
* @returns {code is Definitions} true for a plain object
|
|
383
|
+
*/
|
|
384
|
+
const isPlainObjectDefinition = (code) => {
|
|
385
|
+
if (!code || typeof code !== "object" || Array.isArray(code)) return false;
|
|
386
|
+
const proto = Object.getPrototypeOf(code);
|
|
387
|
+
return proto === Object.prototype || proto === null;
|
|
388
|
+
};
|
|
347
389
|
|
|
348
|
-
|
|
390
|
+
/**
|
|
391
|
+
* Object literal key code; `__proto__` must be computed to stay an own property.
|
|
392
|
+
* @param {string} key property key
|
|
393
|
+
* @returns {string} property key code
|
|
394
|
+
*/
|
|
395
|
+
const toPropertyKey = (key) =>
|
|
396
|
+
key === "__proto__" ? '["__proto__"]' : JSON.stringify(key);
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Whether a definition value contains a RuntimeValue (module-dependent code).
|
|
400
|
+
* @param {CodeValue} value definition value
|
|
401
|
+
* @returns {boolean} true when a RuntimeValue is contained
|
|
402
|
+
*/
|
|
403
|
+
const containsRuntimeValue = (value) => {
|
|
404
|
+
if (value instanceof RuntimeValue) return true;
|
|
405
|
+
if (isObjectDefinition(value)) {
|
|
406
|
+
for (const key of Object.keys(value)) {
|
|
407
|
+
if (containsRuntimeValue(value[key])) return true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Sets a definition value on a node of the nested view, merging plain objects.
|
|
415
|
+
* @param {MergedDefinitionMap} node node
|
|
416
|
+
* @param {string} key key
|
|
417
|
+
* @param {CodeValue} value definition value
|
|
418
|
+
*/
|
|
419
|
+
const setMergedValue = (node, key, value) => {
|
|
420
|
+
const existing = node.get(key);
|
|
421
|
+
if (isPlainObjectDefinition(value)) {
|
|
422
|
+
const map =
|
|
423
|
+
existing instanceof Map
|
|
424
|
+
? existing
|
|
425
|
+
: /** @type {MergedDefinitionMap} */ (new Map());
|
|
426
|
+
if (map !== existing) node.set(key, map);
|
|
427
|
+
for (const k of Object.keys(value)) setMergedValue(map, k, value[k]);
|
|
428
|
+
} else {
|
|
429
|
+
node.set(key, value);
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Inserts a definition key path into the nested view.
|
|
435
|
+
* @param {MergedDefinitionMap} root root node
|
|
436
|
+
* @param {string[]} path dot-separated key path
|
|
437
|
+
* @param {CodeValue} value definition value
|
|
438
|
+
*/
|
|
439
|
+
const insertMergedDefinition = (root, path, value) => {
|
|
440
|
+
let node = root;
|
|
441
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
442
|
+
let next = node.get(path[i]);
|
|
443
|
+
if (next === undefined && !node.has(path[i])) {
|
|
444
|
+
next = /** @type {MergedDefinitionMap} */ (new Map());
|
|
445
|
+
node.set(path[i], next);
|
|
446
|
+
} else if (!(next instanceof Map)) {
|
|
447
|
+
// deeper keys cannot merge into a non-object value
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
node = next;
|
|
451
|
+
}
|
|
452
|
+
setMergedValue(node, path[path.length - 1], value);
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Returns the merged view of all definitions (built once per compilation).
|
|
457
|
+
* @param {Compilation} compilation the compilation
|
|
458
|
+
* @returns {MergedDefinitions} merged definitions
|
|
459
|
+
*/
|
|
460
|
+
const getMergedDefinitions = (compilation) => {
|
|
461
|
+
const cached = mergedDefinitionsMap.get(compilation);
|
|
462
|
+
if (cached) return cached;
|
|
463
|
+
|
|
464
|
+
const definitions = DefinePlugin.getCompilationHooks(
|
|
465
|
+
compilation
|
|
466
|
+
).definitions.call({});
|
|
467
|
+
/** @type {MergedDefinitionMap} */
|
|
468
|
+
const root = new Map();
|
|
469
|
+
/** @type {Map<string, Set<string>>} */
|
|
470
|
+
const finalByNestedKey = new Map();
|
|
471
|
+
/** @type {Map<string, Set<string>>} */
|
|
472
|
+
const nestedByFinalKey = new Map();
|
|
349
473
|
/**
|
|
350
|
-
* @param {
|
|
351
|
-
* @
|
|
474
|
+
* @param {Map<string, Set<string>>} map map
|
|
475
|
+
* @param {string} key key
|
|
476
|
+
* @param {string} value value
|
|
352
477
|
*/
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
if (
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
compilationHooksMap.set(compilation, hooks);
|
|
478
|
+
const addToMap = (map, key, value) => {
|
|
479
|
+
const set = map.get(key);
|
|
480
|
+
if (set) {
|
|
481
|
+
set.add(value);
|
|
482
|
+
} else {
|
|
483
|
+
map.set(key, new Set([value]));
|
|
360
484
|
}
|
|
361
|
-
|
|
485
|
+
};
|
|
486
|
+
let hasRuntimeValue = false;
|
|
487
|
+
/** @type {Map<string, string[]>} */
|
|
488
|
+
const keysByPrefix = new Map();
|
|
489
|
+
for (const key of Object.keys(definitions)) {
|
|
490
|
+
if (TYPEOF_OPERATOR_REGEXP.test(key)) continue;
|
|
491
|
+
const code = definitions[key];
|
|
492
|
+
insertMergedDefinition(root, key.split("."), code);
|
|
493
|
+
if (!hasRuntimeValue && containsRuntimeValue(code)) hasRuntimeValue = true;
|
|
494
|
+
// group this key under every ancestor prefix (value deps of object reads)
|
|
495
|
+
for (
|
|
496
|
+
let idx = key.indexOf(".");
|
|
497
|
+
idx !== -1;
|
|
498
|
+
idx = key.indexOf(".", idx + 1)
|
|
499
|
+
) {
|
|
500
|
+
const prefix = key.slice(0, idx);
|
|
501
|
+
const keys = keysByPrefix.get(prefix);
|
|
502
|
+
if (keys) {
|
|
503
|
+
keys.push(key);
|
|
504
|
+
} else {
|
|
505
|
+
keysByPrefix.set(prefix, [key]);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
if (!code || typeof code === "object") continue;
|
|
509
|
+
const idx = key.lastIndexOf(".");
|
|
510
|
+
if (idx <= 0 || idx >= key.length - 1) continue;
|
|
511
|
+
const nested = key.slice(0, idx);
|
|
512
|
+
const final = key.slice(idx + 1);
|
|
513
|
+
addToMap(finalByNestedKey, nested, final);
|
|
514
|
+
addToMap(nestedByFinalKey, final, nested);
|
|
515
|
+
}
|
|
516
|
+
const result = {
|
|
517
|
+
compilation,
|
|
518
|
+
definitions,
|
|
519
|
+
root,
|
|
520
|
+
finalByNestedKey,
|
|
521
|
+
nestedByFinalKey,
|
|
522
|
+
keysByPrefix,
|
|
523
|
+
hasRuntimeValue,
|
|
524
|
+
codeCache: new WeakMap(),
|
|
525
|
+
logger: compilation.getLogger("webpack.DefinePlugin")
|
|
526
|
+
};
|
|
527
|
+
mergedDefinitionsMap.set(compilation, result);
|
|
528
|
+
return result;
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Returns the merged definition node for a definition key.
|
|
533
|
+
* @param {Compilation} compilation the compilation
|
|
534
|
+
* @param {string} key definition key
|
|
535
|
+
* @returns {MergedDefinitionNode | undefined} merged node
|
|
536
|
+
*/
|
|
537
|
+
const getMergedDefinitionNode = (compilation, key) => {
|
|
538
|
+
/** @type {MergedDefinitionNode | undefined} */
|
|
539
|
+
let node = getMergedDefinitions(compilation).root;
|
|
540
|
+
for (const part of key.split(".")) {
|
|
541
|
+
if (!(node instanceof Map)) return;
|
|
542
|
+
node = node.get(part);
|
|
362
543
|
}
|
|
544
|
+
return node;
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Returns a merged map node converted to an object literal code string
|
|
549
|
+
* (no ASI wrapping). Static renders (no key filter, no RuntimeValue) are
|
|
550
|
+
* cached per compilation.
|
|
551
|
+
* @param {MergedDefinitions} merged merged definitions
|
|
552
|
+
* @param {MergedDefinitionMap} node merged map node
|
|
553
|
+
* @param {JavascriptParser} parser Parser
|
|
554
|
+
* @param {string} key the defined key
|
|
555
|
+
* @param {ObjKeys=} objKeys used keys
|
|
556
|
+
* @returns {string} code
|
|
557
|
+
*/
|
|
558
|
+
const stringifyMergedNode = (merged, node, parser, key, objKeys) => {
|
|
559
|
+
const cacheable = objKeys === undefined && !merged.hasRuntimeValue;
|
|
560
|
+
if (cacheable) {
|
|
561
|
+
const cached = merged.codeCache.get(node);
|
|
562
|
+
if (cached !== undefined) return cached;
|
|
563
|
+
}
|
|
564
|
+
let keys = [...node.keys()];
|
|
565
|
+
if (objKeys) {
|
|
566
|
+
keys = objKeys.size === 0 ? [] : keys.filter((k) => objKeys.has(k));
|
|
567
|
+
}
|
|
568
|
+
const code = `{${keys
|
|
569
|
+
.map((k) => {
|
|
570
|
+
const value = /** @type {MergedDefinitionNode} */ (node.get(k));
|
|
571
|
+
return `${toPropertyKey(k)}:${
|
|
572
|
+
value instanceof Map
|
|
573
|
+
? stringifyMergedNode(merged, value, parser, k)
|
|
574
|
+
: toCode(
|
|
575
|
+
value,
|
|
576
|
+
parser,
|
|
577
|
+
merged.compilation.valueCacheVersions,
|
|
578
|
+
k,
|
|
579
|
+
merged.compilation.runtimeTemplate,
|
|
580
|
+
merged.logger,
|
|
581
|
+
null
|
|
582
|
+
)
|
|
583
|
+
}`;
|
|
584
|
+
})
|
|
585
|
+
.join(",")}}`;
|
|
586
|
+
if (cacheable) merged.codeCache.set(node, code);
|
|
587
|
+
return code;
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* Renders a merged definition node to raw code (object literal for map nodes).
|
|
592
|
+
* @param {Compilation} compilation the compilation
|
|
593
|
+
* @param {JavascriptParser} parser Parser
|
|
594
|
+
* @param {MergedDefinitionNode} node merged node
|
|
595
|
+
* @param {string} key the defined key
|
|
596
|
+
* @param {ObjKeys=} objKeys used keys
|
|
597
|
+
* @returns {string} code
|
|
598
|
+
*/
|
|
599
|
+
const stringifyMergedDefinition = (compilation, parser, node, key, objKeys) => {
|
|
600
|
+
const merged = getMergedDefinitions(compilation);
|
|
601
|
+
return node instanceof Map
|
|
602
|
+
? stringifyMergedNode(merged, node, parser, key, objKeys)
|
|
603
|
+
: toCode(
|
|
604
|
+
node,
|
|
605
|
+
parser,
|
|
606
|
+
compilation.valueCacheVersions,
|
|
607
|
+
key,
|
|
608
|
+
compilation.runtimeTemplate,
|
|
609
|
+
merged.logger,
|
|
610
|
+
null
|
|
611
|
+
);
|
|
612
|
+
};
|
|
363
613
|
|
|
614
|
+
const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
|
|
615
|
+
`${RuntimeGlobals.require}\\s*(!?\\.)`
|
|
616
|
+
);
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Runtime requirements of replacement code referencing the require function.
|
|
620
|
+
* @param {string} code replacement code
|
|
621
|
+
* @returns {string[] | undefined} runtime requirements
|
|
622
|
+
*/
|
|
623
|
+
const getRuntimeRequirements = (code) => {
|
|
624
|
+
// fast path: most replacement code never references the require function
|
|
625
|
+
if (!code.includes(RuntimeGlobals.require)) return;
|
|
626
|
+
return WEBPACK_REQUIRE_FUNCTION_REGEXP.test(code)
|
|
627
|
+
? [RuntimeGlobals.require]
|
|
628
|
+
: [RuntimeGlobals.requireScope];
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
const createCompilationHooks = () => ({
|
|
632
|
+
/**
|
|
633
|
+
* @type {SyncWaterfallHook<[Record<string, CodeValue>]>}
|
|
634
|
+
* @since 5.104.0
|
|
635
|
+
*/
|
|
636
|
+
definitions: new SyncWaterfallHook(["definitions"])
|
|
637
|
+
});
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* Prefixes an evaluation error with the offending define key so a bare
|
|
641
|
+
* "Unexpected token" becomes actionable. The original error is mutated and
|
|
642
|
+
* returned (not re-wrapped) so its `loc`/`stack` survive for ModuleParseError's
|
|
643
|
+
* code frame instead of being dumped into the message.
|
|
644
|
+
* @param {string} key the defined key
|
|
645
|
+
* @param {CodeValue} code the defined value
|
|
646
|
+
* @param {unknown} error the original evaluation error
|
|
647
|
+
* @returns {Error} the annotated error
|
|
648
|
+
*/
|
|
649
|
+
const annotateEvaluationError = (key, code, error) => {
|
|
650
|
+
const value = typeof code === "string" ? code : JSON.stringify(code);
|
|
651
|
+
const prefix = `DefinePlugin: failed to evaluate value for "${key}" (\`${value}\`)`;
|
|
652
|
+
if (error instanceof Error) {
|
|
653
|
+
error.message = `${prefix}: ${error.message}`;
|
|
654
|
+
return error;
|
|
655
|
+
}
|
|
656
|
+
return new WebpackError(`${prefix}: ${error}`);
|
|
657
|
+
};
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* @typedef {ReturnType<typeof createCompilationHooks>} DefinePluginHooks
|
|
661
|
+
*/
|
|
662
|
+
|
|
663
|
+
/** @typedef {Record<string, CodeValue>} Definitions */
|
|
664
|
+
|
|
665
|
+
class DefinePlugin {
|
|
364
666
|
/**
|
|
365
667
|
* Create a new define plugin
|
|
366
668
|
* @param {Definitions} definitions A map of global object definitions
|
|
@@ -371,6 +673,7 @@ class DefinePlugin {
|
|
|
371
673
|
}
|
|
372
674
|
|
|
373
675
|
/**
|
|
676
|
+
* Returns runtime value.
|
|
374
677
|
* @param {GeneratorFn} fn generator function
|
|
375
678
|
* @param {true | string[] | RuntimeValueOptions=} options options
|
|
376
679
|
* @returns {RuntimeValue} runtime value
|
|
@@ -380,7 +683,7 @@ class DefinePlugin {
|
|
|
380
683
|
}
|
|
381
684
|
|
|
382
685
|
/**
|
|
383
|
-
*
|
|
686
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
384
687
|
* @param {Compiler} compiler the compiler instance
|
|
385
688
|
* @returns {void}
|
|
386
689
|
*/
|
|
@@ -396,15 +699,6 @@ class DefinePlugin {
|
|
|
396
699
|
...definitions
|
|
397
700
|
}));
|
|
398
701
|
|
|
399
|
-
/**
|
|
400
|
-
* @type {Map<string, Set<string>>}
|
|
401
|
-
*/
|
|
402
|
-
const finalByNestedKey = new Map();
|
|
403
|
-
/**
|
|
404
|
-
* @type {Map<string, Set<string>>}
|
|
405
|
-
*/
|
|
406
|
-
const nestedByFinalKey = new Map();
|
|
407
|
-
|
|
408
702
|
const logger = compilation.getLogger("webpack.DefinePlugin");
|
|
409
703
|
compilation.dependencyTemplates.set(
|
|
410
704
|
ConstDependency,
|
|
@@ -419,18 +713,21 @@ class DefinePlugin {
|
|
|
419
713
|
);
|
|
420
714
|
|
|
421
715
|
/**
|
|
422
|
-
*
|
|
716
|
+
* Handles the hook callback for this code path.
|
|
423
717
|
* @param {JavascriptParser} parser Parser
|
|
424
718
|
* @returns {void}
|
|
425
719
|
*/
|
|
426
720
|
const handler = (parser) => {
|
|
721
|
+
// built lazily here: every definitions hook is tapped by the time
|
|
722
|
+
// parsers are created, and the result is cached per compilation
|
|
723
|
+
const mergedDefinitions = getMergedDefinitions(compilation);
|
|
427
724
|
/** @type {Set<string>} */
|
|
428
725
|
const hooked = new Set();
|
|
429
726
|
const mainValue =
|
|
430
727
|
/** @type {ValueCacheVersion} */
|
|
431
728
|
(compilation.valueCacheVersions.get(VALUE_DEP_MAIN));
|
|
432
729
|
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
|
433
|
-
const buildInfo = /** @type {
|
|
730
|
+
const buildInfo = /** @type {NormalModuleBuildInfo} */ (
|
|
434
731
|
parser.state.module.buildInfo
|
|
435
732
|
);
|
|
436
733
|
if (!buildInfo.valueDependencies) {
|
|
@@ -440,13 +737,14 @@ class DefinePlugin {
|
|
|
440
737
|
});
|
|
441
738
|
|
|
442
739
|
/**
|
|
740
|
+
* Adds value dependency.
|
|
443
741
|
* @param {string} key key
|
|
444
742
|
*/
|
|
445
743
|
const addValueDependency = (key) => {
|
|
446
744
|
const buildInfo =
|
|
447
|
-
/** @type {
|
|
745
|
+
/** @type {NormalModuleBuildInfo} */
|
|
448
746
|
(parser.state.module.buildInfo);
|
|
449
|
-
/** @type {NonNullable<
|
|
747
|
+
/** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
|
|
450
748
|
(buildInfo.valueDependencies).set(
|
|
451
749
|
VALUE_DEP_PREFIX + key,
|
|
452
750
|
/** @type {ValueCacheVersion} */
|
|
@@ -455,6 +753,7 @@ class DefinePlugin {
|
|
|
455
753
|
};
|
|
456
754
|
|
|
457
755
|
/**
|
|
756
|
+
* With value dependency.
|
|
458
757
|
* @template T
|
|
459
758
|
* @param {string} key key
|
|
460
759
|
* @param {(expression: Expression) => T} fn fn
|
|
@@ -468,7 +767,7 @@ class DefinePlugin {
|
|
|
468
767
|
};
|
|
469
768
|
|
|
470
769
|
/**
|
|
471
|
-
*
|
|
770
|
+
* Processes the provided definition.
|
|
472
771
|
* @param {Definitions} definitions Definitions map
|
|
473
772
|
* @param {string} prefix Prefix string
|
|
474
773
|
* @returns {void}
|
|
@@ -476,12 +775,7 @@ class DefinePlugin {
|
|
|
476
775
|
const walkDefinitions = (definitions, prefix) => {
|
|
477
776
|
for (const key of Object.keys(definitions)) {
|
|
478
777
|
const code = definitions[key];
|
|
479
|
-
if (
|
|
480
|
-
code &&
|
|
481
|
-
typeof code === "object" &&
|
|
482
|
-
!(code instanceof RuntimeValue) &&
|
|
483
|
-
!(code instanceof RegExp)
|
|
484
|
-
) {
|
|
778
|
+
if (isObjectDefinition(code)) {
|
|
485
779
|
walkDefinitions(
|
|
486
780
|
/** @type {Definitions} */ (code),
|
|
487
781
|
`${prefix + key}.`
|
|
@@ -495,7 +789,7 @@ class DefinePlugin {
|
|
|
495
789
|
};
|
|
496
790
|
|
|
497
791
|
/**
|
|
498
|
-
*
|
|
792
|
+
* Processes the provided prefix.
|
|
499
793
|
* @param {string} prefix Prefix
|
|
500
794
|
* @param {string} key Key
|
|
501
795
|
* @returns {void}
|
|
@@ -505,6 +799,10 @@ class DefinePlugin {
|
|
|
505
799
|
const firstKey = splittedKey[0];
|
|
506
800
|
for (const [i, _] of splittedKey.slice(1).entries()) {
|
|
507
801
|
const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
|
|
802
|
+
// `import.meta` is a MetaProperty, not an identifier that can be
|
|
803
|
+
// aliased: an alias declaration would keep the raw MetaProperty
|
|
804
|
+
// in the output, so never enable renaming for its prefixes
|
|
805
|
+
if (fullKey === "import" || fullKey === "import.meta") continue;
|
|
508
806
|
parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
|
|
509
807
|
addValueDependency(key);
|
|
510
808
|
if (
|
|
@@ -517,7 +815,9 @@ class DefinePlugin {
|
|
|
517
815
|
}
|
|
518
816
|
if (prefix === "") {
|
|
519
817
|
const final = splittedKey[splittedKey.length - 1];
|
|
520
|
-
|
|
818
|
+
// aggregated over all instances so keys split across
|
|
819
|
+
// several DefinePlugins can still be destructured together
|
|
820
|
+
const nestedSet = mergedDefinitions.nestedByFinalKey.get(final);
|
|
521
821
|
if (!nestedSet || nestedSet.size <= 0) return;
|
|
522
822
|
for (const nested of /** @type {Set<string>} */ (nestedSet)) {
|
|
523
823
|
if (nested && !hooked.has(nested)) {
|
|
@@ -544,17 +844,19 @@ class DefinePlugin {
|
|
|
544
844
|
}
|
|
545
845
|
/** @type {Definitions} */
|
|
546
846
|
const obj = Object.create(null);
|
|
547
|
-
const finalSet =
|
|
847
|
+
const finalSet =
|
|
848
|
+
mergedDefinitions.finalByNestedKey.get(nested);
|
|
548
849
|
for (const { id } of destructed) {
|
|
549
850
|
const fullKey = `${nested}.${id}`;
|
|
550
851
|
if (
|
|
551
852
|
!finalSet ||
|
|
552
853
|
!finalSet.has(id) ||
|
|
553
|
-
!definitions[fullKey]
|
|
854
|
+
!mergedDefinitions.definitions[fullKey]
|
|
554
855
|
) {
|
|
555
856
|
return;
|
|
556
857
|
}
|
|
557
|
-
|
|
858
|
+
addValueDependency(fullKey);
|
|
859
|
+
obj[id] = mergedDefinitions.definitions[fullKey];
|
|
558
860
|
}
|
|
559
861
|
let strCode = stringifyObj(
|
|
560
862
|
obj,
|
|
@@ -580,7 +882,7 @@ class DefinePlugin {
|
|
|
580
882
|
};
|
|
581
883
|
|
|
582
884
|
/**
|
|
583
|
-
*
|
|
885
|
+
* Processes the provided key.
|
|
584
886
|
* @param {string} key Key
|
|
585
887
|
* @param {CodeValue} code Code
|
|
586
888
|
* @returns {void}
|
|
@@ -642,16 +944,11 @@ class DefinePlugin {
|
|
|
642
944
|
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
|
643
945
|
}
|
|
644
946
|
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
return toConstantDependency(parser, strCode, [
|
|
651
|
-
RuntimeGlobals.requireScope
|
|
652
|
-
])(expr);
|
|
653
|
-
}
|
|
654
|
-
return toConstantDependency(parser, strCode)(expr);
|
|
947
|
+
return toConstantDependency(
|
|
948
|
+
parser,
|
|
949
|
+
strCode,
|
|
950
|
+
getRuntimeRequirements(strCode)
|
|
951
|
+
)(expr);
|
|
655
952
|
});
|
|
656
953
|
}
|
|
657
954
|
parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, (expr) => {
|
|
@@ -683,17 +980,23 @@ class DefinePlugin {
|
|
|
683
980
|
});
|
|
684
981
|
parser.hooks.typeof.for(key).tap(PLUGIN_NAME, (expr) => {
|
|
685
982
|
addValueDependency(originalKey);
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
983
|
+
/** @type {BasicEvaluatedExpression} */
|
|
984
|
+
let res;
|
|
985
|
+
try {
|
|
986
|
+
const codeCode = toCode(
|
|
987
|
+
code,
|
|
988
|
+
parser,
|
|
989
|
+
compilation.valueCacheVersions,
|
|
990
|
+
originalKey,
|
|
991
|
+
runtimeTemplate,
|
|
992
|
+
logger,
|
|
993
|
+
null
|
|
994
|
+
);
|
|
995
|
+
const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
|
|
996
|
+
res = parser.evaluate(typeofCode);
|
|
997
|
+
} catch (err) {
|
|
998
|
+
throw annotateEvaluationError(originalKey, code, err);
|
|
999
|
+
}
|
|
697
1000
|
if (!res.isString()) return;
|
|
698
1001
|
return toConstantDependency(
|
|
699
1002
|
parser,
|
|
@@ -703,12 +1006,33 @@ class DefinePlugin {
|
|
|
703
1006
|
};
|
|
704
1007
|
|
|
705
1008
|
/**
|
|
706
|
-
*
|
|
1009
|
+
* Processes the provided key.
|
|
707
1010
|
* @param {string} key Key
|
|
708
1011
|
* @param {object} obj Object
|
|
709
1012
|
* @returns {void}
|
|
710
1013
|
*/
|
|
711
1014
|
const applyObjectDefine = (key, obj) => {
|
|
1015
|
+
const mergedNode = getMergedDefinitionNode(compilation, key);
|
|
1016
|
+
/** @type {MergedDefinitionNode} */
|
|
1017
|
+
const definition =
|
|
1018
|
+
mergedNode === undefined
|
|
1019
|
+
? /** @type {CodeValue} */ (obj)
|
|
1020
|
+
: mergedNode;
|
|
1021
|
+
// value dependencies of a whole-object read: the key itself and
|
|
1022
|
+
// every dotted definition key below it (from any instance)
|
|
1023
|
+
/** @type {[string, ValueCacheVersion][]} */
|
|
1024
|
+
const objectValueDependencies = [];
|
|
1025
|
+
for (const defKey of [
|
|
1026
|
+
key,
|
|
1027
|
+
...(mergedDefinitions.keysByPrefix.get(key) || [])
|
|
1028
|
+
]) {
|
|
1029
|
+
const name = VALUE_DEP_PREFIX + defKey;
|
|
1030
|
+
objectValueDependencies.push([
|
|
1031
|
+
name,
|
|
1032
|
+
/** @type {ValueCacheVersion} */
|
|
1033
|
+
(compilation.valueCacheVersions.get(name))
|
|
1034
|
+
]);
|
|
1035
|
+
}
|
|
712
1036
|
parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
|
|
713
1037
|
addValueDependency(key);
|
|
714
1038
|
return true;
|
|
@@ -736,33 +1060,144 @@ class DefinePlugin {
|
|
|
736
1060
|
}
|
|
737
1061
|
);
|
|
738
1062
|
parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
1063
|
+
const valueDependencies =
|
|
1064
|
+
/** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
|
|
1065
|
+
(
|
|
1066
|
+
/** @type {NormalModuleBuildInfo} */
|
|
1067
|
+
(parser.state.module.buildInfo).valueDependencies
|
|
1068
|
+
);
|
|
1069
|
+
for (const [name, version] of objectValueDependencies) {
|
|
1070
|
+
valueDependencies.set(name, version);
|
|
1071
|
+
}
|
|
1072
|
+
// render the merged view so dotted keys (of any instance)
|
|
1073
|
+
// are part of whole-object and destructured reads
|
|
1074
|
+
const objKeys = getObjKeys(
|
|
1075
|
+
parser.destructuringAssignmentPropertiesFor(expr)
|
|
1076
|
+
);
|
|
1077
|
+
const asiSafe = !parser.isAsiPosition(
|
|
1078
|
+
/** @type {Range} */ (expr.range)[0]
|
|
749
1079
|
);
|
|
1080
|
+
let strCode;
|
|
1081
|
+
if (definition instanceof Map) {
|
|
1082
|
+
const code = stringifyMergedNode(
|
|
1083
|
+
mergedDefinitions,
|
|
1084
|
+
definition,
|
|
1085
|
+
parser,
|
|
1086
|
+
key,
|
|
1087
|
+
objKeys
|
|
1088
|
+
);
|
|
1089
|
+
strCode = asiSafe ? `(${code})` : `;(${code})`;
|
|
1090
|
+
} else {
|
|
1091
|
+
strCode = toCode(
|
|
1092
|
+
definition,
|
|
1093
|
+
parser,
|
|
1094
|
+
compilation.valueCacheVersions,
|
|
1095
|
+
key,
|
|
1096
|
+
runtimeTemplate,
|
|
1097
|
+
logger,
|
|
1098
|
+
asiSafe,
|
|
1099
|
+
objKeys
|
|
1100
|
+
);
|
|
1101
|
+
}
|
|
750
1102
|
|
|
751
1103
|
if (parser.scope.inShorthand) {
|
|
752
1104
|
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
|
753
1105
|
}
|
|
754
1106
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
return toConstantDependency(parser, strCode, [
|
|
761
|
-
RuntimeGlobals.requireScope
|
|
762
|
-
])(expr);
|
|
763
|
-
}
|
|
764
|
-
return toConstantDependency(parser, strCode)(expr);
|
|
1107
|
+
return toConstantDependency(
|
|
1108
|
+
parser,
|
|
1109
|
+
strCode,
|
|
1110
|
+
getRuntimeRequirements(strCode)
|
|
1111
|
+
)(expr);
|
|
765
1112
|
});
|
|
1113
|
+
// A property access not defined on the object resolves to `undefined`
|
|
1114
|
+
// and the whole object is never inlined (issue #15559). Keyed by the
|
|
1115
|
+
// chain root so dotted object keys (e.g. `a.b`) are also covered.
|
|
1116
|
+
const chainParts = key.split(".");
|
|
1117
|
+
// `import.meta` is one chain root (a MetaProperty), not two members.
|
|
1118
|
+
const isMeta =
|
|
1119
|
+
chainParts[0] === "import" && chainParts[1] === "meta";
|
|
1120
|
+
const chainRoot = isMeta ? "import.meta" : chainParts[0];
|
|
1121
|
+
const chainPrefix = chainParts.slice(isMeta ? 2 : 1);
|
|
1122
|
+
/**
|
|
1123
|
+
* Whether a member chain reads a property that is not defined.
|
|
1124
|
+
* Walks the merged view so dotted keys of every instance count.
|
|
1125
|
+
* Collects every define key consulted so the caller can record a
|
|
1126
|
+
* value dependency on each (a sibling key like `OBJECT.SUB2` affects
|
|
1127
|
+
* the result even though `OBJECT` registered the handler).
|
|
1128
|
+
* Inherited members (e.g. `toString`) stay defined.
|
|
1129
|
+
* @param {Members} members chain members (after the root)
|
|
1130
|
+
* @param {string[]} deps consulted define keys (mutated)
|
|
1131
|
+
* @returns {boolean} true when the access resolves to `undefined`
|
|
1132
|
+
*/
|
|
1133
|
+
const isUndefinedMemberAccess = (members, deps) => {
|
|
1134
|
+
if (members.length <= chainPrefix.length) return false;
|
|
1135
|
+
for (let i = 0; i < chainPrefix.length; i++) {
|
|
1136
|
+
if (members[i] !== chainPrefix[i]) return false;
|
|
1137
|
+
}
|
|
1138
|
+
/** @type {MergedDefinitionNode | undefined} */
|
|
1139
|
+
let value = definition;
|
|
1140
|
+
let path = key;
|
|
1141
|
+
for (let i = chainPrefix.length; i < members.length; i++) {
|
|
1142
|
+
const member = members[i];
|
|
1143
|
+
const nextPath = `${path}.${member}`;
|
|
1144
|
+
if (value instanceof Map) {
|
|
1145
|
+
if (value.has(member)) {
|
|
1146
|
+
deps.push(nextPath);
|
|
1147
|
+
value = value.get(member);
|
|
1148
|
+
} else if (member in EMPTY_OBJECT) {
|
|
1149
|
+
return false;
|
|
1150
|
+
} else {
|
|
1151
|
+
return true;
|
|
1152
|
+
}
|
|
1153
|
+
} else if (isObjectDefinition(value)) {
|
|
1154
|
+
// non-expandable object leaf (e.g. an array)
|
|
1155
|
+
if (member in value) {
|
|
1156
|
+
value = /** @type {Definitions} */ (value)[member];
|
|
1157
|
+
} else if (
|
|
1158
|
+
Object.prototype.hasOwnProperty.call(
|
|
1159
|
+
mergedDefinitions.definitions,
|
|
1160
|
+
nextPath
|
|
1161
|
+
)
|
|
1162
|
+
) {
|
|
1163
|
+
// defined via a dotted sibling key, e.g. `OBJECT.SUB2`
|
|
1164
|
+
deps.push(nextPath);
|
|
1165
|
+
value = mergedDefinitions.definitions[nextPath];
|
|
1166
|
+
} else {
|
|
1167
|
+
return true;
|
|
1168
|
+
}
|
|
1169
|
+
} else {
|
|
1170
|
+
// a leaf with members left is a real property access on a value
|
|
1171
|
+
return false;
|
|
1172
|
+
}
|
|
1173
|
+
path = nextPath;
|
|
1174
|
+
}
|
|
1175
|
+
return false;
|
|
1176
|
+
};
|
|
1177
|
+
parser.hooks.expressionMemberChain
|
|
1178
|
+
.for(chainRoot)
|
|
1179
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1180
|
+
const deps = [key];
|
|
1181
|
+
if (!isUndefinedMemberAccess(members, deps)) return;
|
|
1182
|
+
for (const dep of deps) addValueDependency(dep);
|
|
1183
|
+
return toConstantDependency(parser, "undefined")(expr);
|
|
1184
|
+
});
|
|
1185
|
+
// In a call, replace only the callee so the call itself is kept:
|
|
1186
|
+
// `x.MISSING()` stays a (throwing) call and `x.MISSING?.()`
|
|
1187
|
+
// short-circuits, with the object never inlined.
|
|
1188
|
+
parser.hooks.callMemberChain
|
|
1189
|
+
.for(chainRoot)
|
|
1190
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1191
|
+
const deps = [key];
|
|
1192
|
+
if (!isUndefinedMemberAccess(members, deps)) return;
|
|
1193
|
+
for (const dep of deps) addValueDependency(dep);
|
|
1194
|
+
toConstantDependency(
|
|
1195
|
+
parser,
|
|
1196
|
+
"undefined"
|
|
1197
|
+
)(/** @type {Expression} */ (expr.callee));
|
|
1198
|
+
parser.walkExpressions(expr.arguments);
|
|
1199
|
+
return true;
|
|
1200
|
+
});
|
|
766
1201
|
parser.hooks.typeof
|
|
767
1202
|
.for(key)
|
|
768
1203
|
.tap(
|
|
@@ -788,7 +1223,7 @@ class DefinePlugin {
|
|
|
788
1223
|
.tap(PLUGIN_NAME, handler);
|
|
789
1224
|
|
|
790
1225
|
/**
|
|
791
|
-
*
|
|
1226
|
+
* Processes the provided definition.
|
|
792
1227
|
* @param {Definitions} definitions Definitions map
|
|
793
1228
|
* @param {string} prefix Prefix string
|
|
794
1229
|
* @returns {void}
|
|
@@ -810,12 +1245,7 @@ class DefinePlugin {
|
|
|
810
1245
|
warning.hideStack = true;
|
|
811
1246
|
compilation.warnings.push(warning);
|
|
812
1247
|
}
|
|
813
|
-
if (
|
|
814
|
-
code &&
|
|
815
|
-
typeof code === "object" &&
|
|
816
|
-
!(code instanceof RuntimeValue) &&
|
|
817
|
-
!(code instanceof RegExp)
|
|
818
|
-
) {
|
|
1248
|
+
if (isObjectDefinition(code)) {
|
|
819
1249
|
walkDefinitionsForValues(
|
|
820
1250
|
/** @type {Definitions} */ (code),
|
|
821
1251
|
`${prefix + key}.`
|
|
@@ -824,46 +1254,6 @@ class DefinePlugin {
|
|
|
824
1254
|
}
|
|
825
1255
|
};
|
|
826
1256
|
|
|
827
|
-
/**
|
|
828
|
-
* @param {Definitions} definitions Definitions map
|
|
829
|
-
* @returns {void}
|
|
830
|
-
*/
|
|
831
|
-
const walkDefinitionsForKeys = (definitions) => {
|
|
832
|
-
/**
|
|
833
|
-
* @param {Map<string, Set<string>>} map Map
|
|
834
|
-
* @param {string} key key
|
|
835
|
-
* @param {string} value v
|
|
836
|
-
* @returns {void}
|
|
837
|
-
*/
|
|
838
|
-
const addToMap = (map, key, value) => {
|
|
839
|
-
if (map.has(key)) {
|
|
840
|
-
/** @type {Set<string>} */
|
|
841
|
-
(map.get(key)).add(value);
|
|
842
|
-
} else {
|
|
843
|
-
map.set(key, new Set([value]));
|
|
844
|
-
}
|
|
845
|
-
};
|
|
846
|
-
for (const key of Object.keys(definitions)) {
|
|
847
|
-
const code = definitions[key];
|
|
848
|
-
if (
|
|
849
|
-
!code ||
|
|
850
|
-
typeof code === "object" ||
|
|
851
|
-
TYPEOF_OPERATOR_REGEXP.test(key)
|
|
852
|
-
) {
|
|
853
|
-
continue;
|
|
854
|
-
}
|
|
855
|
-
const idx = key.lastIndexOf(".");
|
|
856
|
-
if (idx <= 0 || idx >= key.length - 1) {
|
|
857
|
-
continue;
|
|
858
|
-
}
|
|
859
|
-
const nested = key.slice(0, idx);
|
|
860
|
-
const final = key.slice(idx + 1);
|
|
861
|
-
addToMap(finalByNestedKey, nested, final);
|
|
862
|
-
addToMap(nestedByFinalKey, final, nested);
|
|
863
|
-
}
|
|
864
|
-
};
|
|
865
|
-
|
|
866
|
-
walkDefinitionsForKeys(definitions);
|
|
867
1257
|
walkDefinitionsForValues(definitions, "");
|
|
868
1258
|
|
|
869
1259
|
compilation.valueCacheVersions.set(
|
|
@@ -875,4 +1265,12 @@ class DefinePlugin {
|
|
|
875
1265
|
}
|
|
876
1266
|
}
|
|
877
1267
|
|
|
1268
|
+
DefinePlugin.getCompilationHooks = createHooksRegistry(createCompilationHooks);
|
|
1269
|
+
|
|
878
1270
|
module.exports = DefinePlugin;
|
|
1271
|
+
module.exports.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
|
|
1272
|
+
module.exports.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
|
|
1273
|
+
module.exports.getMergedDefinitionNode = getMergedDefinitionNode;
|
|
1274
|
+
module.exports.getRuntimeRequirements = getRuntimeRequirements;
|
|
1275
|
+
module.exports.stringifyMergedDefinition = stringifyMergedDefinition;
|
|
1276
|
+
module.exports.toPropertyKey = toPropertyKey;
|