@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/ExportsInfo.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
|
|
9
|
+
const { InlinedUsedName } = require("./optimize/InlineExports");
|
|
9
10
|
const { equals } = require("./util/ArrayHelpers");
|
|
10
11
|
const SortableSet = require("./util/SortableSet");
|
|
11
12
|
const makeSerializable = require("./util/makeSerializable");
|
|
@@ -19,8 +20,10 @@ const { forEachRuntime } = require("./util/runtime");
|
|
|
19
20
|
/** @typedef {import("./Module")} Module */
|
|
20
21
|
/** @typedef {import("./ModuleGraph")} ModuleGraph */
|
|
21
22
|
/** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
|
|
22
|
-
/** @typedef {import("./
|
|
23
|
-
/** @typedef {
|
|
23
|
+
/** @typedef {import("./optimize/InlineExports").InlinedValue} InlinedValue */
|
|
24
|
+
/** @typedef {[RestoreProvidedDataExports[], ExportInfo["provided"], ExportInfo["canMangleProvide"], ExportInfo["terminalBinding"]]} RestoreProvidedDataTuple */
|
|
25
|
+
/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext<RestoreProvidedDataTuple>} ObjectDeserializerContext */
|
|
26
|
+
/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext<RestoreProvidedDataTuple>} ObjectSerializerContext */
|
|
24
27
|
/** @typedef {import("./util/Hash")} Hash */
|
|
25
28
|
|
|
26
29
|
/** @typedef {typeof UsageState.OnlyPropertiesUsed | typeof UsageState.NoInfo | typeof UsageState.Unknown | typeof UsageState.Used} RuntimeUsageStateType */
|
|
@@ -34,19 +37,22 @@ const { forEachRuntime } = require("./util/runtime");
|
|
|
34
37
|
/** @typedef {{ connection: ModuleGraphConnection, export: ExportInfoName[], priority: number }} TargetItem */
|
|
35
38
|
/** @typedef {Map<Dependency | undefined, TargetItem>} Target */
|
|
36
39
|
|
|
37
|
-
/** @typedef {string | null} ExportInfoUsedName */
|
|
40
|
+
/** @typedef {string | InlinedUsedName | null} ExportInfoUsedName */
|
|
38
41
|
/** @typedef {boolean | null} ExportInfoProvided */
|
|
39
42
|
|
|
40
43
|
/** @typedef {Map<ExportInfoName, ExportInfo>} Exports */
|
|
41
|
-
/** @typedef {string | string[] | false} UsedName */
|
|
44
|
+
/** @typedef {string | string[] | InlinedUsedName | false} UsedName */
|
|
42
45
|
/** @typedef {Set<ExportInfo>} AlreadyVisitedExportInfo */
|
|
43
46
|
|
|
44
47
|
/**
|
|
48
|
+
* Defines the restore provided data exports type used by this module.
|
|
45
49
|
* @typedef {object} RestoreProvidedDataExports
|
|
46
50
|
* @property {ExportInfoName} name
|
|
47
51
|
* @property {ExportInfo["provided"]} provided
|
|
48
52
|
* @property {ExportInfo["canMangleProvide"]} canMangleProvide
|
|
53
|
+
* @property {ExportInfo["canInlineProvide"]=} canInlineProvide
|
|
49
54
|
* @property {ExportInfo["terminalBinding"]} terminalBinding
|
|
55
|
+
* @property {ExportInfo["pureProvide"]=} pureProvide
|
|
50
56
|
* @property {RestoreProvidedData | undefined} exportsInfo
|
|
51
57
|
*/
|
|
52
58
|
|
|
@@ -60,10 +66,22 @@ const UsageState = Object.freeze({
|
|
|
60
66
|
|
|
61
67
|
const RETURNS_TRUE = () => true;
|
|
62
68
|
|
|
69
|
+
// Shared empty visited-set for `findTarget`: `_findTarget` only reads
|
|
70
|
+
// `alreadyVisited` (`.has`), never mutates it, so a fresh `new Set()` per call
|
|
71
|
+
// is pure churn on the per-export reexport hot path. Must stay never-mutated.
|
|
72
|
+
const EMPTY_VISITED = /** @type {Set<ExportInfo>} */ (new Set());
|
|
73
|
+
|
|
63
74
|
const CIRCULAR = Symbol("circular target");
|
|
64
75
|
|
|
76
|
+
// bit layout of ExportInfo._inlineFlags
|
|
77
|
+
const INLINE_USE_TRUE = 1;
|
|
78
|
+
const INLINE_USE_FALSE = 2;
|
|
79
|
+
const INLINE_USE_MASK = 3;
|
|
80
|
+
const PURE_PROVIDE_FLAG = 4;
|
|
81
|
+
|
|
65
82
|
class RestoreProvidedData {
|
|
66
83
|
/**
|
|
84
|
+
* Creates an instance of RestoreProvidedData.
|
|
67
85
|
* @param {RestoreProvidedDataExports[]} exports exports
|
|
68
86
|
* @param {ExportInfo["provided"]} otherProvided other provided
|
|
69
87
|
* @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
|
|
@@ -75,28 +93,47 @@ class RestoreProvidedData {
|
|
|
75
93
|
otherCanMangleProvide,
|
|
76
94
|
otherTerminalBinding
|
|
77
95
|
) {
|
|
96
|
+
/** @type {RestoreProvidedDataExports[]} */
|
|
78
97
|
this.exports = exports;
|
|
98
|
+
/** @type {ExportInfoProvided | undefined} */
|
|
79
99
|
this.otherProvided = otherProvided;
|
|
100
|
+
/** @type {boolean | undefined} */
|
|
80
101
|
this.otherCanMangleProvide = otherCanMangleProvide;
|
|
102
|
+
/** @type {boolean} */
|
|
81
103
|
this.otherTerminalBinding = otherTerminalBinding;
|
|
82
104
|
}
|
|
83
105
|
|
|
84
106
|
/**
|
|
107
|
+
* Serializes this instance into the provided serializer context.
|
|
85
108
|
* @param {ObjectSerializerContext} context context
|
|
86
109
|
*/
|
|
87
|
-
serialize(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
110
|
+
serialize(context) {
|
|
111
|
+
context
|
|
112
|
+
.write(this.exports)
|
|
113
|
+
.write(this.otherProvided)
|
|
114
|
+
.write(this.otherCanMangleProvide)
|
|
115
|
+
.write(this.otherTerminalBinding);
|
|
92
116
|
}
|
|
93
117
|
|
|
94
118
|
/**
|
|
119
|
+
* Restores this instance from the provided deserializer context.
|
|
95
120
|
* @param {ObjectDeserializerContext} context context
|
|
96
121
|
* @returns {RestoreProvidedData} RestoreProvidedData
|
|
97
122
|
*/
|
|
98
|
-
static deserialize(
|
|
99
|
-
|
|
123
|
+
static deserialize(context) {
|
|
124
|
+
const exports = context.read();
|
|
125
|
+
const c1 = context.rest;
|
|
126
|
+
const otherProvided = c1.read();
|
|
127
|
+
const c2 = c1.rest;
|
|
128
|
+
const otherCanMangleProvide = c2.read();
|
|
129
|
+
const c3 = c2.rest;
|
|
130
|
+
const otherTerminalBinding = c3.read();
|
|
131
|
+
return new RestoreProvidedData(
|
|
132
|
+
exports,
|
|
133
|
+
otherProvided,
|
|
134
|
+
otherCanMangleProvide,
|
|
135
|
+
otherTerminalBinding
|
|
136
|
+
);
|
|
100
137
|
}
|
|
101
138
|
}
|
|
102
139
|
|
|
@@ -110,6 +147,21 @@ class ExportsInfo {
|
|
|
110
147
|
constructor() {
|
|
111
148
|
/** @type {Exports} */
|
|
112
149
|
this._exports = new Map();
|
|
150
|
+
|
|
151
|
+
// `_otherExportsInfo` is a fallback entry for unlisted exports. Two roles:
|
|
152
|
+
// 1. factory template — `getExportInfo` creates `new ExportInfo(name, this)`,
|
|
153
|
+
// so created export info extends its properties.
|
|
154
|
+
// 2. flags whether the whole exportsInfo can be statically analyzed.
|
|
155
|
+
// Its `used` reachable values:
|
|
156
|
+
// - NoInfo: no use analysis yet (`optimization#usedExports` off), or used without info
|
|
157
|
+
// - Unused: analyzed, no unlisted export needed
|
|
158
|
+
// - Unknown: used in unknown way
|
|
159
|
+
// - Used/OnlyPropertiesUsed: never reached
|
|
160
|
+
// Its `provided` reachable values:
|
|
161
|
+
// - undefined: provision not determined yet
|
|
162
|
+
// - false: determined, no unlisted export is provided
|
|
163
|
+
// - null: only runtime knows (dynamic/unknown exports)
|
|
164
|
+
// - true: never reached
|
|
113
165
|
/** @type {ExportInfo} */
|
|
114
166
|
this._otherExportsInfo = new ExportInfo(null);
|
|
115
167
|
/** @type {ExportInfo} */
|
|
@@ -118,9 +170,21 @@ class ExportsInfo {
|
|
|
118
170
|
this._exportsAreOrdered = false;
|
|
119
171
|
/** @type {ExportsInfo=} */
|
|
120
172
|
this._redirectTo = undefined;
|
|
173
|
+
// fast-path flag for hasInlinedUsedName; set by InlineExportsPlugin
|
|
174
|
+
/** @type {boolean} */
|
|
175
|
+
this._hasInlinedExports = false;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Records that an owned export got an inlined used name.
|
|
180
|
+
* @returns {void}
|
|
181
|
+
*/
|
|
182
|
+
markInlinedExports() {
|
|
183
|
+
this._hasInlinedExports = true;
|
|
121
184
|
}
|
|
122
185
|
|
|
123
186
|
/**
|
|
187
|
+
* Gets owned exports.
|
|
124
188
|
* @returns {Iterable<ExportInfo>} all owned exports in any order
|
|
125
189
|
*/
|
|
126
190
|
get ownedExports() {
|
|
@@ -128,6 +192,7 @@ class ExportsInfo {
|
|
|
128
192
|
}
|
|
129
193
|
|
|
130
194
|
/**
|
|
195
|
+
* Gets ordered owned exports.
|
|
131
196
|
* @returns {Iterable<ExportInfo>} all owned exports in order
|
|
132
197
|
*/
|
|
133
198
|
get orderedOwnedExports() {
|
|
@@ -138,6 +203,7 @@ class ExportsInfo {
|
|
|
138
203
|
}
|
|
139
204
|
|
|
140
205
|
/**
|
|
206
|
+
* Returns all exports in any order.
|
|
141
207
|
* @returns {Iterable<ExportInfo>} all exports in any order
|
|
142
208
|
*/
|
|
143
209
|
get exports() {
|
|
@@ -152,6 +218,7 @@ class ExportsInfo {
|
|
|
152
218
|
}
|
|
153
219
|
|
|
154
220
|
/**
|
|
221
|
+
* Gets ordered exports.
|
|
155
222
|
* @returns {Iterable<ExportInfo>} all exports in order
|
|
156
223
|
*/
|
|
157
224
|
get orderedExports() {
|
|
@@ -175,6 +242,7 @@ class ExportsInfo {
|
|
|
175
242
|
}
|
|
176
243
|
|
|
177
244
|
/**
|
|
245
|
+
* Gets other exports info.
|
|
178
246
|
* @returns {ExportInfo} the export info of unlisted exports
|
|
179
247
|
*/
|
|
180
248
|
get otherExportsInfo() {
|
|
@@ -185,6 +253,7 @@ class ExportsInfo {
|
|
|
185
253
|
}
|
|
186
254
|
|
|
187
255
|
/**
|
|
256
|
+
* Processes the provided export.
|
|
188
257
|
* @param {Exports} exports exports
|
|
189
258
|
* @private
|
|
190
259
|
*/
|
|
@@ -217,6 +286,7 @@ class ExportsInfo {
|
|
|
217
286
|
}
|
|
218
287
|
|
|
219
288
|
/**
|
|
289
|
+
* Sets redirect named to.
|
|
220
290
|
* @param {ExportsInfo | undefined} exportsInfo exports info
|
|
221
291
|
* @returns {boolean} result
|
|
222
292
|
*/
|
|
@@ -228,22 +298,12 @@ class ExportsInfo {
|
|
|
228
298
|
|
|
229
299
|
setHasProvideInfo() {
|
|
230
300
|
for (const exportInfo of this._exports.values()) {
|
|
231
|
-
|
|
232
|
-
exportInfo.provided = false;
|
|
233
|
-
}
|
|
234
|
-
if (exportInfo.canMangleProvide === undefined) {
|
|
235
|
-
exportInfo.canMangleProvide = true;
|
|
236
|
-
}
|
|
301
|
+
exportInfo.setHasProvideInfo();
|
|
237
302
|
}
|
|
238
303
|
if (this._redirectTo !== undefined) {
|
|
239
304
|
this._redirectTo.setHasProvideInfo();
|
|
240
305
|
} else {
|
|
241
|
-
|
|
242
|
-
this._otherExportsInfo.provided = false;
|
|
243
|
-
}
|
|
244
|
-
if (this._otherExportsInfo.canMangleProvide === undefined) {
|
|
245
|
-
this._otherExportsInfo.canMangleProvide = true;
|
|
246
|
-
}
|
|
306
|
+
this._otherExportsInfo.setHasProvideInfo();
|
|
247
307
|
}
|
|
248
308
|
}
|
|
249
309
|
|
|
@@ -260,6 +320,7 @@ class ExportsInfo {
|
|
|
260
320
|
}
|
|
261
321
|
|
|
262
322
|
/**
|
|
323
|
+
* Gets own export info.
|
|
263
324
|
* @param {ExportInfoName} name export name
|
|
264
325
|
* @returns {ExportInfo} export info for this name
|
|
265
326
|
*/
|
|
@@ -273,6 +334,7 @@ class ExportsInfo {
|
|
|
273
334
|
}
|
|
274
335
|
|
|
275
336
|
/**
|
|
337
|
+
* Returns export info for this name.
|
|
276
338
|
* @param {ExportInfoName} name export name
|
|
277
339
|
* @returns {ExportInfo} export info for this name
|
|
278
340
|
*/
|
|
@@ -289,6 +351,7 @@ class ExportsInfo {
|
|
|
289
351
|
}
|
|
290
352
|
|
|
291
353
|
/**
|
|
354
|
+
* Gets read only export info.
|
|
292
355
|
* @param {ExportInfoName} name export name
|
|
293
356
|
* @returns {ExportInfo} export info for this name
|
|
294
357
|
*/
|
|
@@ -302,30 +365,43 @@ class ExportsInfo {
|
|
|
302
365
|
}
|
|
303
366
|
|
|
304
367
|
/**
|
|
368
|
+
* Gets read only export info recursive.
|
|
305
369
|
* @param {ExportInfoName[]} name export name
|
|
306
370
|
* @returns {ExportInfo | undefined} export info for this name
|
|
307
371
|
*/
|
|
308
372
|
getReadOnlyExportInfoRecursive(name) {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
373
|
+
/** @type {ExportsInfo} */
|
|
374
|
+
let exportsInfo = this;
|
|
375
|
+
const last = name.length - 1;
|
|
376
|
+
for (let i = 0; ; i++) {
|
|
377
|
+
const exportInfo = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
378
|
+
if (i === last) return exportInfo;
|
|
379
|
+
if (!exportInfo.exportsInfo) return;
|
|
380
|
+
exportsInfo = exportInfo.exportsInfo;
|
|
381
|
+
}
|
|
313
382
|
}
|
|
314
383
|
|
|
315
384
|
/**
|
|
385
|
+
* Gets nested exports info.
|
|
316
386
|
* @param {ExportInfoName[]=} name the export name
|
|
317
387
|
* @returns {ExportsInfo | undefined} the nested exports info
|
|
318
388
|
*/
|
|
319
389
|
getNestedExportsInfo(name) {
|
|
320
390
|
if (Array.isArray(name) && name.length > 0) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
391
|
+
/** @type {ExportsInfo} */
|
|
392
|
+
let exportsInfo = this;
|
|
393
|
+
for (let i = 0; i < name.length; i++) {
|
|
394
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
395
|
+
if (!info.exportsInfo) return;
|
|
396
|
+
exportsInfo = info.exportsInfo;
|
|
397
|
+
}
|
|
398
|
+
return exportsInfo;
|
|
324
399
|
}
|
|
325
400
|
return this;
|
|
326
401
|
}
|
|
327
402
|
|
|
328
403
|
/**
|
|
404
|
+
* Sets unknown exports provided.
|
|
329
405
|
* @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
|
|
330
406
|
* @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
|
|
331
407
|
* @param {Dependency=} targetKey use this as key for the target
|
|
@@ -404,6 +480,7 @@ class ExportsInfo {
|
|
|
404
480
|
}
|
|
405
481
|
|
|
406
482
|
/**
|
|
483
|
+
* Sets used in unknown way.
|
|
407
484
|
* @param {RuntimeSpec} runtime the runtime
|
|
408
485
|
* @returns {boolean} true, when something changed
|
|
409
486
|
*/
|
|
@@ -418,25 +495,14 @@ class ExportsInfo {
|
|
|
418
495
|
if (this._redirectTo.setUsedInUnknownWay(runtime)) {
|
|
419
496
|
changed = true;
|
|
420
497
|
}
|
|
421
|
-
} else {
|
|
422
|
-
|
|
423
|
-
this._otherExportsInfo.setUsedConditionally(
|
|
424
|
-
(used) => used < UsageState.Unknown,
|
|
425
|
-
UsageState.Unknown,
|
|
426
|
-
runtime
|
|
427
|
-
)
|
|
428
|
-
) {
|
|
429
|
-
changed = true;
|
|
430
|
-
}
|
|
431
|
-
if (this._otherExportsInfo.canMangleUse !== false) {
|
|
432
|
-
this._otherExportsInfo.canMangleUse = false;
|
|
433
|
-
changed = true;
|
|
434
|
-
}
|
|
498
|
+
} else if (this._otherExportsInfo.setUsedInUnknownWay(runtime)) {
|
|
499
|
+
changed = true;
|
|
435
500
|
}
|
|
436
501
|
return changed;
|
|
437
502
|
}
|
|
438
503
|
|
|
439
504
|
/**
|
|
505
|
+
* Sets used without info.
|
|
440
506
|
* @param {RuntimeSpec} runtime the runtime
|
|
441
507
|
* @returns {boolean} true, when something changed
|
|
442
508
|
*/
|
|
@@ -451,19 +517,14 @@ class ExportsInfo {
|
|
|
451
517
|
if (this._redirectTo.setUsedWithoutInfo(runtime)) {
|
|
452
518
|
changed = true;
|
|
453
519
|
}
|
|
454
|
-
} else {
|
|
455
|
-
|
|
456
|
-
changed = true;
|
|
457
|
-
}
|
|
458
|
-
if (this._otherExportsInfo.canMangleUse !== false) {
|
|
459
|
-
this._otherExportsInfo.canMangleUse = false;
|
|
460
|
-
changed = true;
|
|
461
|
-
}
|
|
520
|
+
} else if (this._otherExportsInfo.setUsedWithoutInfo(runtime)) {
|
|
521
|
+
changed = true;
|
|
462
522
|
}
|
|
463
523
|
return changed;
|
|
464
524
|
}
|
|
465
525
|
|
|
466
526
|
/**
|
|
527
|
+
* Sets all known exports used.
|
|
467
528
|
* @param {RuntimeSpec} runtime the runtime
|
|
468
529
|
* @returns {boolean} true, when something changed
|
|
469
530
|
*/
|
|
@@ -479,6 +540,7 @@ class ExportsInfo {
|
|
|
479
540
|
}
|
|
480
541
|
|
|
481
542
|
/**
|
|
543
|
+
* Sets used for side effects only.
|
|
482
544
|
* @param {RuntimeSpec} runtime the runtime
|
|
483
545
|
* @returns {boolean} true, when something changed
|
|
484
546
|
*/
|
|
@@ -491,6 +553,7 @@ class ExportsInfo {
|
|
|
491
553
|
}
|
|
492
554
|
|
|
493
555
|
/**
|
|
556
|
+
* Checks whether this exports info is used.
|
|
494
557
|
* @param {RuntimeSpec} runtime the runtime
|
|
495
558
|
* @returns {boolean} true, when the module exports are used in any way
|
|
496
559
|
*/
|
|
@@ -511,6 +574,7 @@ class ExportsInfo {
|
|
|
511
574
|
}
|
|
512
575
|
|
|
513
576
|
/**
|
|
577
|
+
* Checks whether this exports info is module used.
|
|
514
578
|
* @param {RuntimeSpec} runtime the runtime
|
|
515
579
|
* @returns {boolean} true, when the module is used in any way
|
|
516
580
|
*/
|
|
@@ -523,6 +587,7 @@ class ExportsInfo {
|
|
|
523
587
|
}
|
|
524
588
|
|
|
525
589
|
/**
|
|
590
|
+
* Returns set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown).
|
|
526
591
|
* @param {RuntimeSpec} runtime the runtime
|
|
527
592
|
* @returns {SortableSet<ExportInfoName> | boolean | null} set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown)
|
|
528
593
|
*/
|
|
@@ -572,6 +637,7 @@ class ExportsInfo {
|
|
|
572
637
|
}
|
|
573
638
|
|
|
574
639
|
/**
|
|
640
|
+
* Gets provided exports.
|
|
575
641
|
* @returns {null | true | ExportInfoName[]} list of exports when known
|
|
576
642
|
*/
|
|
577
643
|
getProvidedExports() {
|
|
@@ -611,6 +677,7 @@ class ExportsInfo {
|
|
|
611
677
|
}
|
|
612
678
|
|
|
613
679
|
/**
|
|
680
|
+
* Gets relevant exports.
|
|
614
681
|
* @param {RuntimeSpec} runtime the runtime
|
|
615
682
|
* @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
|
|
616
683
|
*/
|
|
@@ -638,22 +705,30 @@ class ExportsInfo {
|
|
|
638
705
|
}
|
|
639
706
|
|
|
640
707
|
/**
|
|
708
|
+
* Checks whether this exports info is export provided.
|
|
641
709
|
* @param {ExportInfoName | ExportInfoName[]} name the name of the export
|
|
642
710
|
* @returns {boolean | undefined | null} if the export is provided
|
|
643
711
|
*/
|
|
644
712
|
isExportProvided(name) {
|
|
645
713
|
if (Array.isArray(name)) {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
714
|
+
/** @type {ExportsInfo} */
|
|
715
|
+
let exportsInfo = this;
|
|
716
|
+
const last = name.length - 1;
|
|
717
|
+
for (let i = 0; ; i++) {
|
|
718
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
719
|
+
if (info.exportsInfo && i < last) {
|
|
720
|
+
exportsInfo = info.exportsInfo;
|
|
721
|
+
continue;
|
|
722
|
+
}
|
|
723
|
+
return info.provided ? i === last || undefined : info.provided;
|
|
649
724
|
}
|
|
650
|
-
return info.provided ? name.length === 1 || undefined : info.provided;
|
|
651
725
|
}
|
|
652
726
|
const info = this.getReadOnlyExportInfo(name);
|
|
653
727
|
return info.provided;
|
|
654
728
|
}
|
|
655
729
|
|
|
656
730
|
/**
|
|
731
|
+
* Returns key representing the usage.
|
|
657
732
|
* @param {RuntimeSpec} runtime runtime
|
|
658
733
|
* @returns {string} key representing the usage
|
|
659
734
|
*/
|
|
@@ -673,6 +748,7 @@ class ExportsInfo {
|
|
|
673
748
|
}
|
|
674
749
|
|
|
675
750
|
/**
|
|
751
|
+
* Checks whether this exports info is equally used.
|
|
676
752
|
* @param {RuntimeSpec} runtimeA first runtime
|
|
677
753
|
* @param {RuntimeSpec} runtimeB second runtime
|
|
678
754
|
* @returns {boolean} true, when equally used
|
|
@@ -701,6 +777,7 @@ class ExportsInfo {
|
|
|
701
777
|
}
|
|
702
778
|
|
|
703
779
|
/**
|
|
780
|
+
* Returns usage status.
|
|
704
781
|
* @param {ExportInfoName | ExportInfoName[]} name export name
|
|
705
782
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
706
783
|
* @returns {UsageStateType} usage status
|
|
@@ -708,53 +785,121 @@ class ExportsInfo {
|
|
|
708
785
|
getUsed(name, runtime) {
|
|
709
786
|
if (Array.isArray(name)) {
|
|
710
787
|
if (name.length === 0) return this.otherExportsInfo.getUsed(runtime);
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
788
|
+
// Walk the nested path iteratively to avoid a `slice` per level
|
|
789
|
+
/** @type {ExportsInfo} */
|
|
790
|
+
let exportsInfo = this;
|
|
791
|
+
const last = name.length - 1;
|
|
792
|
+
for (let i = 0; ; i++) {
|
|
793
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
794
|
+
if (i === last || !info.exportsInfo) return info.getUsed(runtime);
|
|
795
|
+
exportsInfo = info.exportsInfo;
|
|
714
796
|
}
|
|
715
|
-
return info.getUsed(runtime);
|
|
716
797
|
}
|
|
717
798
|
const info = this.getReadOnlyExportInfo(name);
|
|
718
799
|
return info.getUsed(runtime);
|
|
719
800
|
}
|
|
720
801
|
|
|
721
802
|
/**
|
|
803
|
+
* Returns the used name.
|
|
722
804
|
* @param {ExportInfoName | ExportInfoName[]} name the export name
|
|
723
805
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
724
806
|
* @returns {UsedName} the used name
|
|
725
807
|
*/
|
|
726
808
|
getUsedName(name, runtime) {
|
|
727
809
|
if (Array.isArray(name)) {
|
|
728
|
-
// TODO improve this
|
|
729
810
|
if (name.length === 0) {
|
|
730
811
|
if (!this.isUsed(runtime)) return false;
|
|
731
812
|
return name;
|
|
732
813
|
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
814
|
+
// Walk the nested path once, collecting used names into a single array
|
|
815
|
+
// instead of slicing/spreading at every level.
|
|
816
|
+
/** @type {ExportsInfo} */
|
|
817
|
+
let exportsInfo = this;
|
|
818
|
+
/** @type {ExportInfoName[] | undefined} */
|
|
819
|
+
let result;
|
|
820
|
+
const last = name.length - 1;
|
|
821
|
+
for (let i = 0; ; i++) {
|
|
822
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
823
|
+
const x = info.getUsedName(name[i], runtime);
|
|
824
|
+
if (x === false) return false;
|
|
825
|
+
if (x instanceof InlinedUsedName) {
|
|
826
|
+
// The inlined value replaces the prefix; trailing ids become its suffix
|
|
827
|
+
if (i === last) return x;
|
|
828
|
+
return new InlinedUsedName(x.value, [
|
|
829
|
+
...x.suffix,
|
|
830
|
+
...name.slice(i + 1)
|
|
831
|
+
]);
|
|
832
|
+
}
|
|
833
|
+
if (i === last) {
|
|
834
|
+
if (result === undefined) return x === name[i] ? name : [x];
|
|
835
|
+
result.push(x);
|
|
836
|
+
return result;
|
|
837
|
+
}
|
|
838
|
+
if (result === undefined) result = [];
|
|
839
|
+
result.push(x);
|
|
840
|
+
// Descend only while the parent is reached purely via property access
|
|
841
|
+
if (
|
|
842
|
+
info.exportsInfo &&
|
|
843
|
+
info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
|
|
844
|
+
) {
|
|
845
|
+
exportsInfo = info.exportsInfo;
|
|
846
|
+
continue;
|
|
847
|
+
}
|
|
848
|
+
// Cannot descend further: keep the remaining ids unchanged
|
|
849
|
+
for (let j = i + 1; j <= last; j++) result.push(name[j]);
|
|
850
|
+
return result;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
const info = this.getReadOnlyExportInfo(name);
|
|
854
|
+
return info.getUsedName(name, runtime);
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
/**
|
|
858
|
+
* Checks whether `getUsedName(name, runtime)` would return an `InlinedUsedName`,
|
|
859
|
+
* without allocating intermediate used-name arrays (hot path for connection conditions).
|
|
860
|
+
* @param {ExportInfoName[]} name the export name path
|
|
861
|
+
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
862
|
+
* @returns {boolean} true when the used name resolves to an inlined value
|
|
863
|
+
*/
|
|
864
|
+
hasInlinedUsedName(name, runtime) {
|
|
865
|
+
if (name.length === 0) return false;
|
|
866
|
+
/** @type {ExportsInfo} */
|
|
867
|
+
let exportsInfo = this;
|
|
868
|
+
const last = name.length - 1;
|
|
869
|
+
for (let i = 0; ; i++) {
|
|
870
|
+
// follow redirects for the fast-path flag; InlinedUsedName can only
|
|
871
|
+
// exist on a level whose (redirected) exportsInfo is marked
|
|
872
|
+
let hasInlined = false;
|
|
873
|
+
/** @type {ExportsInfo | undefined} */
|
|
874
|
+
let e = exportsInfo;
|
|
875
|
+
while (e !== undefined) {
|
|
876
|
+
if (e._hasInlinedExports) {
|
|
877
|
+
hasInlined = true;
|
|
878
|
+
break;
|
|
879
|
+
}
|
|
880
|
+
e = e._redirectTo;
|
|
881
|
+
}
|
|
882
|
+
if (!hasInlined && i === last) return false;
|
|
883
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
884
|
+
if (hasInlined) {
|
|
885
|
+
const x = info.getUsedName(name[i], runtime);
|
|
886
|
+
if (x === false) return false;
|
|
887
|
+
if (x instanceof InlinedUsedName) return true;
|
|
888
|
+
if (i === last) return false;
|
|
741
889
|
}
|
|
742
890
|
if (
|
|
743
891
|
info.exportsInfo &&
|
|
744
892
|
info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
|
|
745
893
|
) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
|
|
894
|
+
exportsInfo = info.exportsInfo;
|
|
895
|
+
continue;
|
|
749
896
|
}
|
|
750
|
-
return
|
|
897
|
+
return false;
|
|
751
898
|
}
|
|
752
|
-
const info = this.getReadOnlyExportInfo(name);
|
|
753
|
-
const usedName = info.getUsedName(name, runtime);
|
|
754
|
-
return usedName;
|
|
755
899
|
}
|
|
756
900
|
|
|
757
901
|
/**
|
|
902
|
+
* Updates the hash with the data contributed by this instance.
|
|
758
903
|
* @param {Hash} hash the hash
|
|
759
904
|
* @param {RuntimeSpec} runtime the runtime
|
|
760
905
|
* @returns {void}
|
|
@@ -764,27 +909,38 @@ class ExportsInfo {
|
|
|
764
909
|
}
|
|
765
910
|
|
|
766
911
|
/**
|
|
912
|
+
* Updates hash using the provided hash.
|
|
767
913
|
* @param {Hash} hash the hash
|
|
768
914
|
* @param {RuntimeSpec} runtime the runtime
|
|
769
915
|
* @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
|
|
770
916
|
* @returns {void}
|
|
771
917
|
*/
|
|
772
918
|
_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
|
|
773
|
-
|
|
774
|
-
|
|
919
|
+
// add/delete keeps path semantics without copying the set per level
|
|
920
|
+
alreadyVisitedExportsInfo.add(this);
|
|
775
921
|
for (const exportInfo of this.orderedExports) {
|
|
776
922
|
if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
|
|
777
|
-
exportInfo._updateHash(hash, runtime,
|
|
923
|
+
exportInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|
|
778
924
|
}
|
|
779
925
|
}
|
|
780
|
-
this._sideEffectsOnlyInfo._updateHash(
|
|
781
|
-
|
|
926
|
+
this._sideEffectsOnlyInfo._updateHash(
|
|
927
|
+
hash,
|
|
928
|
+
runtime,
|
|
929
|
+
alreadyVisitedExportsInfo
|
|
930
|
+
);
|
|
931
|
+
this._otherExportsInfo._updateHash(
|
|
932
|
+
hash,
|
|
933
|
+
runtime,
|
|
934
|
+
alreadyVisitedExportsInfo
|
|
935
|
+
);
|
|
782
936
|
if (this._redirectTo !== undefined) {
|
|
783
|
-
this._redirectTo._updateHash(hash, runtime,
|
|
937
|
+
this._redirectTo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|
|
784
938
|
}
|
|
939
|
+
alreadyVisitedExportsInfo.delete(this);
|
|
785
940
|
}
|
|
786
941
|
|
|
787
942
|
/**
|
|
943
|
+
* Gets restore provided data.
|
|
788
944
|
* @returns {RestoreProvidedData} restore provided data
|
|
789
945
|
*/
|
|
790
946
|
getRestoreProvidedData() {
|
|
@@ -794,22 +950,42 @@ class ExportsInfo {
|
|
|
794
950
|
/** @type {RestoreProvidedDataExports[]} */
|
|
795
951
|
const exports = [];
|
|
796
952
|
for (const exportInfo of this.orderedExports) {
|
|
953
|
+
const canInlineProvide = exportInfo.canInlineProvide;
|
|
954
|
+
const pureProvide = exportInfo.pureProvide;
|
|
955
|
+
// inline-exports data is only stored when present, so builds without the
|
|
956
|
+
// feature don't pay for it in the persistent cache
|
|
957
|
+
const hasInlineInfo =
|
|
958
|
+
canInlineProvide !== undefined || pureProvide !== undefined;
|
|
797
959
|
if (
|
|
798
960
|
exportInfo.provided !== otherProvided ||
|
|
799
961
|
exportInfo.canMangleProvide !== otherCanMangleProvide ||
|
|
800
962
|
exportInfo.terminalBinding !== otherTerminalBinding ||
|
|
963
|
+
hasInlineInfo ||
|
|
801
964
|
exportInfo.exportsInfoOwned
|
|
802
965
|
) {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
?
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
966
|
+
const exportsInfo = exportInfo.exportsInfoOwned
|
|
967
|
+
? /** @type {NonNullable<ExportInfo["exportsInfo"]>} */
|
|
968
|
+
(exportInfo.exportsInfo).getRestoreProvidedData()
|
|
969
|
+
: undefined;
|
|
970
|
+
exports.push(
|
|
971
|
+
hasInlineInfo
|
|
972
|
+
? {
|
|
973
|
+
name: exportInfo.name,
|
|
974
|
+
provided: exportInfo.provided,
|
|
975
|
+
canMangleProvide: exportInfo.canMangleProvide,
|
|
976
|
+
canInlineProvide,
|
|
977
|
+
terminalBinding: exportInfo.terminalBinding,
|
|
978
|
+
pureProvide,
|
|
979
|
+
exportsInfo
|
|
980
|
+
}
|
|
981
|
+
: {
|
|
982
|
+
name: exportInfo.name,
|
|
983
|
+
provided: exportInfo.provided,
|
|
984
|
+
canMangleProvide: exportInfo.canMangleProvide,
|
|
985
|
+
terminalBinding: exportInfo.terminalBinding,
|
|
986
|
+
exportsInfo
|
|
987
|
+
}
|
|
988
|
+
);
|
|
813
989
|
}
|
|
814
990
|
}
|
|
815
991
|
return new RestoreProvidedData(
|
|
@@ -821,6 +997,7 @@ class ExportsInfo {
|
|
|
821
997
|
}
|
|
822
998
|
|
|
823
999
|
/**
|
|
1000
|
+
* Processes the provided data.
|
|
824
1001
|
* @param {RestoreProvidedData} data data
|
|
825
1002
|
*/
|
|
826
1003
|
restoreProvided({
|
|
@@ -843,7 +1020,9 @@ class ExportsInfo {
|
|
|
843
1020
|
const exportInfo = this.getExportInfo(exp.name);
|
|
844
1021
|
exportInfo.provided = exp.provided;
|
|
845
1022
|
exportInfo.canMangleProvide = exp.canMangleProvide;
|
|
1023
|
+
exportInfo.canInlineProvide = exp.canInlineProvide;
|
|
846
1024
|
exportInfo.terminalBinding = exp.terminalBinding;
|
|
1025
|
+
exportInfo.pureProvide = exp.pureProvide;
|
|
847
1026
|
if (exp.exportsInfo) {
|
|
848
1027
|
const exportsInfo = exportInfo.createNestedExportsInfo();
|
|
849
1028
|
exportsInfo.restoreProvided(exp.exportsInfo);
|
|
@@ -855,6 +1034,7 @@ class ExportsInfo {
|
|
|
855
1034
|
|
|
856
1035
|
class ExportInfo {
|
|
857
1036
|
/**
|
|
1037
|
+
* Creates an instance of ExportInfo.
|
|
858
1038
|
* @param {ExportInfoName | null} name the original name of the export
|
|
859
1039
|
* @param {ExportInfo=} initFrom init values from this ExportInfo
|
|
860
1040
|
*/
|
|
@@ -906,6 +1086,14 @@ class ExportInfo {
|
|
|
906
1086
|
* @type {boolean | undefined}
|
|
907
1087
|
*/
|
|
908
1088
|
this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
|
|
1089
|
+
// only specific export info can be inlined,
|
|
1090
|
+
// so _otherExportsInfo.canInlineProvide is always undefined
|
|
1091
|
+
/**
|
|
1092
|
+
* value slot for `canInlineProvide`
|
|
1093
|
+
* @private
|
|
1094
|
+
* @type {InlinedValue | undefined}
|
|
1095
|
+
*/
|
|
1096
|
+
this._inlinedValue = undefined;
|
|
909
1097
|
/**
|
|
910
1098
|
* true: it can be mangled
|
|
911
1099
|
* false: is can not be mangled
|
|
@@ -913,6 +1101,12 @@ class ExportInfo {
|
|
|
913
1101
|
* @type {boolean | undefined}
|
|
914
1102
|
*/
|
|
915
1103
|
this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
|
|
1104
|
+
/**
|
|
1105
|
+
* bitfield backing `canInlineUse` and `pureProvide`
|
|
1106
|
+
* @private
|
|
1107
|
+
* @type {number}
|
|
1108
|
+
*/
|
|
1109
|
+
this._inlineFlags = 0;
|
|
916
1110
|
/** @type {boolean} */
|
|
917
1111
|
this.exportsInfoOwned = false;
|
|
918
1112
|
/** @type {ExportsInfo | undefined} */
|
|
@@ -933,6 +1127,57 @@ class ExportInfo {
|
|
|
933
1127
|
this._maxTarget = undefined;
|
|
934
1128
|
}
|
|
935
1129
|
|
|
1130
|
+
/**
|
|
1131
|
+
* defined: the export binds to a small primitive constant and may be inlined
|
|
1132
|
+
* undefined: not an inlined constant export
|
|
1133
|
+
* @returns {InlinedValue | undefined} inlined value
|
|
1134
|
+
*/
|
|
1135
|
+
get canInlineProvide() {
|
|
1136
|
+
return this._inlinedValue;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
set canInlineProvide(value) {
|
|
1140
|
+
this._inlinedValue = value;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
/**
|
|
1144
|
+
* true: at least one consumer accepts inlining, none rejected
|
|
1145
|
+
* false: at least one consumer rejected inlining
|
|
1146
|
+
* undefined: collecting; no consumer has decided yet
|
|
1147
|
+
* @returns {boolean | undefined} can inline use
|
|
1148
|
+
*/
|
|
1149
|
+
get canInlineUse() {
|
|
1150
|
+
switch (this._inlineFlags & INLINE_USE_MASK) {
|
|
1151
|
+
case INLINE_USE_TRUE:
|
|
1152
|
+
return true;
|
|
1153
|
+
case INLINE_USE_FALSE:
|
|
1154
|
+
return false;
|
|
1155
|
+
default:
|
|
1156
|
+
return undefined;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
set canInlineUse(value) {
|
|
1161
|
+
this._inlineFlags =
|
|
1162
|
+
(this._inlineFlags & ~INLINE_USE_MASK) |
|
|
1163
|
+
(value === undefined ? 0 : value ? INLINE_USE_TRUE : INLINE_USE_FALSE);
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
/**
|
|
1167
|
+
* Only specific export info can be pure, so other_export_info.pure is always undefined.
|
|
1168
|
+
* true: calling the export has no observable side effects
|
|
1169
|
+
* undefined: it was not determined whether the export is pure
|
|
1170
|
+
* @returns {boolean | undefined} pure provide
|
|
1171
|
+
*/
|
|
1172
|
+
get pureProvide() {
|
|
1173
|
+
return (this._inlineFlags & PURE_PROVIDE_FLAG) !== 0 ? true : undefined;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
set pureProvide(value) {
|
|
1177
|
+
if (value) this._inlineFlags |= PURE_PROVIDE_FLAG;
|
|
1178
|
+
else this._inlineFlags &= ~PURE_PROVIDE_FLAG;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
936
1181
|
get canMangle() {
|
|
937
1182
|
switch (this.canMangleProvide) {
|
|
938
1183
|
case undefined:
|
|
@@ -955,6 +1200,16 @@ class ExportInfo {
|
|
|
955
1200
|
}
|
|
956
1201
|
|
|
957
1202
|
/**
|
|
1203
|
+
* @returns {InlinedValue | undefined} the inlined value when both provide and use sides agree, otherwise undefined
|
|
1204
|
+
*/
|
|
1205
|
+
canInline() {
|
|
1206
|
+
return this.canInlineProvide !== undefined && this.canInlineUse === true
|
|
1207
|
+
? this.canInlineProvide
|
|
1208
|
+
: undefined;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
/**
|
|
1212
|
+
* Sets used in unknown way.
|
|
958
1213
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
959
1214
|
* @returns {boolean} true, when something changed
|
|
960
1215
|
*/
|
|
@@ -973,10 +1228,15 @@ class ExportInfo {
|
|
|
973
1228
|
this.canMangleUse = false;
|
|
974
1229
|
changed = true;
|
|
975
1230
|
}
|
|
1231
|
+
if (this.canInlineUse !== false) {
|
|
1232
|
+
this.canInlineUse = false;
|
|
1233
|
+
changed = true;
|
|
1234
|
+
}
|
|
976
1235
|
return changed;
|
|
977
1236
|
}
|
|
978
1237
|
|
|
979
1238
|
/**
|
|
1239
|
+
* Sets used without info.
|
|
980
1240
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
981
1241
|
* @returns {boolean} true, when something changed
|
|
982
1242
|
*/
|
|
@@ -989,9 +1249,22 @@ class ExportInfo {
|
|
|
989
1249
|
this.canMangleUse = false;
|
|
990
1250
|
changed = true;
|
|
991
1251
|
}
|
|
1252
|
+
if (this.canInlineUse !== false) {
|
|
1253
|
+
this.canInlineUse = false;
|
|
1254
|
+
changed = true;
|
|
1255
|
+
}
|
|
992
1256
|
return changed;
|
|
993
1257
|
}
|
|
994
1258
|
|
|
1259
|
+
setHasProvideInfo() {
|
|
1260
|
+
if (this.provided === undefined) {
|
|
1261
|
+
this.provided = false;
|
|
1262
|
+
}
|
|
1263
|
+
if (this.canMangleProvide === undefined) {
|
|
1264
|
+
this.canMangleProvide = true;
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
|
|
995
1268
|
setHasUseInfo() {
|
|
996
1269
|
if (!this._hasUseInRuntimeInfo) {
|
|
997
1270
|
this._hasUseInRuntimeInfo = true;
|
|
@@ -1006,6 +1279,7 @@ class ExportInfo {
|
|
|
1006
1279
|
}
|
|
1007
1280
|
|
|
1008
1281
|
/**
|
|
1282
|
+
* Sets used conditionally.
|
|
1009
1283
|
* @param {(condition: UsageStateType) => boolean} condition compare with old value
|
|
1010
1284
|
* @param {UsageStateType} newValue set when condition is true
|
|
1011
1285
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
@@ -1059,6 +1333,7 @@ class ExportInfo {
|
|
|
1059
1333
|
}
|
|
1060
1334
|
|
|
1061
1335
|
/**
|
|
1336
|
+
* Updates used using the provided new value.
|
|
1062
1337
|
* @param {UsageStateType} newValue new value of the used state
|
|
1063
1338
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
1064
1339
|
* @returns {boolean} true when something has changed
|
|
@@ -1107,6 +1382,7 @@ class ExportInfo {
|
|
|
1107
1382
|
}
|
|
1108
1383
|
|
|
1109
1384
|
/**
|
|
1385
|
+
* Returns true, if something has changed.
|
|
1110
1386
|
* @param {Dependency} key the key
|
|
1111
1387
|
* @returns {boolean} true, if something has changed
|
|
1112
1388
|
*/
|
|
@@ -1120,6 +1396,7 @@ class ExportInfo {
|
|
|
1120
1396
|
}
|
|
1121
1397
|
|
|
1122
1398
|
/**
|
|
1399
|
+
* Updates target using the provided key.
|
|
1123
1400
|
* @param {Dependency} key the key
|
|
1124
1401
|
* @param {ModuleGraphConnection} connection the target module if a single one
|
|
1125
1402
|
* @param {ExportInfoName[] | null=} exportName the exported name
|
|
@@ -1127,12 +1404,16 @@ class ExportInfo {
|
|
|
1127
1404
|
* @returns {boolean} true, if something has changed
|
|
1128
1405
|
*/
|
|
1129
1406
|
setTarget(key, connection, exportName, priority = 0) {
|
|
1130
|
-
|
|
1407
|
+
// `equals` compares element-wise, so the incoming `exportName` can be used
|
|
1408
|
+
// directly for the change-check; only copy it when actually stored, so the
|
|
1409
|
+
// common no-op (unchanged target) path allocates nothing.
|
|
1131
1410
|
if (!this._target) {
|
|
1132
1411
|
this._target = /** @type {Target} */ (new Map());
|
|
1133
1412
|
this._target.set(key, {
|
|
1134
1413
|
connection,
|
|
1135
|
-
export: /** @type {ExportInfoName[]} */ (
|
|
1414
|
+
export: /** @type {ExportInfoName[]} */ (
|
|
1415
|
+
exportName ? [...exportName] : exportName
|
|
1416
|
+
),
|
|
1136
1417
|
priority
|
|
1137
1418
|
});
|
|
1138
1419
|
return true;
|
|
@@ -1142,7 +1423,9 @@ class ExportInfo {
|
|
|
1142
1423
|
if (oldTarget === null && !connection) return false;
|
|
1143
1424
|
this._target.set(key, {
|
|
1144
1425
|
connection,
|
|
1145
|
-
export: /** @type {ExportInfoName[]} */ (
|
|
1426
|
+
export: /** @type {ExportInfoName[]} */ (
|
|
1427
|
+
exportName ? [...exportName] : exportName
|
|
1428
|
+
),
|
|
1146
1429
|
priority
|
|
1147
1430
|
});
|
|
1148
1431
|
this._maxTarget = undefined;
|
|
@@ -1156,7 +1439,9 @@ class ExportInfo {
|
|
|
1156
1439
|
: oldTarget.export)
|
|
1157
1440
|
) {
|
|
1158
1441
|
oldTarget.connection = connection;
|
|
1159
|
-
oldTarget.export = /** @type {ExportInfoName[]} */ (
|
|
1442
|
+
oldTarget.export = /** @type {ExportInfoName[]} */ (
|
|
1443
|
+
exportName ? [...exportName] : exportName
|
|
1444
|
+
);
|
|
1160
1445
|
oldTarget.priority = priority;
|
|
1161
1446
|
this._maxTarget = undefined;
|
|
1162
1447
|
return true;
|
|
@@ -1165,6 +1450,7 @@ class ExportInfo {
|
|
|
1165
1450
|
}
|
|
1166
1451
|
|
|
1167
1452
|
/**
|
|
1453
|
+
* Returns usage state.
|
|
1168
1454
|
* @param {RuntimeSpec} runtime for this runtime
|
|
1169
1455
|
* @returns {UsageStateType} usage state
|
|
1170
1456
|
*/
|
|
@@ -1203,10 +1489,10 @@ class ExportInfo {
|
|
|
1203
1489
|
}
|
|
1204
1490
|
|
|
1205
1491
|
/**
|
|
1206
|
-
*
|
|
1492
|
+
* Returns used name. May return InlinedUsedName when the export is inlined to a primitive.
|
|
1207
1493
|
* @param {string | undefined} fallbackName fallback name for used exports with no name
|
|
1208
1494
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
1209
|
-
* @returns {string | false} used name
|
|
1495
|
+
* @returns {string | InlinedUsedName | false} used name
|
|
1210
1496
|
*/
|
|
1211
1497
|
getUsedName(fallbackName, runtime) {
|
|
1212
1498
|
if (this._hasUseInRuntimeInfo) {
|
|
@@ -1218,14 +1504,17 @@ class ExportInfo {
|
|
|
1218
1504
|
if (!this._usedInRuntime.has(runtime)) {
|
|
1219
1505
|
return false;
|
|
1220
1506
|
}
|
|
1221
|
-
} else if (
|
|
1222
|
-
runtime
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1507
|
+
} else if (runtime !== undefined) {
|
|
1508
|
+
// Unused unless at least one runtime in the set is used; loop avoids
|
|
1509
|
+
// allocating an array from the runtime set on this hot path.
|
|
1510
|
+
let anyUsed = false;
|
|
1511
|
+
for (const r of runtime) {
|
|
1512
|
+
if (this._usedInRuntime.has(r)) {
|
|
1513
|
+
anyUsed = true;
|
|
1514
|
+
break;
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
if (!anyUsed) return false;
|
|
1229
1518
|
}
|
|
1230
1519
|
}
|
|
1231
1520
|
}
|
|
@@ -1234,6 +1523,7 @@ class ExportInfo {
|
|
|
1234
1523
|
}
|
|
1235
1524
|
|
|
1236
1525
|
/**
|
|
1526
|
+
* Checks whether this export info has used name.
|
|
1237
1527
|
* @returns {boolean} true, when a mangled name of this export is set
|
|
1238
1528
|
*/
|
|
1239
1529
|
hasUsedName() {
|
|
@@ -1241,8 +1531,8 @@ class ExportInfo {
|
|
|
1241
1531
|
}
|
|
1242
1532
|
|
|
1243
1533
|
/**
|
|
1244
|
-
*
|
|
1245
|
-
* @param {string} name the new name
|
|
1534
|
+
* Updates used name using the provided name.
|
|
1535
|
+
* @param {string | InlinedUsedName} name the new name
|
|
1246
1536
|
* @returns {void}
|
|
1247
1537
|
*/
|
|
1248
1538
|
setUsedName(name) {
|
|
@@ -1250,6 +1540,7 @@ class ExportInfo {
|
|
|
1250
1540
|
}
|
|
1251
1541
|
|
|
1252
1542
|
/**
|
|
1543
|
+
* Gets terminal binding.
|
|
1253
1544
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1254
1545
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1255
1546
|
* @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
|
|
@@ -1294,15 +1585,21 @@ class ExportInfo {
|
|
|
1294
1585
|
}
|
|
1295
1586
|
|
|
1296
1587
|
/**
|
|
1588
|
+
* Returns the target, undefined when there is no target, false when no target is valid.
|
|
1297
1589
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1298
1590
|
* @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
|
|
1299
1591
|
* @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
|
|
1300
1592
|
*/
|
|
1301
1593
|
findTarget(moduleGraph, validTargetModuleFilter) {
|
|
1302
|
-
return this._findTarget(
|
|
1594
|
+
return this._findTarget(
|
|
1595
|
+
moduleGraph,
|
|
1596
|
+
validTargetModuleFilter,
|
|
1597
|
+
EMPTY_VISITED
|
|
1598
|
+
);
|
|
1303
1599
|
}
|
|
1304
1600
|
|
|
1305
1601
|
/**
|
|
1602
|
+
* Returns the target, undefined when there is no target, false when no target is valid.
|
|
1306
1603
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1307
1604
|
* @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
|
|
1308
1605
|
* @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
|
|
@@ -1353,6 +1650,7 @@ class ExportInfo {
|
|
|
1353
1650
|
}
|
|
1354
1651
|
|
|
1355
1652
|
/**
|
|
1653
|
+
* Returns the target.
|
|
1356
1654
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1357
1655
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1358
1656
|
* @returns {TargetItemWithConnection | undefined} the target
|
|
@@ -1364,6 +1662,7 @@ class ExportInfo {
|
|
|
1364
1662
|
}
|
|
1365
1663
|
|
|
1366
1664
|
/**
|
|
1665
|
+
* Returns the target.
|
|
1367
1666
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1368
1667
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1369
1668
|
* @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
|
|
@@ -1371,6 +1670,7 @@ class ExportInfo {
|
|
|
1371
1670
|
*/
|
|
1372
1671
|
_getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
|
|
1373
1672
|
/**
|
|
1673
|
+
* Returns resolved target.
|
|
1374
1674
|
* @param {TargetItem | undefined | null} inputTarget unresolved target
|
|
1375
1675
|
* @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
|
|
1376
1676
|
* @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
|
|
@@ -1466,7 +1766,7 @@ class ExportInfo {
|
|
|
1466
1766
|
* Move the target forward as long resolveTargetFilter is fulfilled
|
|
1467
1767
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1468
1768
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1469
|
-
* @param {(target: TargetItemWithConnection) => ModuleGraphConnection=} updateOriginalConnection updates the original connection instead of using the target connection
|
|
1769
|
+
* @param {((target: TargetItemWithConnection) => ModuleGraphConnection | undefined)=} updateOriginalConnection updates the original connection instead of using the target connection
|
|
1470
1770
|
* @returns {TargetItemWithConnection | undefined} the resolved target when moved
|
|
1471
1771
|
*/
|
|
1472
1772
|
moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
|
|
@@ -1490,7 +1790,7 @@ class ExportInfo {
|
|
|
1490
1790
|
/** @type {Target} */
|
|
1491
1791
|
(this._target).set(undefined, {
|
|
1492
1792
|
connection: updateOriginalConnection
|
|
1493
|
-
? updateOriginalConnection(target)
|
|
1793
|
+
? updateOriginalConnection(target) || target.connection
|
|
1494
1794
|
: target.connection,
|
|
1495
1795
|
export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
|
|
1496
1796
|
target.export
|
|
@@ -1501,6 +1801,7 @@ class ExportInfo {
|
|
|
1501
1801
|
}
|
|
1502
1802
|
|
|
1503
1803
|
/**
|
|
1804
|
+
* Creates a nested exports info.
|
|
1504
1805
|
* @returns {ExportsInfo} an exports info
|
|
1505
1806
|
*/
|
|
1506
1807
|
createNestedExportsInfo() {
|
|
@@ -1522,6 +1823,7 @@ class ExportInfo {
|
|
|
1522
1823
|
}
|
|
1523
1824
|
|
|
1524
1825
|
/**
|
|
1826
|
+
* Checks whether this export info contains the base info.
|
|
1525
1827
|
* @param {ExportInfo} baseInfo base info
|
|
1526
1828
|
* @param {RuntimeSpec} runtime runtime
|
|
1527
1829
|
* @returns {boolean} true when has info, otherwise false
|
|
@@ -1536,6 +1838,7 @@ class ExportInfo {
|
|
|
1536
1838
|
}
|
|
1537
1839
|
|
|
1538
1840
|
/**
|
|
1841
|
+
* Updates the hash with the data contributed by this instance.
|
|
1539
1842
|
* @param {Hash} hash the hash
|
|
1540
1843
|
* @param {RuntimeSpec} runtime the runtime
|
|
1541
1844
|
* @returns {void}
|
|
@@ -1545,15 +1848,20 @@ class ExportInfo {
|
|
|
1545
1848
|
}
|
|
1546
1849
|
|
|
1547
1850
|
/**
|
|
1851
|
+
* Updates hash using the provided hash.
|
|
1548
1852
|
* @param {Hash} hash the hash
|
|
1549
1853
|
* @param {RuntimeSpec} runtime the runtime
|
|
1550
1854
|
* @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
|
|
1551
1855
|
*/
|
|
1552
1856
|
_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
|
|
1857
|
+
const usedNameHash =
|
|
1858
|
+
this._usedName instanceof InlinedUsedName
|
|
1859
|
+
? `inlined:${this._usedName.render("")}`
|
|
1860
|
+
: this._usedName || this.name;
|
|
1553
1861
|
hash.update(
|
|
1554
|
-
`${
|
|
1862
|
+
`${usedNameHash}${this.getUsed(runtime)}${this.provided}${
|
|
1555
1863
|
this.terminalBinding
|
|
1556
|
-
}`
|
|
1864
|
+
}${this.pureProvide ? "P" : ""}`
|
|
1557
1865
|
);
|
|
1558
1866
|
if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
|
|
1559
1867
|
this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|