@depup/webpack 5.106.0-depup.0 → 5.109.0-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/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 +141 -9
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +23 -26
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +54 -37
- package/lib/Compilation.js +635 -107
- package/lib/Compiler.js +93 -31
- 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 +498 -127
- 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 +399 -108
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +376 -78
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +575 -149
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +92 -6
- 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 +15 -0
- 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 -60
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +5 -2
- 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 +485 -181
- package/lib/NormalModuleFactory.js +148 -29
- 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 +104 -26
- 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 +29 -3
- 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 +43 -7
- 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 +591 -41
- 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/ModuleFederationPlugin.js +12 -26
- 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 +534 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +156 -77
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +356 -204
- package/lib/css/CssParser.js +3452 -1950
- package/lib/css/syntax.js +4058 -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 +138 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -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 +682 -368
- 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 +32 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
- 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 +59 -3
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +426 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
- 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 +71 -49
- 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 +34 -8
- package/lib/html/HtmlGenerator.js +1470 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1111 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9020 -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 +25 -2
- 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 +579 -183
- package/lib/javascript/JavascriptParser.js +1289 -462
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +4380 -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 +23 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
- 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 +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +585 -116
- 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 +159 -34
- package/lib/optimize/RealContentHashPlugin.js +125 -50
- 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 +54 -6
- 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 +663 -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 +552 -463
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +50 -3
- 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 +94 -12
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
- package/lib/stats/StatsFactory.js +39 -18
- 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 +97 -6
- 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 +1117 -79
- 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 +8608 -1159
- 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,289 @@ 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+/;
|
|
357
|
+
const EMPTY_OBJECT = {};
|
|
358
|
+
|
|
359
|
+
/** @typedef {Map<string, MergedDefinitionNode>} MergedDefinitionMap */
|
|
360
|
+
/** @typedef {CodeValue | MergedDefinitionMap} MergedDefinitionNode */
|
|
361
|
+
|
|
362
|
+
/**
|
|
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
|
|
374
|
+
*/
|
|
375
|
+
|
|
376
|
+
/** @type {WeakMap<Compilation, MergedDefinitions>} */
|
|
377
|
+
const mergedDefinitionsMap = new WeakMap();
|
|
378
|
+
|
|
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
|
+
};
|
|
389
|
+
|
|
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();
|
|
473
|
+
/**
|
|
474
|
+
* @param {Map<string, Set<string>>} map map
|
|
475
|
+
* @param {string} key key
|
|
476
|
+
* @param {string} value value
|
|
477
|
+
*/
|
|
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]));
|
|
484
|
+
}
|
|
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);
|
|
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
|
+
};
|
|
613
|
+
|
|
333
614
|
const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
|
|
334
615
|
`${RuntimeGlobals.require}\\s*(!?\\.)`
|
|
335
616
|
);
|
|
336
|
-
const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
|
|
337
617
|
|
|
338
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
|
+
/**
|
|
632
|
+
* Defines the define plugin hooks type used by this module.
|
|
339
633
|
* @typedef {object} DefinePluginHooks
|
|
340
634
|
* @property {SyncWaterfallHook<[Record<string, CodeValue>]>} definitions
|
|
341
635
|
*/
|
|
342
636
|
|
|
343
637
|
/** @typedef {Record<string, CodeValue>} Definitions */
|
|
344
638
|
|
|
345
|
-
/** @type {WeakMap<Compilation, DefinePluginHooks>} */
|
|
346
|
-
const compilationHooksMap = new WeakMap();
|
|
347
|
-
|
|
348
639
|
class DefinePlugin {
|
|
349
|
-
/**
|
|
350
|
-
* @param {Compilation} compilation the compilation
|
|
351
|
-
* @returns {DefinePluginHooks} the attached hooks
|
|
352
|
-
*/
|
|
353
|
-
static getCompilationHooks(compilation) {
|
|
354
|
-
let hooks = compilationHooksMap.get(compilation);
|
|
355
|
-
if (hooks === undefined) {
|
|
356
|
-
hooks = {
|
|
357
|
-
definitions: new SyncWaterfallHook(["definitions"])
|
|
358
|
-
};
|
|
359
|
-
compilationHooksMap.set(compilation, hooks);
|
|
360
|
-
}
|
|
361
|
-
return hooks;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
640
|
/**
|
|
365
641
|
* Create a new define plugin
|
|
366
642
|
* @param {Definitions} definitions A map of global object definitions
|
|
@@ -371,6 +647,7 @@ class DefinePlugin {
|
|
|
371
647
|
}
|
|
372
648
|
|
|
373
649
|
/**
|
|
650
|
+
* Returns runtime value.
|
|
374
651
|
* @param {GeneratorFn} fn generator function
|
|
375
652
|
* @param {true | string[] | RuntimeValueOptions=} options options
|
|
376
653
|
* @returns {RuntimeValue} runtime value
|
|
@@ -380,7 +657,7 @@ class DefinePlugin {
|
|
|
380
657
|
}
|
|
381
658
|
|
|
382
659
|
/**
|
|
383
|
-
*
|
|
660
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
384
661
|
* @param {Compiler} compiler the compiler instance
|
|
385
662
|
* @returns {void}
|
|
386
663
|
*/
|
|
@@ -396,15 +673,6 @@ class DefinePlugin {
|
|
|
396
673
|
...definitions
|
|
397
674
|
}));
|
|
398
675
|
|
|
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
676
|
const logger = compilation.getLogger("webpack.DefinePlugin");
|
|
409
677
|
compilation.dependencyTemplates.set(
|
|
410
678
|
ConstDependency,
|
|
@@ -419,18 +687,21 @@ class DefinePlugin {
|
|
|
419
687
|
);
|
|
420
688
|
|
|
421
689
|
/**
|
|
422
|
-
*
|
|
690
|
+
* Handles the hook callback for this code path.
|
|
423
691
|
* @param {JavascriptParser} parser Parser
|
|
424
692
|
* @returns {void}
|
|
425
693
|
*/
|
|
426
694
|
const handler = (parser) => {
|
|
695
|
+
// built lazily here: every definitions hook is tapped by the time
|
|
696
|
+
// parsers are created, and the result is cached per compilation
|
|
697
|
+
const mergedDefinitions = getMergedDefinitions(compilation);
|
|
427
698
|
/** @type {Set<string>} */
|
|
428
699
|
const hooked = new Set();
|
|
429
700
|
const mainValue =
|
|
430
701
|
/** @type {ValueCacheVersion} */
|
|
431
702
|
(compilation.valueCacheVersions.get(VALUE_DEP_MAIN));
|
|
432
703
|
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
|
433
|
-
const buildInfo = /** @type {
|
|
704
|
+
const buildInfo = /** @type {NormalModuleBuildInfo} */ (
|
|
434
705
|
parser.state.module.buildInfo
|
|
435
706
|
);
|
|
436
707
|
if (!buildInfo.valueDependencies) {
|
|
@@ -440,13 +711,14 @@ class DefinePlugin {
|
|
|
440
711
|
});
|
|
441
712
|
|
|
442
713
|
/**
|
|
714
|
+
* Adds value dependency.
|
|
443
715
|
* @param {string} key key
|
|
444
716
|
*/
|
|
445
717
|
const addValueDependency = (key) => {
|
|
446
718
|
const buildInfo =
|
|
447
|
-
/** @type {
|
|
719
|
+
/** @type {NormalModuleBuildInfo} */
|
|
448
720
|
(parser.state.module.buildInfo);
|
|
449
|
-
/** @type {NonNullable<
|
|
721
|
+
/** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
|
|
450
722
|
(buildInfo.valueDependencies).set(
|
|
451
723
|
VALUE_DEP_PREFIX + key,
|
|
452
724
|
/** @type {ValueCacheVersion} */
|
|
@@ -455,6 +727,7 @@ class DefinePlugin {
|
|
|
455
727
|
};
|
|
456
728
|
|
|
457
729
|
/**
|
|
730
|
+
* With value dependency.
|
|
458
731
|
* @template T
|
|
459
732
|
* @param {string} key key
|
|
460
733
|
* @param {(expression: Expression) => T} fn fn
|
|
@@ -468,7 +741,7 @@ class DefinePlugin {
|
|
|
468
741
|
};
|
|
469
742
|
|
|
470
743
|
/**
|
|
471
|
-
*
|
|
744
|
+
* Processes the provided definition.
|
|
472
745
|
* @param {Definitions} definitions Definitions map
|
|
473
746
|
* @param {string} prefix Prefix string
|
|
474
747
|
* @returns {void}
|
|
@@ -476,12 +749,7 @@ class DefinePlugin {
|
|
|
476
749
|
const walkDefinitions = (definitions, prefix) => {
|
|
477
750
|
for (const key of Object.keys(definitions)) {
|
|
478
751
|
const code = definitions[key];
|
|
479
|
-
if (
|
|
480
|
-
code &&
|
|
481
|
-
typeof code === "object" &&
|
|
482
|
-
!(code instanceof RuntimeValue) &&
|
|
483
|
-
!(code instanceof RegExp)
|
|
484
|
-
) {
|
|
752
|
+
if (isObjectDefinition(code)) {
|
|
485
753
|
walkDefinitions(
|
|
486
754
|
/** @type {Definitions} */ (code),
|
|
487
755
|
`${prefix + key}.`
|
|
@@ -495,7 +763,7 @@ class DefinePlugin {
|
|
|
495
763
|
};
|
|
496
764
|
|
|
497
765
|
/**
|
|
498
|
-
*
|
|
766
|
+
* Processes the provided prefix.
|
|
499
767
|
* @param {string} prefix Prefix
|
|
500
768
|
* @param {string} key Key
|
|
501
769
|
* @returns {void}
|
|
@@ -505,6 +773,10 @@ class DefinePlugin {
|
|
|
505
773
|
const firstKey = splittedKey[0];
|
|
506
774
|
for (const [i, _] of splittedKey.slice(1).entries()) {
|
|
507
775
|
const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
|
|
776
|
+
// `import.meta` is a MetaProperty, not an identifier that can be
|
|
777
|
+
// aliased: an alias declaration would keep the raw MetaProperty
|
|
778
|
+
// in the output, so never enable renaming for its prefixes
|
|
779
|
+
if (fullKey === "import" || fullKey === "import.meta") continue;
|
|
508
780
|
parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
|
|
509
781
|
addValueDependency(key);
|
|
510
782
|
if (
|
|
@@ -517,7 +789,9 @@ class DefinePlugin {
|
|
|
517
789
|
}
|
|
518
790
|
if (prefix === "") {
|
|
519
791
|
const final = splittedKey[splittedKey.length - 1];
|
|
520
|
-
|
|
792
|
+
// aggregated over all instances so keys split across
|
|
793
|
+
// several DefinePlugins can still be destructured together
|
|
794
|
+
const nestedSet = mergedDefinitions.nestedByFinalKey.get(final);
|
|
521
795
|
if (!nestedSet || nestedSet.size <= 0) return;
|
|
522
796
|
for (const nested of /** @type {Set<string>} */ (nestedSet)) {
|
|
523
797
|
if (nested && !hooked.has(nested)) {
|
|
@@ -544,17 +818,19 @@ class DefinePlugin {
|
|
|
544
818
|
}
|
|
545
819
|
/** @type {Definitions} */
|
|
546
820
|
const obj = Object.create(null);
|
|
547
|
-
const finalSet =
|
|
821
|
+
const finalSet =
|
|
822
|
+
mergedDefinitions.finalByNestedKey.get(nested);
|
|
548
823
|
for (const { id } of destructed) {
|
|
549
824
|
const fullKey = `${nested}.${id}`;
|
|
550
825
|
if (
|
|
551
826
|
!finalSet ||
|
|
552
827
|
!finalSet.has(id) ||
|
|
553
|
-
!definitions[fullKey]
|
|
828
|
+
!mergedDefinitions.definitions[fullKey]
|
|
554
829
|
) {
|
|
555
830
|
return;
|
|
556
831
|
}
|
|
557
|
-
|
|
832
|
+
addValueDependency(fullKey);
|
|
833
|
+
obj[id] = mergedDefinitions.definitions[fullKey];
|
|
558
834
|
}
|
|
559
835
|
let strCode = stringifyObj(
|
|
560
836
|
obj,
|
|
@@ -580,7 +856,7 @@ class DefinePlugin {
|
|
|
580
856
|
};
|
|
581
857
|
|
|
582
858
|
/**
|
|
583
|
-
*
|
|
859
|
+
* Processes the provided key.
|
|
584
860
|
* @param {string} key Key
|
|
585
861
|
* @param {CodeValue} code Code
|
|
586
862
|
* @returns {void}
|
|
@@ -642,16 +918,11 @@ class DefinePlugin {
|
|
|
642
918
|
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
|
643
919
|
}
|
|
644
920
|
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
return toConstantDependency(parser, strCode, [
|
|
651
|
-
RuntimeGlobals.requireScope
|
|
652
|
-
])(expr);
|
|
653
|
-
}
|
|
654
|
-
return toConstantDependency(parser, strCode)(expr);
|
|
921
|
+
return toConstantDependency(
|
|
922
|
+
parser,
|
|
923
|
+
strCode,
|
|
924
|
+
getRuntimeRequirements(strCode)
|
|
925
|
+
)(expr);
|
|
655
926
|
});
|
|
656
927
|
}
|
|
657
928
|
parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, (expr) => {
|
|
@@ -703,12 +974,33 @@ class DefinePlugin {
|
|
|
703
974
|
};
|
|
704
975
|
|
|
705
976
|
/**
|
|
706
|
-
*
|
|
977
|
+
* Processes the provided key.
|
|
707
978
|
* @param {string} key Key
|
|
708
979
|
* @param {object} obj Object
|
|
709
980
|
* @returns {void}
|
|
710
981
|
*/
|
|
711
982
|
const applyObjectDefine = (key, obj) => {
|
|
983
|
+
const mergedNode = getMergedDefinitionNode(compilation, key);
|
|
984
|
+
/** @type {MergedDefinitionNode} */
|
|
985
|
+
const definition =
|
|
986
|
+
mergedNode === undefined
|
|
987
|
+
? /** @type {CodeValue} */ (obj)
|
|
988
|
+
: mergedNode;
|
|
989
|
+
// value dependencies of a whole-object read: the key itself and
|
|
990
|
+
// every dotted definition key below it (from any instance)
|
|
991
|
+
/** @type {[string, ValueCacheVersion][]} */
|
|
992
|
+
const objectValueDependencies = [];
|
|
993
|
+
for (const defKey of [
|
|
994
|
+
key,
|
|
995
|
+
...(mergedDefinitions.keysByPrefix.get(key) || [])
|
|
996
|
+
]) {
|
|
997
|
+
const name = VALUE_DEP_PREFIX + defKey;
|
|
998
|
+
objectValueDependencies.push([
|
|
999
|
+
name,
|
|
1000
|
+
/** @type {ValueCacheVersion} */
|
|
1001
|
+
(compilation.valueCacheVersions.get(name))
|
|
1002
|
+
]);
|
|
1003
|
+
}
|
|
712
1004
|
parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
|
|
713
1005
|
addValueDependency(key);
|
|
714
1006
|
return true;
|
|
@@ -736,33 +1028,144 @@ class DefinePlugin {
|
|
|
736
1028
|
}
|
|
737
1029
|
);
|
|
738
1030
|
parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
1031
|
+
const valueDependencies =
|
|
1032
|
+
/** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
|
|
1033
|
+
(
|
|
1034
|
+
/** @type {NormalModuleBuildInfo} */
|
|
1035
|
+
(parser.state.module.buildInfo).valueDependencies
|
|
1036
|
+
);
|
|
1037
|
+
for (const [name, version] of objectValueDependencies) {
|
|
1038
|
+
valueDependencies.set(name, version);
|
|
1039
|
+
}
|
|
1040
|
+
// render the merged view so dotted keys (of any instance)
|
|
1041
|
+
// are part of whole-object and destructured reads
|
|
1042
|
+
const objKeys = getObjKeys(
|
|
1043
|
+
parser.destructuringAssignmentPropertiesFor(expr)
|
|
749
1044
|
);
|
|
1045
|
+
const asiSafe = !parser.isAsiPosition(
|
|
1046
|
+
/** @type {Range} */ (expr.range)[0]
|
|
1047
|
+
);
|
|
1048
|
+
let strCode;
|
|
1049
|
+
if (definition instanceof Map) {
|
|
1050
|
+
const code = stringifyMergedNode(
|
|
1051
|
+
mergedDefinitions,
|
|
1052
|
+
definition,
|
|
1053
|
+
parser,
|
|
1054
|
+
key,
|
|
1055
|
+
objKeys
|
|
1056
|
+
);
|
|
1057
|
+
strCode = asiSafe ? `(${code})` : `;(${code})`;
|
|
1058
|
+
} else {
|
|
1059
|
+
strCode = toCode(
|
|
1060
|
+
definition,
|
|
1061
|
+
parser,
|
|
1062
|
+
compilation.valueCacheVersions,
|
|
1063
|
+
key,
|
|
1064
|
+
runtimeTemplate,
|
|
1065
|
+
logger,
|
|
1066
|
+
asiSafe,
|
|
1067
|
+
objKeys
|
|
1068
|
+
);
|
|
1069
|
+
}
|
|
750
1070
|
|
|
751
1071
|
if (parser.scope.inShorthand) {
|
|
752
1072
|
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
|
753
1073
|
}
|
|
754
1074
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
return toConstantDependency(parser, strCode, [
|
|
761
|
-
RuntimeGlobals.requireScope
|
|
762
|
-
])(expr);
|
|
763
|
-
}
|
|
764
|
-
return toConstantDependency(parser, strCode)(expr);
|
|
1075
|
+
return toConstantDependency(
|
|
1076
|
+
parser,
|
|
1077
|
+
strCode,
|
|
1078
|
+
getRuntimeRequirements(strCode)
|
|
1079
|
+
)(expr);
|
|
765
1080
|
});
|
|
1081
|
+
// A property access not defined on the object resolves to `undefined`
|
|
1082
|
+
// and the whole object is never inlined (issue #15559). Keyed by the
|
|
1083
|
+
// chain root so dotted object keys (e.g. `a.b`) are also covered.
|
|
1084
|
+
const chainParts = key.split(".");
|
|
1085
|
+
// `import.meta` is one chain root (a MetaProperty), not two members.
|
|
1086
|
+
const isMeta =
|
|
1087
|
+
chainParts[0] === "import" && chainParts[1] === "meta";
|
|
1088
|
+
const chainRoot = isMeta ? "import.meta" : chainParts[0];
|
|
1089
|
+
const chainPrefix = chainParts.slice(isMeta ? 2 : 1);
|
|
1090
|
+
/**
|
|
1091
|
+
* Whether a member chain reads a property that is not defined.
|
|
1092
|
+
* Walks the merged view so dotted keys of every instance count.
|
|
1093
|
+
* Collects every define key consulted so the caller can record a
|
|
1094
|
+
* value dependency on each (a sibling key like `OBJECT.SUB2` affects
|
|
1095
|
+
* the result even though `OBJECT` registered the handler).
|
|
1096
|
+
* Inherited members (e.g. `toString`) stay defined.
|
|
1097
|
+
* @param {Members} members chain members (after the root)
|
|
1098
|
+
* @param {string[]} deps consulted define keys (mutated)
|
|
1099
|
+
* @returns {boolean} true when the access resolves to `undefined`
|
|
1100
|
+
*/
|
|
1101
|
+
const isUndefinedMemberAccess = (members, deps) => {
|
|
1102
|
+
if (members.length <= chainPrefix.length) return false;
|
|
1103
|
+
for (let i = 0; i < chainPrefix.length; i++) {
|
|
1104
|
+
if (members[i] !== chainPrefix[i]) return false;
|
|
1105
|
+
}
|
|
1106
|
+
/** @type {MergedDefinitionNode | undefined} */
|
|
1107
|
+
let value = definition;
|
|
1108
|
+
let path = key;
|
|
1109
|
+
for (let i = chainPrefix.length; i < members.length; i++) {
|
|
1110
|
+
const member = members[i];
|
|
1111
|
+
const nextPath = `${path}.${member}`;
|
|
1112
|
+
if (value instanceof Map) {
|
|
1113
|
+
if (value.has(member)) {
|
|
1114
|
+
deps.push(nextPath);
|
|
1115
|
+
value = value.get(member);
|
|
1116
|
+
} else if (member in EMPTY_OBJECT) {
|
|
1117
|
+
return false;
|
|
1118
|
+
} else {
|
|
1119
|
+
return true;
|
|
1120
|
+
}
|
|
1121
|
+
} else if (isObjectDefinition(value)) {
|
|
1122
|
+
// non-expandable object leaf (e.g. an array)
|
|
1123
|
+
if (member in value) {
|
|
1124
|
+
value = /** @type {Definitions} */ (value)[member];
|
|
1125
|
+
} else if (
|
|
1126
|
+
Object.prototype.hasOwnProperty.call(
|
|
1127
|
+
mergedDefinitions.definitions,
|
|
1128
|
+
nextPath
|
|
1129
|
+
)
|
|
1130
|
+
) {
|
|
1131
|
+
// defined via a dotted sibling key, e.g. `OBJECT.SUB2`
|
|
1132
|
+
deps.push(nextPath);
|
|
1133
|
+
value = mergedDefinitions.definitions[nextPath];
|
|
1134
|
+
} else {
|
|
1135
|
+
return true;
|
|
1136
|
+
}
|
|
1137
|
+
} else {
|
|
1138
|
+
// a leaf with members left is a real property access on a value
|
|
1139
|
+
return false;
|
|
1140
|
+
}
|
|
1141
|
+
path = nextPath;
|
|
1142
|
+
}
|
|
1143
|
+
return false;
|
|
1144
|
+
};
|
|
1145
|
+
parser.hooks.expressionMemberChain
|
|
1146
|
+
.for(chainRoot)
|
|
1147
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1148
|
+
const deps = [key];
|
|
1149
|
+
if (!isUndefinedMemberAccess(members, deps)) return;
|
|
1150
|
+
for (const dep of deps) addValueDependency(dep);
|
|
1151
|
+
return toConstantDependency(parser, "undefined")(expr);
|
|
1152
|
+
});
|
|
1153
|
+
// In a call, replace only the callee so the call itself is kept:
|
|
1154
|
+
// `x.MISSING()` stays a (throwing) call and `x.MISSING?.()`
|
|
1155
|
+
// short-circuits, with the object never inlined.
|
|
1156
|
+
parser.hooks.callMemberChain
|
|
1157
|
+
.for(chainRoot)
|
|
1158
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1159
|
+
const deps = [key];
|
|
1160
|
+
if (!isUndefinedMemberAccess(members, deps)) return;
|
|
1161
|
+
for (const dep of deps) addValueDependency(dep);
|
|
1162
|
+
toConstantDependency(
|
|
1163
|
+
parser,
|
|
1164
|
+
"undefined"
|
|
1165
|
+
)(/** @type {Expression} */ (expr.callee));
|
|
1166
|
+
parser.walkExpressions(expr.arguments);
|
|
1167
|
+
return true;
|
|
1168
|
+
});
|
|
766
1169
|
parser.hooks.typeof
|
|
767
1170
|
.for(key)
|
|
768
1171
|
.tap(
|
|
@@ -788,7 +1191,7 @@ class DefinePlugin {
|
|
|
788
1191
|
.tap(PLUGIN_NAME, handler);
|
|
789
1192
|
|
|
790
1193
|
/**
|
|
791
|
-
*
|
|
1194
|
+
* Processes the provided definition.
|
|
792
1195
|
* @param {Definitions} definitions Definitions map
|
|
793
1196
|
* @param {string} prefix Prefix string
|
|
794
1197
|
* @returns {void}
|
|
@@ -810,12 +1213,7 @@ class DefinePlugin {
|
|
|
810
1213
|
warning.hideStack = true;
|
|
811
1214
|
compilation.warnings.push(warning);
|
|
812
1215
|
}
|
|
813
|
-
if (
|
|
814
|
-
code &&
|
|
815
|
-
typeof code === "object" &&
|
|
816
|
-
!(code instanceof RuntimeValue) &&
|
|
817
|
-
!(code instanceof RegExp)
|
|
818
|
-
) {
|
|
1216
|
+
if (isObjectDefinition(code)) {
|
|
819
1217
|
walkDefinitionsForValues(
|
|
820
1218
|
/** @type {Definitions} */ (code),
|
|
821
1219
|
`${prefix + key}.`
|
|
@@ -824,46 +1222,6 @@ class DefinePlugin {
|
|
|
824
1222
|
}
|
|
825
1223
|
};
|
|
826
1224
|
|
|
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
1225
|
walkDefinitionsForValues(definitions, "");
|
|
868
1226
|
|
|
869
1227
|
compilation.valueCacheVersions.set(
|
|
@@ -875,4 +1233,17 @@ class DefinePlugin {
|
|
|
875
1233
|
}
|
|
876
1234
|
}
|
|
877
1235
|
|
|
1236
|
+
DefinePlugin.getCompilationHooks = createHooksRegistry(
|
|
1237
|
+
() =>
|
|
1238
|
+
/** @type {DefinePluginHooks} */ ({
|
|
1239
|
+
definitions: new SyncWaterfallHook(["definitions"])
|
|
1240
|
+
})
|
|
1241
|
+
);
|
|
1242
|
+
|
|
878
1243
|
module.exports = DefinePlugin;
|
|
1244
|
+
module.exports.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
|
|
1245
|
+
module.exports.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
|
|
1246
|
+
module.exports.getMergedDefinitionNode = getMergedDefinitionNode;
|
|
1247
|
+
module.exports.getRuntimeRequirements = getRuntimeRequirements;
|
|
1248
|
+
module.exports.stringifyMergedDefinition = stringifyMergedDefinition;
|
|
1249
|
+
module.exports.toPropertyKey = toPropertyKey;
|