@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/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
|
|
|
@@ -62,8 +68,15 @@ const RETURNS_TRUE = () => true;
|
|
|
62
68
|
|
|
63
69
|
const CIRCULAR = Symbol("circular target");
|
|
64
70
|
|
|
71
|
+
// bit layout of ExportInfo._inlineFlags
|
|
72
|
+
const INLINE_USE_TRUE = 1;
|
|
73
|
+
const INLINE_USE_FALSE = 2;
|
|
74
|
+
const INLINE_USE_MASK = 3;
|
|
75
|
+
const PURE_PROVIDE_FLAG = 4;
|
|
76
|
+
|
|
65
77
|
class RestoreProvidedData {
|
|
66
78
|
/**
|
|
79
|
+
* Creates an instance of RestoreProvidedData.
|
|
67
80
|
* @param {RestoreProvidedDataExports[]} exports exports
|
|
68
81
|
* @param {ExportInfo["provided"]} otherProvided other provided
|
|
69
82
|
* @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
|
|
@@ -75,28 +88,47 @@ class RestoreProvidedData {
|
|
|
75
88
|
otherCanMangleProvide,
|
|
76
89
|
otherTerminalBinding
|
|
77
90
|
) {
|
|
91
|
+
/** @type {RestoreProvidedDataExports[]} */
|
|
78
92
|
this.exports = exports;
|
|
93
|
+
/** @type {ExportInfoProvided | undefined} */
|
|
79
94
|
this.otherProvided = otherProvided;
|
|
95
|
+
/** @type {boolean | undefined} */
|
|
80
96
|
this.otherCanMangleProvide = otherCanMangleProvide;
|
|
97
|
+
/** @type {boolean} */
|
|
81
98
|
this.otherTerminalBinding = otherTerminalBinding;
|
|
82
99
|
}
|
|
83
100
|
|
|
84
101
|
/**
|
|
102
|
+
* Serializes this instance into the provided serializer context.
|
|
85
103
|
* @param {ObjectSerializerContext} context context
|
|
86
104
|
*/
|
|
87
|
-
serialize(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
105
|
+
serialize(context) {
|
|
106
|
+
context
|
|
107
|
+
.write(this.exports)
|
|
108
|
+
.write(this.otherProvided)
|
|
109
|
+
.write(this.otherCanMangleProvide)
|
|
110
|
+
.write(this.otherTerminalBinding);
|
|
92
111
|
}
|
|
93
112
|
|
|
94
113
|
/**
|
|
114
|
+
* Restores this instance from the provided deserializer context.
|
|
95
115
|
* @param {ObjectDeserializerContext} context context
|
|
96
116
|
* @returns {RestoreProvidedData} RestoreProvidedData
|
|
97
117
|
*/
|
|
98
|
-
static deserialize(
|
|
99
|
-
|
|
118
|
+
static deserialize(context) {
|
|
119
|
+
const exports = context.read();
|
|
120
|
+
const c1 = context.rest;
|
|
121
|
+
const otherProvided = c1.read();
|
|
122
|
+
const c2 = c1.rest;
|
|
123
|
+
const otherCanMangleProvide = c2.read();
|
|
124
|
+
const c3 = c2.rest;
|
|
125
|
+
const otherTerminalBinding = c3.read();
|
|
126
|
+
return new RestoreProvidedData(
|
|
127
|
+
exports,
|
|
128
|
+
otherProvided,
|
|
129
|
+
otherCanMangleProvide,
|
|
130
|
+
otherTerminalBinding
|
|
131
|
+
);
|
|
100
132
|
}
|
|
101
133
|
}
|
|
102
134
|
|
|
@@ -110,6 +142,21 @@ class ExportsInfo {
|
|
|
110
142
|
constructor() {
|
|
111
143
|
/** @type {Exports} */
|
|
112
144
|
this._exports = new Map();
|
|
145
|
+
|
|
146
|
+
// `_otherExportsInfo` is a fallback entry for unlisted exports. Two roles:
|
|
147
|
+
// 1. factory template — `getExportInfo` creates `new ExportInfo(name, this)`,
|
|
148
|
+
// so created export info extends its properties.
|
|
149
|
+
// 2. flags whether the whole exportsInfo can be statically analyzed.
|
|
150
|
+
// Its `used` reachable values:
|
|
151
|
+
// - NoInfo: no use analysis yet (`optimization#usedExports` off), or used without info
|
|
152
|
+
// - Unused: analyzed, no unlisted export needed
|
|
153
|
+
// - Unknown: used in unknown way
|
|
154
|
+
// - Used/OnlyPropertiesUsed: never reached
|
|
155
|
+
// Its `provided` reachable values:
|
|
156
|
+
// - undefined: provision not determined yet
|
|
157
|
+
// - false: determined, no unlisted export is provided
|
|
158
|
+
// - null: only runtime knows (dynamic/unknown exports)
|
|
159
|
+
// - true: never reached
|
|
113
160
|
/** @type {ExportInfo} */
|
|
114
161
|
this._otherExportsInfo = new ExportInfo(null);
|
|
115
162
|
/** @type {ExportInfo} */
|
|
@@ -118,9 +165,21 @@ class ExportsInfo {
|
|
|
118
165
|
this._exportsAreOrdered = false;
|
|
119
166
|
/** @type {ExportsInfo=} */
|
|
120
167
|
this._redirectTo = undefined;
|
|
168
|
+
// fast-path flag for hasInlinedUsedName; set by InlineExportsPlugin
|
|
169
|
+
/** @type {boolean} */
|
|
170
|
+
this._hasInlinedExports = false;
|
|
121
171
|
}
|
|
122
172
|
|
|
123
173
|
/**
|
|
174
|
+
* Records that an owned export got an inlined used name.
|
|
175
|
+
* @returns {void}
|
|
176
|
+
*/
|
|
177
|
+
markInlinedExports() {
|
|
178
|
+
this._hasInlinedExports = true;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Gets owned exports.
|
|
124
183
|
* @returns {Iterable<ExportInfo>} all owned exports in any order
|
|
125
184
|
*/
|
|
126
185
|
get ownedExports() {
|
|
@@ -128,6 +187,7 @@ class ExportsInfo {
|
|
|
128
187
|
}
|
|
129
188
|
|
|
130
189
|
/**
|
|
190
|
+
* Gets ordered owned exports.
|
|
131
191
|
* @returns {Iterable<ExportInfo>} all owned exports in order
|
|
132
192
|
*/
|
|
133
193
|
get orderedOwnedExports() {
|
|
@@ -138,6 +198,7 @@ class ExportsInfo {
|
|
|
138
198
|
}
|
|
139
199
|
|
|
140
200
|
/**
|
|
201
|
+
* Returns all exports in any order.
|
|
141
202
|
* @returns {Iterable<ExportInfo>} all exports in any order
|
|
142
203
|
*/
|
|
143
204
|
get exports() {
|
|
@@ -152,6 +213,7 @@ class ExportsInfo {
|
|
|
152
213
|
}
|
|
153
214
|
|
|
154
215
|
/**
|
|
216
|
+
* Gets ordered exports.
|
|
155
217
|
* @returns {Iterable<ExportInfo>} all exports in order
|
|
156
218
|
*/
|
|
157
219
|
get orderedExports() {
|
|
@@ -175,6 +237,7 @@ class ExportsInfo {
|
|
|
175
237
|
}
|
|
176
238
|
|
|
177
239
|
/**
|
|
240
|
+
* Gets other exports info.
|
|
178
241
|
* @returns {ExportInfo} the export info of unlisted exports
|
|
179
242
|
*/
|
|
180
243
|
get otherExportsInfo() {
|
|
@@ -185,6 +248,7 @@ class ExportsInfo {
|
|
|
185
248
|
}
|
|
186
249
|
|
|
187
250
|
/**
|
|
251
|
+
* Processes the provided export.
|
|
188
252
|
* @param {Exports} exports exports
|
|
189
253
|
* @private
|
|
190
254
|
*/
|
|
@@ -217,6 +281,7 @@ class ExportsInfo {
|
|
|
217
281
|
}
|
|
218
282
|
|
|
219
283
|
/**
|
|
284
|
+
* Sets redirect named to.
|
|
220
285
|
* @param {ExportsInfo | undefined} exportsInfo exports info
|
|
221
286
|
* @returns {boolean} result
|
|
222
287
|
*/
|
|
@@ -228,22 +293,12 @@ class ExportsInfo {
|
|
|
228
293
|
|
|
229
294
|
setHasProvideInfo() {
|
|
230
295
|
for (const exportInfo of this._exports.values()) {
|
|
231
|
-
|
|
232
|
-
exportInfo.provided = false;
|
|
233
|
-
}
|
|
234
|
-
if (exportInfo.canMangleProvide === undefined) {
|
|
235
|
-
exportInfo.canMangleProvide = true;
|
|
236
|
-
}
|
|
296
|
+
exportInfo.setHasProvideInfo();
|
|
237
297
|
}
|
|
238
298
|
if (this._redirectTo !== undefined) {
|
|
239
299
|
this._redirectTo.setHasProvideInfo();
|
|
240
300
|
} else {
|
|
241
|
-
|
|
242
|
-
this._otherExportsInfo.provided = false;
|
|
243
|
-
}
|
|
244
|
-
if (this._otherExportsInfo.canMangleProvide === undefined) {
|
|
245
|
-
this._otherExportsInfo.canMangleProvide = true;
|
|
246
|
-
}
|
|
301
|
+
this._otherExportsInfo.setHasProvideInfo();
|
|
247
302
|
}
|
|
248
303
|
}
|
|
249
304
|
|
|
@@ -260,6 +315,7 @@ class ExportsInfo {
|
|
|
260
315
|
}
|
|
261
316
|
|
|
262
317
|
/**
|
|
318
|
+
* Gets own export info.
|
|
263
319
|
* @param {ExportInfoName} name export name
|
|
264
320
|
* @returns {ExportInfo} export info for this name
|
|
265
321
|
*/
|
|
@@ -273,6 +329,7 @@ class ExportsInfo {
|
|
|
273
329
|
}
|
|
274
330
|
|
|
275
331
|
/**
|
|
332
|
+
* Returns export info for this name.
|
|
276
333
|
* @param {ExportInfoName} name export name
|
|
277
334
|
* @returns {ExportInfo} export info for this name
|
|
278
335
|
*/
|
|
@@ -289,6 +346,7 @@ class ExportsInfo {
|
|
|
289
346
|
}
|
|
290
347
|
|
|
291
348
|
/**
|
|
349
|
+
* Gets read only export info.
|
|
292
350
|
* @param {ExportInfoName} name export name
|
|
293
351
|
* @returns {ExportInfo} export info for this name
|
|
294
352
|
*/
|
|
@@ -302,30 +360,43 @@ class ExportsInfo {
|
|
|
302
360
|
}
|
|
303
361
|
|
|
304
362
|
/**
|
|
363
|
+
* Gets read only export info recursive.
|
|
305
364
|
* @param {ExportInfoName[]} name export name
|
|
306
365
|
* @returns {ExportInfo | undefined} export info for this name
|
|
307
366
|
*/
|
|
308
367
|
getReadOnlyExportInfoRecursive(name) {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
368
|
+
/** @type {ExportsInfo} */
|
|
369
|
+
let exportsInfo = this;
|
|
370
|
+
const last = name.length - 1;
|
|
371
|
+
for (let i = 0; ; i++) {
|
|
372
|
+
const exportInfo = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
373
|
+
if (i === last) return exportInfo;
|
|
374
|
+
if (!exportInfo.exportsInfo) return;
|
|
375
|
+
exportsInfo = exportInfo.exportsInfo;
|
|
376
|
+
}
|
|
313
377
|
}
|
|
314
378
|
|
|
315
379
|
/**
|
|
380
|
+
* Gets nested exports info.
|
|
316
381
|
* @param {ExportInfoName[]=} name the export name
|
|
317
382
|
* @returns {ExportsInfo | undefined} the nested exports info
|
|
318
383
|
*/
|
|
319
384
|
getNestedExportsInfo(name) {
|
|
320
385
|
if (Array.isArray(name) && name.length > 0) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
386
|
+
/** @type {ExportsInfo} */
|
|
387
|
+
let exportsInfo = this;
|
|
388
|
+
for (let i = 0; i < name.length; i++) {
|
|
389
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
390
|
+
if (!info.exportsInfo) return;
|
|
391
|
+
exportsInfo = info.exportsInfo;
|
|
392
|
+
}
|
|
393
|
+
return exportsInfo;
|
|
324
394
|
}
|
|
325
395
|
return this;
|
|
326
396
|
}
|
|
327
397
|
|
|
328
398
|
/**
|
|
399
|
+
* Sets unknown exports provided.
|
|
329
400
|
* @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
|
|
330
401
|
* @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
|
|
331
402
|
* @param {Dependency=} targetKey use this as key for the target
|
|
@@ -404,6 +475,7 @@ class ExportsInfo {
|
|
|
404
475
|
}
|
|
405
476
|
|
|
406
477
|
/**
|
|
478
|
+
* Sets used in unknown way.
|
|
407
479
|
* @param {RuntimeSpec} runtime the runtime
|
|
408
480
|
* @returns {boolean} true, when something changed
|
|
409
481
|
*/
|
|
@@ -418,25 +490,14 @@ class ExportsInfo {
|
|
|
418
490
|
if (this._redirectTo.setUsedInUnknownWay(runtime)) {
|
|
419
491
|
changed = true;
|
|
420
492
|
}
|
|
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
|
-
}
|
|
493
|
+
} else if (this._otherExportsInfo.setUsedInUnknownWay(runtime)) {
|
|
494
|
+
changed = true;
|
|
435
495
|
}
|
|
436
496
|
return changed;
|
|
437
497
|
}
|
|
438
498
|
|
|
439
499
|
/**
|
|
500
|
+
* Sets used without info.
|
|
440
501
|
* @param {RuntimeSpec} runtime the runtime
|
|
441
502
|
* @returns {boolean} true, when something changed
|
|
442
503
|
*/
|
|
@@ -451,19 +512,14 @@ class ExportsInfo {
|
|
|
451
512
|
if (this._redirectTo.setUsedWithoutInfo(runtime)) {
|
|
452
513
|
changed = true;
|
|
453
514
|
}
|
|
454
|
-
} else {
|
|
455
|
-
|
|
456
|
-
changed = true;
|
|
457
|
-
}
|
|
458
|
-
if (this._otherExportsInfo.canMangleUse !== false) {
|
|
459
|
-
this._otherExportsInfo.canMangleUse = false;
|
|
460
|
-
changed = true;
|
|
461
|
-
}
|
|
515
|
+
} else if (this._otherExportsInfo.setUsedWithoutInfo(runtime)) {
|
|
516
|
+
changed = true;
|
|
462
517
|
}
|
|
463
518
|
return changed;
|
|
464
519
|
}
|
|
465
520
|
|
|
466
521
|
/**
|
|
522
|
+
* Sets all known exports used.
|
|
467
523
|
* @param {RuntimeSpec} runtime the runtime
|
|
468
524
|
* @returns {boolean} true, when something changed
|
|
469
525
|
*/
|
|
@@ -479,6 +535,7 @@ class ExportsInfo {
|
|
|
479
535
|
}
|
|
480
536
|
|
|
481
537
|
/**
|
|
538
|
+
* Sets used for side effects only.
|
|
482
539
|
* @param {RuntimeSpec} runtime the runtime
|
|
483
540
|
* @returns {boolean} true, when something changed
|
|
484
541
|
*/
|
|
@@ -491,6 +548,7 @@ class ExportsInfo {
|
|
|
491
548
|
}
|
|
492
549
|
|
|
493
550
|
/**
|
|
551
|
+
* Checks whether this exports info is used.
|
|
494
552
|
* @param {RuntimeSpec} runtime the runtime
|
|
495
553
|
* @returns {boolean} true, when the module exports are used in any way
|
|
496
554
|
*/
|
|
@@ -511,6 +569,7 @@ class ExportsInfo {
|
|
|
511
569
|
}
|
|
512
570
|
|
|
513
571
|
/**
|
|
572
|
+
* Checks whether this exports info is module used.
|
|
514
573
|
* @param {RuntimeSpec} runtime the runtime
|
|
515
574
|
* @returns {boolean} true, when the module is used in any way
|
|
516
575
|
*/
|
|
@@ -523,6 +582,7 @@ class ExportsInfo {
|
|
|
523
582
|
}
|
|
524
583
|
|
|
525
584
|
/**
|
|
585
|
+
* Returns set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown).
|
|
526
586
|
* @param {RuntimeSpec} runtime the runtime
|
|
527
587
|
* @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
588
|
*/
|
|
@@ -572,6 +632,7 @@ class ExportsInfo {
|
|
|
572
632
|
}
|
|
573
633
|
|
|
574
634
|
/**
|
|
635
|
+
* Gets provided exports.
|
|
575
636
|
* @returns {null | true | ExportInfoName[]} list of exports when known
|
|
576
637
|
*/
|
|
577
638
|
getProvidedExports() {
|
|
@@ -611,6 +672,7 @@ class ExportsInfo {
|
|
|
611
672
|
}
|
|
612
673
|
|
|
613
674
|
/**
|
|
675
|
+
* Gets relevant exports.
|
|
614
676
|
* @param {RuntimeSpec} runtime the runtime
|
|
615
677
|
* @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
|
|
616
678
|
*/
|
|
@@ -638,22 +700,30 @@ class ExportsInfo {
|
|
|
638
700
|
}
|
|
639
701
|
|
|
640
702
|
/**
|
|
703
|
+
* Checks whether this exports info is export provided.
|
|
641
704
|
* @param {ExportInfoName | ExportInfoName[]} name the name of the export
|
|
642
705
|
* @returns {boolean | undefined | null} if the export is provided
|
|
643
706
|
*/
|
|
644
707
|
isExportProvided(name) {
|
|
645
708
|
if (Array.isArray(name)) {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
709
|
+
/** @type {ExportsInfo} */
|
|
710
|
+
let exportsInfo = this;
|
|
711
|
+
const last = name.length - 1;
|
|
712
|
+
for (let i = 0; ; i++) {
|
|
713
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
714
|
+
if (info.exportsInfo && i < last) {
|
|
715
|
+
exportsInfo = info.exportsInfo;
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
return info.provided ? i === last || undefined : info.provided;
|
|
649
719
|
}
|
|
650
|
-
return info.provided ? name.length === 1 || undefined : info.provided;
|
|
651
720
|
}
|
|
652
721
|
const info = this.getReadOnlyExportInfo(name);
|
|
653
722
|
return info.provided;
|
|
654
723
|
}
|
|
655
724
|
|
|
656
725
|
/**
|
|
726
|
+
* Returns key representing the usage.
|
|
657
727
|
* @param {RuntimeSpec} runtime runtime
|
|
658
728
|
* @returns {string} key representing the usage
|
|
659
729
|
*/
|
|
@@ -673,6 +743,7 @@ class ExportsInfo {
|
|
|
673
743
|
}
|
|
674
744
|
|
|
675
745
|
/**
|
|
746
|
+
* Checks whether this exports info is equally used.
|
|
676
747
|
* @param {RuntimeSpec} runtimeA first runtime
|
|
677
748
|
* @param {RuntimeSpec} runtimeB second runtime
|
|
678
749
|
* @returns {boolean} true, when equally used
|
|
@@ -701,6 +772,7 @@ class ExportsInfo {
|
|
|
701
772
|
}
|
|
702
773
|
|
|
703
774
|
/**
|
|
775
|
+
* Returns usage status.
|
|
704
776
|
* @param {ExportInfoName | ExportInfoName[]} name export name
|
|
705
777
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
706
778
|
* @returns {UsageStateType} usage status
|
|
@@ -708,53 +780,121 @@ class ExportsInfo {
|
|
|
708
780
|
getUsed(name, runtime) {
|
|
709
781
|
if (Array.isArray(name)) {
|
|
710
782
|
if (name.length === 0) return this.otherExportsInfo.getUsed(runtime);
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
783
|
+
// Walk the nested path iteratively to avoid a `slice` per level
|
|
784
|
+
/** @type {ExportsInfo} */
|
|
785
|
+
let exportsInfo = this;
|
|
786
|
+
const last = name.length - 1;
|
|
787
|
+
for (let i = 0; ; i++) {
|
|
788
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
789
|
+
if (i === last || !info.exportsInfo) return info.getUsed(runtime);
|
|
790
|
+
exportsInfo = info.exportsInfo;
|
|
714
791
|
}
|
|
715
|
-
return info.getUsed(runtime);
|
|
716
792
|
}
|
|
717
793
|
const info = this.getReadOnlyExportInfo(name);
|
|
718
794
|
return info.getUsed(runtime);
|
|
719
795
|
}
|
|
720
796
|
|
|
721
797
|
/**
|
|
798
|
+
* Returns the used name.
|
|
722
799
|
* @param {ExportInfoName | ExportInfoName[]} name the export name
|
|
723
800
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
724
801
|
* @returns {UsedName} the used name
|
|
725
802
|
*/
|
|
726
803
|
getUsedName(name, runtime) {
|
|
727
804
|
if (Array.isArray(name)) {
|
|
728
|
-
// TODO improve this
|
|
729
805
|
if (name.length === 0) {
|
|
730
806
|
if (!this.isUsed(runtime)) return false;
|
|
731
807
|
return name;
|
|
732
808
|
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
809
|
+
// Walk the nested path once, collecting used names into a single array
|
|
810
|
+
// instead of slicing/spreading at every level.
|
|
811
|
+
/** @type {ExportsInfo} */
|
|
812
|
+
let exportsInfo = this;
|
|
813
|
+
/** @type {ExportInfoName[] | undefined} */
|
|
814
|
+
let result;
|
|
815
|
+
const last = name.length - 1;
|
|
816
|
+
for (let i = 0; ; i++) {
|
|
817
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
818
|
+
const x = info.getUsedName(name[i], runtime);
|
|
819
|
+
if (x === false) return false;
|
|
820
|
+
if (x instanceof InlinedUsedName) {
|
|
821
|
+
// The inlined value replaces the prefix; trailing ids become its suffix
|
|
822
|
+
if (i === last) return x;
|
|
823
|
+
return new InlinedUsedName(x.value, [
|
|
824
|
+
...x.suffix,
|
|
825
|
+
...name.slice(i + 1)
|
|
826
|
+
]);
|
|
827
|
+
}
|
|
828
|
+
if (i === last) {
|
|
829
|
+
if (result === undefined) return x === name[i] ? name : [x];
|
|
830
|
+
result.push(x);
|
|
831
|
+
return result;
|
|
832
|
+
}
|
|
833
|
+
if (result === undefined) result = [];
|
|
834
|
+
result.push(x);
|
|
835
|
+
// Descend only while the parent is reached purely via property access
|
|
836
|
+
if (
|
|
837
|
+
info.exportsInfo &&
|
|
838
|
+
info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
|
|
839
|
+
) {
|
|
840
|
+
exportsInfo = info.exportsInfo;
|
|
841
|
+
continue;
|
|
842
|
+
}
|
|
843
|
+
// Cannot descend further: keep the remaining ids unchanged
|
|
844
|
+
for (let j = i + 1; j <= last; j++) result.push(name[j]);
|
|
845
|
+
return result;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
const info = this.getReadOnlyExportInfo(name);
|
|
849
|
+
return info.getUsedName(name, runtime);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* Checks whether `getUsedName(name, runtime)` would return an `InlinedUsedName`,
|
|
854
|
+
* without allocating intermediate used-name arrays (hot path for connection conditions).
|
|
855
|
+
* @param {ExportInfoName[]} name the export name path
|
|
856
|
+
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
857
|
+
* @returns {boolean} true when the used name resolves to an inlined value
|
|
858
|
+
*/
|
|
859
|
+
hasInlinedUsedName(name, runtime) {
|
|
860
|
+
if (name.length === 0) return false;
|
|
861
|
+
/** @type {ExportsInfo} */
|
|
862
|
+
let exportsInfo = this;
|
|
863
|
+
const last = name.length - 1;
|
|
864
|
+
for (let i = 0; ; i++) {
|
|
865
|
+
// follow redirects for the fast-path flag; InlinedUsedName can only
|
|
866
|
+
// exist on a level whose (redirected) exportsInfo is marked
|
|
867
|
+
let hasInlined = false;
|
|
868
|
+
/** @type {ExportsInfo | undefined} */
|
|
869
|
+
let e = exportsInfo;
|
|
870
|
+
while (e !== undefined) {
|
|
871
|
+
if (e._hasInlinedExports) {
|
|
872
|
+
hasInlined = true;
|
|
873
|
+
break;
|
|
874
|
+
}
|
|
875
|
+
e = e._redirectTo;
|
|
876
|
+
}
|
|
877
|
+
if (!hasInlined && i === last) return false;
|
|
878
|
+
const info = exportsInfo.getReadOnlyExportInfo(name[i]);
|
|
879
|
+
if (hasInlined) {
|
|
880
|
+
const x = info.getUsedName(name[i], runtime);
|
|
881
|
+
if (x === false) return false;
|
|
882
|
+
if (x instanceof InlinedUsedName) return true;
|
|
883
|
+
if (i === last) return false;
|
|
741
884
|
}
|
|
742
885
|
if (
|
|
743
886
|
info.exportsInfo &&
|
|
744
887
|
info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
|
|
745
888
|
) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
|
|
889
|
+
exportsInfo = info.exportsInfo;
|
|
890
|
+
continue;
|
|
749
891
|
}
|
|
750
|
-
return
|
|
892
|
+
return false;
|
|
751
893
|
}
|
|
752
|
-
const info = this.getReadOnlyExportInfo(name);
|
|
753
|
-
const usedName = info.getUsedName(name, runtime);
|
|
754
|
-
return usedName;
|
|
755
894
|
}
|
|
756
895
|
|
|
757
896
|
/**
|
|
897
|
+
* Updates the hash with the data contributed by this instance.
|
|
758
898
|
* @param {Hash} hash the hash
|
|
759
899
|
* @param {RuntimeSpec} runtime the runtime
|
|
760
900
|
* @returns {void}
|
|
@@ -764,27 +904,38 @@ class ExportsInfo {
|
|
|
764
904
|
}
|
|
765
905
|
|
|
766
906
|
/**
|
|
907
|
+
* Updates hash using the provided hash.
|
|
767
908
|
* @param {Hash} hash the hash
|
|
768
909
|
* @param {RuntimeSpec} runtime the runtime
|
|
769
910
|
* @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
|
|
770
911
|
* @returns {void}
|
|
771
912
|
*/
|
|
772
913
|
_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
|
|
773
|
-
|
|
774
|
-
|
|
914
|
+
// add/delete keeps path semantics without copying the set per level
|
|
915
|
+
alreadyVisitedExportsInfo.add(this);
|
|
775
916
|
for (const exportInfo of this.orderedExports) {
|
|
776
917
|
if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
|
|
777
|
-
exportInfo._updateHash(hash, runtime,
|
|
918
|
+
exportInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|
|
778
919
|
}
|
|
779
920
|
}
|
|
780
|
-
this._sideEffectsOnlyInfo._updateHash(
|
|
781
|
-
|
|
921
|
+
this._sideEffectsOnlyInfo._updateHash(
|
|
922
|
+
hash,
|
|
923
|
+
runtime,
|
|
924
|
+
alreadyVisitedExportsInfo
|
|
925
|
+
);
|
|
926
|
+
this._otherExportsInfo._updateHash(
|
|
927
|
+
hash,
|
|
928
|
+
runtime,
|
|
929
|
+
alreadyVisitedExportsInfo
|
|
930
|
+
);
|
|
782
931
|
if (this._redirectTo !== undefined) {
|
|
783
|
-
this._redirectTo._updateHash(hash, runtime,
|
|
932
|
+
this._redirectTo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|
|
784
933
|
}
|
|
934
|
+
alreadyVisitedExportsInfo.delete(this);
|
|
785
935
|
}
|
|
786
936
|
|
|
787
937
|
/**
|
|
938
|
+
* Gets restore provided data.
|
|
788
939
|
* @returns {RestoreProvidedData} restore provided data
|
|
789
940
|
*/
|
|
790
941
|
getRestoreProvidedData() {
|
|
@@ -794,22 +945,42 @@ class ExportsInfo {
|
|
|
794
945
|
/** @type {RestoreProvidedDataExports[]} */
|
|
795
946
|
const exports = [];
|
|
796
947
|
for (const exportInfo of this.orderedExports) {
|
|
948
|
+
const canInlineProvide = exportInfo.canInlineProvide;
|
|
949
|
+
const pureProvide = exportInfo.pureProvide;
|
|
950
|
+
// inline-exports data is only stored when present, so builds without the
|
|
951
|
+
// feature don't pay for it in the persistent cache
|
|
952
|
+
const hasInlineInfo =
|
|
953
|
+
canInlineProvide !== undefined || pureProvide !== undefined;
|
|
797
954
|
if (
|
|
798
955
|
exportInfo.provided !== otherProvided ||
|
|
799
956
|
exportInfo.canMangleProvide !== otherCanMangleProvide ||
|
|
800
957
|
exportInfo.terminalBinding !== otherTerminalBinding ||
|
|
958
|
+
hasInlineInfo ||
|
|
801
959
|
exportInfo.exportsInfoOwned
|
|
802
960
|
) {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
?
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
961
|
+
const exportsInfo = exportInfo.exportsInfoOwned
|
|
962
|
+
? /** @type {NonNullable<ExportInfo["exportsInfo"]>} */
|
|
963
|
+
(exportInfo.exportsInfo).getRestoreProvidedData()
|
|
964
|
+
: undefined;
|
|
965
|
+
exports.push(
|
|
966
|
+
hasInlineInfo
|
|
967
|
+
? {
|
|
968
|
+
name: exportInfo.name,
|
|
969
|
+
provided: exportInfo.provided,
|
|
970
|
+
canMangleProvide: exportInfo.canMangleProvide,
|
|
971
|
+
canInlineProvide,
|
|
972
|
+
terminalBinding: exportInfo.terminalBinding,
|
|
973
|
+
pureProvide,
|
|
974
|
+
exportsInfo
|
|
975
|
+
}
|
|
976
|
+
: {
|
|
977
|
+
name: exportInfo.name,
|
|
978
|
+
provided: exportInfo.provided,
|
|
979
|
+
canMangleProvide: exportInfo.canMangleProvide,
|
|
980
|
+
terminalBinding: exportInfo.terminalBinding,
|
|
981
|
+
exportsInfo
|
|
982
|
+
}
|
|
983
|
+
);
|
|
813
984
|
}
|
|
814
985
|
}
|
|
815
986
|
return new RestoreProvidedData(
|
|
@@ -821,6 +992,7 @@ class ExportsInfo {
|
|
|
821
992
|
}
|
|
822
993
|
|
|
823
994
|
/**
|
|
995
|
+
* Processes the provided data.
|
|
824
996
|
* @param {RestoreProvidedData} data data
|
|
825
997
|
*/
|
|
826
998
|
restoreProvided({
|
|
@@ -843,7 +1015,9 @@ class ExportsInfo {
|
|
|
843
1015
|
const exportInfo = this.getExportInfo(exp.name);
|
|
844
1016
|
exportInfo.provided = exp.provided;
|
|
845
1017
|
exportInfo.canMangleProvide = exp.canMangleProvide;
|
|
1018
|
+
exportInfo.canInlineProvide = exp.canInlineProvide;
|
|
846
1019
|
exportInfo.terminalBinding = exp.terminalBinding;
|
|
1020
|
+
exportInfo.pureProvide = exp.pureProvide;
|
|
847
1021
|
if (exp.exportsInfo) {
|
|
848
1022
|
const exportsInfo = exportInfo.createNestedExportsInfo();
|
|
849
1023
|
exportsInfo.restoreProvided(exp.exportsInfo);
|
|
@@ -855,6 +1029,7 @@ class ExportsInfo {
|
|
|
855
1029
|
|
|
856
1030
|
class ExportInfo {
|
|
857
1031
|
/**
|
|
1032
|
+
* Creates an instance of ExportInfo.
|
|
858
1033
|
* @param {ExportInfoName | null} name the original name of the export
|
|
859
1034
|
* @param {ExportInfo=} initFrom init values from this ExportInfo
|
|
860
1035
|
*/
|
|
@@ -906,6 +1081,14 @@ class ExportInfo {
|
|
|
906
1081
|
* @type {boolean | undefined}
|
|
907
1082
|
*/
|
|
908
1083
|
this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
|
|
1084
|
+
// only specific export info can be inlined,
|
|
1085
|
+
// so _otherExportsInfo.canInlineProvide is always undefined
|
|
1086
|
+
/**
|
|
1087
|
+
* value slot for `canInlineProvide`
|
|
1088
|
+
* @private
|
|
1089
|
+
* @type {InlinedValue | undefined}
|
|
1090
|
+
*/
|
|
1091
|
+
this._inlinedValue = undefined;
|
|
909
1092
|
/**
|
|
910
1093
|
* true: it can be mangled
|
|
911
1094
|
* false: is can not be mangled
|
|
@@ -913,6 +1096,12 @@ class ExportInfo {
|
|
|
913
1096
|
* @type {boolean | undefined}
|
|
914
1097
|
*/
|
|
915
1098
|
this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
|
|
1099
|
+
/**
|
|
1100
|
+
* bitfield backing `canInlineUse` and `pureProvide`
|
|
1101
|
+
* @private
|
|
1102
|
+
* @type {number}
|
|
1103
|
+
*/
|
|
1104
|
+
this._inlineFlags = 0;
|
|
916
1105
|
/** @type {boolean} */
|
|
917
1106
|
this.exportsInfoOwned = false;
|
|
918
1107
|
/** @type {ExportsInfo | undefined} */
|
|
@@ -933,6 +1122,57 @@ class ExportInfo {
|
|
|
933
1122
|
this._maxTarget = undefined;
|
|
934
1123
|
}
|
|
935
1124
|
|
|
1125
|
+
/**
|
|
1126
|
+
* defined: the export binds to a small primitive constant and may be inlined
|
|
1127
|
+
* undefined: not an inlined constant export
|
|
1128
|
+
* @returns {InlinedValue | undefined} inlined value
|
|
1129
|
+
*/
|
|
1130
|
+
get canInlineProvide() {
|
|
1131
|
+
return this._inlinedValue;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
set canInlineProvide(value) {
|
|
1135
|
+
this._inlinedValue = value;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* true: at least one consumer accepts inlining, none rejected
|
|
1140
|
+
* false: at least one consumer rejected inlining
|
|
1141
|
+
* undefined: collecting; no consumer has decided yet
|
|
1142
|
+
* @returns {boolean | undefined} can inline use
|
|
1143
|
+
*/
|
|
1144
|
+
get canInlineUse() {
|
|
1145
|
+
switch (this._inlineFlags & INLINE_USE_MASK) {
|
|
1146
|
+
case INLINE_USE_TRUE:
|
|
1147
|
+
return true;
|
|
1148
|
+
case INLINE_USE_FALSE:
|
|
1149
|
+
return false;
|
|
1150
|
+
default:
|
|
1151
|
+
return undefined;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
set canInlineUse(value) {
|
|
1156
|
+
this._inlineFlags =
|
|
1157
|
+
(this._inlineFlags & ~INLINE_USE_MASK) |
|
|
1158
|
+
(value === undefined ? 0 : value ? INLINE_USE_TRUE : INLINE_USE_FALSE);
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
* Only specific export info can be pure, so other_export_info.pure is always undefined.
|
|
1163
|
+
* true: calling the export has no observable side effects
|
|
1164
|
+
* undefined: it was not determined whether the export is pure
|
|
1165
|
+
* @returns {boolean | undefined} pure provide
|
|
1166
|
+
*/
|
|
1167
|
+
get pureProvide() {
|
|
1168
|
+
return (this._inlineFlags & PURE_PROVIDE_FLAG) !== 0 ? true : undefined;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
set pureProvide(value) {
|
|
1172
|
+
if (value) this._inlineFlags |= PURE_PROVIDE_FLAG;
|
|
1173
|
+
else this._inlineFlags &= ~PURE_PROVIDE_FLAG;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
936
1176
|
get canMangle() {
|
|
937
1177
|
switch (this.canMangleProvide) {
|
|
938
1178
|
case undefined:
|
|
@@ -955,6 +1195,16 @@ class ExportInfo {
|
|
|
955
1195
|
}
|
|
956
1196
|
|
|
957
1197
|
/**
|
|
1198
|
+
* @returns {InlinedValue | undefined} the inlined value when both provide and use sides agree, otherwise undefined
|
|
1199
|
+
*/
|
|
1200
|
+
canInline() {
|
|
1201
|
+
return this.canInlineProvide !== undefined && this.canInlineUse === true
|
|
1202
|
+
? this.canInlineProvide
|
|
1203
|
+
: undefined;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
/**
|
|
1207
|
+
* Sets used in unknown way.
|
|
958
1208
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
959
1209
|
* @returns {boolean} true, when something changed
|
|
960
1210
|
*/
|
|
@@ -973,10 +1223,15 @@ class ExportInfo {
|
|
|
973
1223
|
this.canMangleUse = false;
|
|
974
1224
|
changed = true;
|
|
975
1225
|
}
|
|
1226
|
+
if (this.canInlineUse !== false) {
|
|
1227
|
+
this.canInlineUse = false;
|
|
1228
|
+
changed = true;
|
|
1229
|
+
}
|
|
976
1230
|
return changed;
|
|
977
1231
|
}
|
|
978
1232
|
|
|
979
1233
|
/**
|
|
1234
|
+
* Sets used without info.
|
|
980
1235
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
981
1236
|
* @returns {boolean} true, when something changed
|
|
982
1237
|
*/
|
|
@@ -989,9 +1244,22 @@ class ExportInfo {
|
|
|
989
1244
|
this.canMangleUse = false;
|
|
990
1245
|
changed = true;
|
|
991
1246
|
}
|
|
1247
|
+
if (this.canInlineUse !== false) {
|
|
1248
|
+
this.canInlineUse = false;
|
|
1249
|
+
changed = true;
|
|
1250
|
+
}
|
|
992
1251
|
return changed;
|
|
993
1252
|
}
|
|
994
1253
|
|
|
1254
|
+
setHasProvideInfo() {
|
|
1255
|
+
if (this.provided === undefined) {
|
|
1256
|
+
this.provided = false;
|
|
1257
|
+
}
|
|
1258
|
+
if (this.canMangleProvide === undefined) {
|
|
1259
|
+
this.canMangleProvide = true;
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
|
|
995
1263
|
setHasUseInfo() {
|
|
996
1264
|
if (!this._hasUseInRuntimeInfo) {
|
|
997
1265
|
this._hasUseInRuntimeInfo = true;
|
|
@@ -1006,6 +1274,7 @@ class ExportInfo {
|
|
|
1006
1274
|
}
|
|
1007
1275
|
|
|
1008
1276
|
/**
|
|
1277
|
+
* Sets used conditionally.
|
|
1009
1278
|
* @param {(condition: UsageStateType) => boolean} condition compare with old value
|
|
1010
1279
|
* @param {UsageStateType} newValue set when condition is true
|
|
1011
1280
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
@@ -1059,6 +1328,7 @@ class ExportInfo {
|
|
|
1059
1328
|
}
|
|
1060
1329
|
|
|
1061
1330
|
/**
|
|
1331
|
+
* Updates used using the provided new value.
|
|
1062
1332
|
* @param {UsageStateType} newValue new value of the used state
|
|
1063
1333
|
* @param {RuntimeSpec} runtime only apply to this runtime
|
|
1064
1334
|
* @returns {boolean} true when something has changed
|
|
@@ -1107,6 +1377,7 @@ class ExportInfo {
|
|
|
1107
1377
|
}
|
|
1108
1378
|
|
|
1109
1379
|
/**
|
|
1380
|
+
* Returns true, if something has changed.
|
|
1110
1381
|
* @param {Dependency} key the key
|
|
1111
1382
|
* @returns {boolean} true, if something has changed
|
|
1112
1383
|
*/
|
|
@@ -1120,6 +1391,7 @@ class ExportInfo {
|
|
|
1120
1391
|
}
|
|
1121
1392
|
|
|
1122
1393
|
/**
|
|
1394
|
+
* Updates target using the provided key.
|
|
1123
1395
|
* @param {Dependency} key the key
|
|
1124
1396
|
* @param {ModuleGraphConnection} connection the target module if a single one
|
|
1125
1397
|
* @param {ExportInfoName[] | null=} exportName the exported name
|
|
@@ -1165,6 +1437,7 @@ class ExportInfo {
|
|
|
1165
1437
|
}
|
|
1166
1438
|
|
|
1167
1439
|
/**
|
|
1440
|
+
* Returns usage state.
|
|
1168
1441
|
* @param {RuntimeSpec} runtime for this runtime
|
|
1169
1442
|
* @returns {UsageStateType} usage state
|
|
1170
1443
|
*/
|
|
@@ -1203,10 +1476,10 @@ class ExportInfo {
|
|
|
1203
1476
|
}
|
|
1204
1477
|
|
|
1205
1478
|
/**
|
|
1206
|
-
*
|
|
1479
|
+
* Returns used name. May return InlinedUsedName when the export is inlined to a primitive.
|
|
1207
1480
|
* @param {string | undefined} fallbackName fallback name for used exports with no name
|
|
1208
1481
|
* @param {RuntimeSpec} runtime check usage for this runtime only
|
|
1209
|
-
* @returns {string | false} used name
|
|
1482
|
+
* @returns {string | InlinedUsedName | false} used name
|
|
1210
1483
|
*/
|
|
1211
1484
|
getUsedName(fallbackName, runtime) {
|
|
1212
1485
|
if (this._hasUseInRuntimeInfo) {
|
|
@@ -1218,14 +1491,17 @@ class ExportInfo {
|
|
|
1218
1491
|
if (!this._usedInRuntime.has(runtime)) {
|
|
1219
1492
|
return false;
|
|
1220
1493
|
}
|
|
1221
|
-
} else if (
|
|
1222
|
-
runtime
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1494
|
+
} else if (runtime !== undefined) {
|
|
1495
|
+
// Unused unless at least one runtime in the set is used; loop avoids
|
|
1496
|
+
// allocating an array from the runtime set on this hot path.
|
|
1497
|
+
let anyUsed = false;
|
|
1498
|
+
for (const r of runtime) {
|
|
1499
|
+
if (this._usedInRuntime.has(r)) {
|
|
1500
|
+
anyUsed = true;
|
|
1501
|
+
break;
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
if (!anyUsed) return false;
|
|
1229
1505
|
}
|
|
1230
1506
|
}
|
|
1231
1507
|
}
|
|
@@ -1234,6 +1510,7 @@ class ExportInfo {
|
|
|
1234
1510
|
}
|
|
1235
1511
|
|
|
1236
1512
|
/**
|
|
1513
|
+
* Checks whether this export info has used name.
|
|
1237
1514
|
* @returns {boolean} true, when a mangled name of this export is set
|
|
1238
1515
|
*/
|
|
1239
1516
|
hasUsedName() {
|
|
@@ -1241,8 +1518,8 @@ class ExportInfo {
|
|
|
1241
1518
|
}
|
|
1242
1519
|
|
|
1243
1520
|
/**
|
|
1244
|
-
*
|
|
1245
|
-
* @param {string} name the new name
|
|
1521
|
+
* Updates used name using the provided name.
|
|
1522
|
+
* @param {string | InlinedUsedName} name the new name
|
|
1246
1523
|
* @returns {void}
|
|
1247
1524
|
*/
|
|
1248
1525
|
setUsedName(name) {
|
|
@@ -1250,6 +1527,7 @@ class ExportInfo {
|
|
|
1250
1527
|
}
|
|
1251
1528
|
|
|
1252
1529
|
/**
|
|
1530
|
+
* Gets terminal binding.
|
|
1253
1531
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1254
1532
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1255
1533
|
* @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
|
|
@@ -1294,6 +1572,7 @@ class ExportInfo {
|
|
|
1294
1572
|
}
|
|
1295
1573
|
|
|
1296
1574
|
/**
|
|
1575
|
+
* Returns the target, undefined when there is no target, false when no target is valid.
|
|
1297
1576
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1298
1577
|
* @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
|
|
1299
1578
|
* @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
|
|
@@ -1303,6 +1582,7 @@ class ExportInfo {
|
|
|
1303
1582
|
}
|
|
1304
1583
|
|
|
1305
1584
|
/**
|
|
1585
|
+
* Returns the target, undefined when there is no target, false when no target is valid.
|
|
1306
1586
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1307
1587
|
* @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
|
|
1308
1588
|
* @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
|
|
@@ -1353,6 +1633,7 @@ class ExportInfo {
|
|
|
1353
1633
|
}
|
|
1354
1634
|
|
|
1355
1635
|
/**
|
|
1636
|
+
* Returns the target.
|
|
1356
1637
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1357
1638
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1358
1639
|
* @returns {TargetItemWithConnection | undefined} the target
|
|
@@ -1364,6 +1645,7 @@ class ExportInfo {
|
|
|
1364
1645
|
}
|
|
1365
1646
|
|
|
1366
1647
|
/**
|
|
1648
|
+
* Returns the target.
|
|
1367
1649
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1368
1650
|
* @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
|
|
1369
1651
|
* @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
|
|
@@ -1371,6 +1653,7 @@ class ExportInfo {
|
|
|
1371
1653
|
*/
|
|
1372
1654
|
_getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
|
|
1373
1655
|
/**
|
|
1656
|
+
* Returns resolved target.
|
|
1374
1657
|
* @param {TargetItem | undefined | null} inputTarget unresolved target
|
|
1375
1658
|
* @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
|
|
1376
1659
|
* @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
|
|
@@ -1466,7 +1749,7 @@ class ExportInfo {
|
|
|
1466
1749
|
* Move the target forward as long resolveTargetFilter is fulfilled
|
|
1467
1750
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
1468
1751
|
* @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
|
|
1752
|
+
* @param {((target: TargetItemWithConnection) => ModuleGraphConnection | undefined)=} updateOriginalConnection updates the original connection instead of using the target connection
|
|
1470
1753
|
* @returns {TargetItemWithConnection | undefined} the resolved target when moved
|
|
1471
1754
|
*/
|
|
1472
1755
|
moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
|
|
@@ -1490,7 +1773,7 @@ class ExportInfo {
|
|
|
1490
1773
|
/** @type {Target} */
|
|
1491
1774
|
(this._target).set(undefined, {
|
|
1492
1775
|
connection: updateOriginalConnection
|
|
1493
|
-
? updateOriginalConnection(target)
|
|
1776
|
+
? updateOriginalConnection(target) || target.connection
|
|
1494
1777
|
: target.connection,
|
|
1495
1778
|
export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
|
|
1496
1779
|
target.export
|
|
@@ -1501,6 +1784,7 @@ class ExportInfo {
|
|
|
1501
1784
|
}
|
|
1502
1785
|
|
|
1503
1786
|
/**
|
|
1787
|
+
* Creates a nested exports info.
|
|
1504
1788
|
* @returns {ExportsInfo} an exports info
|
|
1505
1789
|
*/
|
|
1506
1790
|
createNestedExportsInfo() {
|
|
@@ -1522,6 +1806,7 @@ class ExportInfo {
|
|
|
1522
1806
|
}
|
|
1523
1807
|
|
|
1524
1808
|
/**
|
|
1809
|
+
* Checks whether this export info contains the base info.
|
|
1525
1810
|
* @param {ExportInfo} baseInfo base info
|
|
1526
1811
|
* @param {RuntimeSpec} runtime runtime
|
|
1527
1812
|
* @returns {boolean} true when has info, otherwise false
|
|
@@ -1536,6 +1821,7 @@ class ExportInfo {
|
|
|
1536
1821
|
}
|
|
1537
1822
|
|
|
1538
1823
|
/**
|
|
1824
|
+
* Updates the hash with the data contributed by this instance.
|
|
1539
1825
|
* @param {Hash} hash the hash
|
|
1540
1826
|
* @param {RuntimeSpec} runtime the runtime
|
|
1541
1827
|
* @returns {void}
|
|
@@ -1545,15 +1831,20 @@ class ExportInfo {
|
|
|
1545
1831
|
}
|
|
1546
1832
|
|
|
1547
1833
|
/**
|
|
1834
|
+
* Updates hash using the provided hash.
|
|
1548
1835
|
* @param {Hash} hash the hash
|
|
1549
1836
|
* @param {RuntimeSpec} runtime the runtime
|
|
1550
1837
|
* @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
|
|
1551
1838
|
*/
|
|
1552
1839
|
_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
|
|
1840
|
+
const usedNameHash =
|
|
1841
|
+
this._usedName instanceof InlinedUsedName
|
|
1842
|
+
? `inlined:${this._usedName.render("")}`
|
|
1843
|
+
: this._usedName || this.name;
|
|
1553
1844
|
hash.update(
|
|
1554
|
-
`${
|
|
1845
|
+
`${usedNameHash}${this.getUsed(runtime)}${this.provided}${
|
|
1555
1846
|
this.terminalBinding
|
|
1556
|
-
}`
|
|
1847
|
+
}${this.pureProvide ? "P" : ""}`
|
|
1557
1848
|
);
|
|
1558
1849
|
if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
|
|
1559
1850
|
this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
|