webpack 5.107.2 → 5.108.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/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +8 -4
- package/lib/CacheFacade.js +7 -0
- package/lib/Chunk.js +4 -0
- package/lib/ChunkGraph.js +30 -9
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +2 -1
- package/lib/Compilation.js +396 -65
- package/lib/Compiler.js +25 -11
- package/lib/ConcatenationScope.js +10 -3
- package/lib/ContextExclusionPlugin.js +1 -0
- package/lib/ContextModule.js +92 -47
- package/lib/ContextReplacementPlugin.js +4 -0
- package/lib/DefinePlugin.js +89 -15
- package/lib/Dependency.js +111 -7
- package/lib/EntryOptionPlugin.js +39 -2
- package/lib/EntryPlugin.js +2 -0
- package/lib/ExportsInfo.js +314 -73
- package/lib/ExternalModule.js +82 -34
- package/lib/ExternalModuleFactoryPlugin.js +1 -0
- package/lib/ExternalsPlugin.js +1 -0
- package/lib/FileSystemInfo.js +173 -23
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
- package/lib/FlagDependencyExportsPlugin.js +23 -0
- package/lib/FlagDependencyUsagePlugin.js +87 -5
- package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
- package/lib/Generator.js +8 -0
- package/lib/HotModuleReplacementPlugin.js +65 -28
- package/lib/IgnorePlugin.js +1 -0
- package/lib/InitFragment.js +5 -0
- package/lib/JavascriptMetaInfoPlugin.js +7 -5
- package/lib/LazyBarrel.js +361 -0
- package/lib/LoaderTargetPlugin.js +1 -0
- package/lib/Module.js +21 -42
- package/lib/ModuleGraph.js +3 -2
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleTemplate.js +2 -0
- package/lib/MultiCompiler.js +2 -0
- package/lib/MultiStats.js +1 -0
- package/lib/MultiWatching.js +2 -0
- package/lib/NodeStuffPlugin.js +22 -17
- package/lib/NormalModule.js +142 -80
- package/lib/NormalModuleReplacementPlugin.js +2 -0
- package/lib/PrefetchPlugin.js +2 -0
- package/lib/ProgressPlugin.js +8 -0
- package/lib/ProvidePlugin.js +1 -0
- package/lib/RawModule.js +20 -16
- package/lib/RecordIdsPlugin.js +1 -0
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimePlugin.js +58 -26
- package/lib/RuntimeTemplate.js +278 -21
- package/lib/SelfModuleFactory.js +1 -0
- package/lib/SourceMapDevToolPlugin.js +3 -5
- package/lib/Stats.js +1 -0
- package/lib/Template.js +8 -2
- package/lib/TemplatedPathPlugin.js +473 -131
- package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
- package/lib/WarnDeprecatedOptionPlugin.js +4 -0
- package/lib/WarnNoModeSetPlugin.js +1 -0
- package/lib/WatchIgnorePlugin.js +1 -0
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +50 -5
- package/lib/asset/AssetBytesGenerator.js +11 -3
- package/lib/asset/AssetGenerator.js +47 -22
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +14 -14
- package/lib/asset/AssetParser.js +2 -2
- package/lib/asset/AssetSourceGenerator.js +8 -0
- package/lib/asset/RawDataUrlModule.js +12 -13
- package/lib/buildChunkGraph.js +64 -7
- package/lib/bun/BunTargetPlugin.js +48 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
- package/lib/cache/AddManagedPathsPlugin.js +3 -0
- package/lib/cache/IdleFileCachePlugin.js +4 -0
- package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
- package/lib/cache/PackFileCacheStrategy.js +1 -0
- package/lib/cache/ResolverCachePlugin.js +2 -0
- package/lib/cache/mergeEtags.js +2 -0
- package/lib/cli.js +109 -19
- package/lib/config/browserslistTargetHandler.js +99 -0
- package/lib/config/defaults.js +147 -7
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +5 -0
- package/lib/config/target.js +181 -2
- package/lib/container/ContainerEntryModule.js +15 -14
- package/lib/container/ContainerExposedDependency.js +2 -2
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +5 -7
- package/lib/container/FallbackModule.js +10 -9
- package/lib/container/RemoteModule.js +20 -10
- package/lib/container/RemoteRuntimeModule.js +14 -12
- package/lib/css/CssGenerator.js +353 -327
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
- package/lib/css/CssLoadingRuntimeModule.js +118 -47
- package/lib/css/CssModule.js +52 -23
- package/lib/css/CssModulesPlugin.js +107 -124
- package/lib/css/CssParser.js +2759 -2205
- package/lib/css/syntax.js +2859 -0
- package/lib/debug/ProfilingPlugin.js +2 -0
- package/lib/deno/DenoTargetPlugin.js +47 -0
- package/lib/dependencies/AMDDefineDependency.js +22 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
- package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
- package/lib/dependencies/AMDRequireContextDependency.js +7 -11
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
- package/lib/dependencies/AMDRequireDependency.js +24 -20
- package/lib/dependencies/CachedConstDependency.js +3 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
- package/lib/dependencies/CommonJsExportsDependency.js +21 -16
- package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
- package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
- package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
- package/lib/dependencies/CommonJsPlugin.js +1 -1
- package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
- package/lib/dependencies/CommonJsRequireDependency.js +42 -11
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
- package/lib/dependencies/ConstDependency.js +16 -11
- package/lib/dependencies/ContextDependency.js +4 -0
- package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
- package/lib/dependencies/ContextElementDependency.js +23 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
- package/lib/dependencies/CriticalDependencyWarning.js +1 -0
- package/lib/dependencies/CssIcssExportDependency.js +512 -574
- package/lib/dependencies/CssIcssImportDependency.js +9 -9
- package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
- package/lib/dependencies/CssImportDependency.js +25 -1
- package/lib/dependencies/CssUrlDependency.js +23 -14
- package/lib/dependencies/DllEntryDependency.js +9 -13
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +12 -12
- package/lib/dependencies/ExternalModuleDependency.js +8 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
- package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -15
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
- package/lib/dependencies/HarmonyExports.js +4 -1
- package/lib/dependencies/HarmonyImportDependency.js +24 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
- package/lib/dependencies/HarmonyImportGuard.js +254 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
- package/lib/dependencies/HarmonyLinkingError.js +1 -0
- package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
- package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +261 -109
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +17 -13
- package/lib/dependencies/HtmlInlineStyleDependency.js +45 -11
- package/lib/dependencies/ImportContextDependency.js +5 -9
- package/lib/dependencies/ImportDependency.js +44 -2
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
- package/lib/dependencies/ImportMetaPlugin.js +74 -30
- package/lib/dependencies/ImportParserPlugin.js +19 -0
- package/lib/dependencies/ImportWeakDependency.js +1 -0
- package/lib/dependencies/JsonExportsDependency.js +9 -9
- package/lib/dependencies/LoaderImportDependency.js +1 -0
- package/lib/dependencies/LocalModule.js +11 -12
- package/lib/dependencies/LocalModuleDependency.js +11 -13
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
- package/lib/dependencies/ModuleDependency.js +7 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
- package/lib/dependencies/ProvidedDependency.js +31 -27
- package/lib/dependencies/PureExpressionDependency.js +7 -9
- package/lib/dependencies/RequireEnsureDependency.js +12 -13
- package/lib/dependencies/RequireHeaderDependency.js +3 -4
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
- package/lib/dependencies/RequireResolveContextDependency.js +7 -11
- package/lib/dependencies/RequireResolveDependency.js +1 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
- package/lib/dependencies/StaticExportsDependency.js +10 -10
- package/lib/dependencies/SystemPlugin.js +2 -0
- package/lib/dependencies/URLContextDependency.js +5 -7
- package/lib/dependencies/URLDependency.js +14 -16
- package/lib/dependencies/UnsupportedDependency.js +8 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
- package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
- package/lib/dependencies/WorkerDependency.js +19 -8
- package/lib/dependencies/WorkerPlugin.js +22 -6
- package/lib/dependencies/processExportInfo.js +13 -11
- package/lib/dll/DelegatedModule.js +29 -15
- package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
- package/lib/dll/DelegatedPlugin.js +1 -0
- package/lib/dll/DllEntryPlugin.js +3 -0
- package/lib/dll/DllModule.js +3 -2
- package/lib/dll/DllPlugin.js +16 -0
- package/lib/dll/DllReferencePlugin.js +3 -0
- package/lib/dll/LibManifestPlugin.js +1 -0
- package/lib/electron/ElectronTargetPlugin.js +22 -4
- package/lib/errors/ConcurrentCompilationError.js +1 -0
- package/lib/errors/HookWebpackError.js +11 -13
- package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
- package/lib/errors/JSONParseError.js +9 -8
- package/lib/errors/ModuleBuildError.js +16 -13
- package/lib/errors/ModuleDependencyError.js +8 -1
- package/lib/errors/ModuleDependencyWarning.js +8 -1
- package/lib/errors/ModuleError.js +5 -11
- package/lib/errors/ModuleHashingError.js +4 -0
- package/lib/errors/ModuleNotFoundError.js +3 -0
- package/lib/errors/ModuleParseError.js +5 -11
- package/lib/errors/ModuleRestoreError.js +2 -0
- package/lib/errors/ModuleStoreError.js +3 -0
- package/lib/errors/ModuleWarning.js +7 -11
- package/lib/errors/NodeStuffInWebError.js +1 -0
- package/lib/errors/NonErrorEmittedError.js +2 -0
- package/lib/errors/UnhandledSchemeError.js +1 -0
- package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/LazyCompilationPlugin.js +30 -6
- package/lib/html/HtmlGenerator.js +217 -23
- package/lib/html/HtmlModule.js +40 -0
- package/lib/html/HtmlModulesPlugin.js +219 -55
- package/lib/html/HtmlParser.js +1108 -1099
- package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
- package/lib/ids/IdHelpers.js +4 -2
- package/lib/index.js +19 -0
- package/lib/javascript/BasicEvaluatedExpression.js +1 -0
- package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
- package/lib/javascript/JavascriptGenerator.js +6 -2
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +257 -102
- package/lib/javascript/JavascriptParser.js +285 -158
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +7 -0
- package/lib/json/JsonParser.js +4 -2
- package/lib/library/AssignLibraryPlugin.js +5 -3
- package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
- package/lib/library/FalseIIFEUmdWarning.js +1 -0
- package/lib/library/ModuleLibraryPlugin.js +24 -5
- package/lib/library/SystemLibraryPlugin.js +3 -3
- package/lib/node/NodeTargetPlugin.js +1 -0
- package/lib/node/NodeWatchFileSystem.js +1 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
- package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
- package/lib/optimize/ConcatenatedModule.js +395 -77
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +372 -275
- package/lib/optimize/InnerGraphPlugin.js +196 -99
- package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
- package/lib/optimize/RealContentHashPlugin.js +14 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
- package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
- package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/HttpUriPlugin.js +3 -2
- package/lib/serialization/AggregateErrorSerializer.js +7 -6
- package/lib/serialization/ArraySerializer.js +4 -8
- package/lib/serialization/BinaryMiddleware.js +538 -468
- package/lib/serialization/DateObjectSerializer.js +2 -2
- package/lib/serialization/ErrorObjectSerializer.js +7 -6
- package/lib/serialization/MapObjectSerializer.js +5 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
- package/lib/serialization/ObjectMiddleware.js +50 -13
- package/lib/serialization/PlainObjectSerializer.js +9 -8
- package/lib/serialization/RegExpObjectSerializer.js +2 -2
- package/lib/serialization/Serializer.js +1 -0
- package/lib/serialization/SetObjectSerializer.js +4 -8
- package/lib/sharing/ConsumeSharedModule.js +6 -7
- package/lib/sharing/ConsumeSharedPlugin.js +1 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
- package/lib/sharing/ProvideSharedDependency.js +30 -15
- package/lib/sharing/ProvideSharedModule.js +30 -11
- package/lib/sharing/ProvideSharedPlugin.js +4 -2
- package/lib/sharing/SharePlugin.js +3 -0
- package/lib/sharing/ShareRuntimeModule.js +18 -16
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +1 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
- package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
- package/lib/stats/StatsFactory.js +11 -9
- package/lib/stats/StatsPrinter.js +9 -2
- package/lib/url/URLParserPlugin.js +5 -2
- package/lib/util/AsyncQueue.js +10 -0
- package/lib/util/LazyBucketSortedSet.js +5 -0
- package/lib/util/LazySet.js +6 -4
- package/lib/util/LocConverter.js +11 -1
- package/lib/util/Semaphore.js +1 -0
- package/lib/util/SourceProcessor.js +106 -0
- package/lib/util/TupleSet.js +1 -0
- package/lib/util/WeakTupleMap.js +27 -1
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/comparators.js +2 -2
- package/lib/util/concatenate.js +31 -7
- package/lib/util/createHash.js +0 -1
- package/lib/util/deterministicGrouping.js +19 -12
- package/lib/util/extractSourceMap.js +1 -1
- package/lib/util/findGraphRoots.js +2 -0
- package/lib/util/fs.js +10 -5
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +24 -15
- package/lib/util/identifier.js +7 -0
- package/lib/util/internalSerializables.js +11 -2
- package/lib/util/magicComment.js +42 -0
- package/lib/util/makeSerializable.js +1 -0
- package/lib/util/nonNumericOnlyHash.js +30 -1
- package/lib/util/property.js +7 -1
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +4 -4
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
- package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
- package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
- package/lib/wasm-sync/WebAssemblyParser.js +7 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
- package/package.json +35 -27
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +212 -3
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
- package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +1456 -290
- package/lib/css/walkCssTokens.js +0 -2020
- package/lib/util/AppendOnlyStackedSet.js +0 -93
|
@@ -54,6 +54,7 @@ const {
|
|
|
54
54
|
runtimeConditionToString,
|
|
55
55
|
subtractRuntimeCondition
|
|
56
56
|
} = require("../util/runtime");
|
|
57
|
+
const { InlinedUsedName } = require("./InlineExports");
|
|
57
58
|
|
|
58
59
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
59
60
|
/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
|
|
@@ -69,6 +70,7 @@ const {
|
|
|
69
70
|
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
|
70
71
|
/** @typedef {import("../Module").FileSystemDependencies} FileSystemDependencies */
|
|
71
72
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
73
|
+
/** @typedef {import("../Module").ExportsType} ExportsType */
|
|
72
74
|
/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
|
|
73
75
|
/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
|
|
74
76
|
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
|
|
@@ -84,6 +86,8 @@ const {
|
|
|
84
86
|
/** @typedef {import("../RequestShortener")} RequestShortener */
|
|
85
87
|
/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
|
|
86
88
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
|
89
|
+
/** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
|
|
90
|
+
/** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
|
|
87
91
|
/** @typedef {import("../javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
|
|
88
92
|
/** @typedef {import("../javascript/JavascriptModulesPlugin").Scope} Scope */
|
|
89
93
|
/** @typedef {import("../javascript/JavascriptModulesPlugin").Reference} Reference */
|
|
@@ -94,7 +98,7 @@ const {
|
|
|
94
98
|
/** @typedef {import("../util/Hash")} Hash */
|
|
95
99
|
/** @typedef {import("../util/Hash").HashFunction} HashFunction */
|
|
96
100
|
/** @typedef {import("../util/concatenate").UsedNames} UsedNames */
|
|
97
|
-
/** @typedef {import("../util/concatenate").
|
|
101
|
+
/** @typedef {import("../util/concatenate").UsedNamesInScopeInfo} UsedNamesInScopeInfo */
|
|
98
102
|
/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
|
|
99
103
|
/** @typedef {import("../util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
|
|
100
104
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
@@ -160,6 +164,7 @@ if (!ReferencerClass.prototype.PropertyDefinition) {
|
|
|
160
164
|
* @property {ExportMap | undefined} rawExportMap
|
|
161
165
|
* @property {string=} namespaceExportSymbol
|
|
162
166
|
* @property {string | undefined} namespaceObjectName
|
|
167
|
+
* @property {string | undefined} escapeNamespaceObjectName decoupled namespace object that keeps original export names when the exports are mangled
|
|
163
168
|
* @property {ConcatenationScope | undefined} concatenationScope
|
|
164
169
|
* @property {boolean} interopNamespaceObjectUsed "default-with-named" namespace
|
|
165
170
|
* @property {string | undefined} interopNamespaceObjectName "default-with-named" namespace
|
|
@@ -167,6 +172,8 @@ if (!ReferencerClass.prototype.PropertyDefinition) {
|
|
|
167
172
|
* @property {string | undefined} interopNamespaceObject2Name "default-only" namespace
|
|
168
173
|
* @property {boolean} interopDefaultAccessUsed runtime namespace object that detects "__esModule"
|
|
169
174
|
* @property {string | undefined} interopDefaultAccessName runtime namespace object that detects "__esModule"
|
|
175
|
+
* @property {ExportsType=} exportsTypeStrict memoized getExportsType(strict=true)
|
|
176
|
+
* @property {ExportsType=} exportsTypeNonStrict memoized getExportsType(strict=false)
|
|
170
177
|
*/
|
|
171
178
|
|
|
172
179
|
/**
|
|
@@ -177,6 +184,7 @@ if (!ReferencerClass.prototype.PropertyDefinition) {
|
|
|
177
184
|
* @property {NonDeferAccess} nonDeferAccess
|
|
178
185
|
* @property {number} index
|
|
179
186
|
* @property {string | undefined} name module.exports / harmony namespace object
|
|
187
|
+
* @property {string | undefined} escapeNamespaceObjectName decoupled namespace object that keeps original export names when the exports are mangled
|
|
180
188
|
* @property {string | undefined} deferredName deferred module.exports / harmony namespace object
|
|
181
189
|
* @property {boolean} deferred the module is deferred at least once
|
|
182
190
|
* @property {boolean} deferredNamespaceObjectUsed deferred namespace object that being used in a not-analyzable way so it must be materialized
|
|
@@ -187,6 +195,8 @@ if (!ReferencerClass.prototype.PropertyDefinition) {
|
|
|
187
195
|
* @property {string | undefined} interopNamespaceObject2Name "default-only" namespace
|
|
188
196
|
* @property {boolean} interopDefaultAccessUsed runtime namespace object that detects "__esModule"
|
|
189
197
|
* @property {string | undefined} interopDefaultAccessName runtime namespace object that detects "__esModule"
|
|
198
|
+
* @property {ExportsType=} exportsTypeStrict memoized getExportsType(strict=true)
|
|
199
|
+
* @property {ExportsType=} exportsTypeNonStrict memoized getExportsType(strict=false)
|
|
190
200
|
*/
|
|
191
201
|
|
|
192
202
|
/**
|
|
@@ -282,6 +292,27 @@ const subtractNonDeferAccess = (a, b) => a && !b;
|
|
|
282
292
|
|
|
283
293
|
/** @typedef {Map<Module, ModuleInfo>} ModuleToInfoMap */
|
|
284
294
|
|
|
295
|
+
/**
|
|
296
|
+
* getExportsType memoized on the info, which lives for one codeGeneration.
|
|
297
|
+
* The "dynamic" case walks the module graph, and is queried once per reference.
|
|
298
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
299
|
+
* @param {ModuleInfo} info module info
|
|
300
|
+
* @param {boolean | undefined} strict strict harmony module (undefined is treated as non-strict)
|
|
301
|
+
* @returns {ExportsType} the exports type
|
|
302
|
+
*/
|
|
303
|
+
const getExportsType = (moduleGraph, info, strict) => {
|
|
304
|
+
if (strict) {
|
|
305
|
+
if (info.exportsTypeStrict === undefined) {
|
|
306
|
+
info.exportsTypeStrict = info.module.getExportsType(moduleGraph, true);
|
|
307
|
+
}
|
|
308
|
+
return info.exportsTypeStrict;
|
|
309
|
+
}
|
|
310
|
+
if (info.exportsTypeNonStrict === undefined) {
|
|
311
|
+
info.exportsTypeNonStrict = info.module.getExportsType(moduleGraph, false);
|
|
312
|
+
}
|
|
313
|
+
return info.exportsTypeNonStrict;
|
|
314
|
+
};
|
|
315
|
+
|
|
285
316
|
/**
|
|
286
317
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
287
318
|
* @param {ModuleInfo} info module info
|
|
@@ -295,7 +326,7 @@ const subtractNonDeferAccess = (a, b) => a && !b;
|
|
|
295
326
|
* @param {boolean} depDeferred the dependency is deferred
|
|
296
327
|
* @param {boolean | undefined} strictHarmonyModule strictHarmonyModule
|
|
297
328
|
* @param {boolean | undefined} asiSafe asiSafe
|
|
298
|
-
* @param {Set<ExportInfo
|
|
329
|
+
* @param {Set<ExportInfo>=} alreadyVisited alreadyVisited
|
|
299
330
|
* @returns {Binding} the final variable
|
|
300
331
|
*/
|
|
301
332
|
const getFinalBinding = (
|
|
@@ -311,12 +342,9 @@ const getFinalBinding = (
|
|
|
311
342
|
depDeferred,
|
|
312
343
|
strictHarmonyModule,
|
|
313
344
|
asiSafe,
|
|
314
|
-
alreadyVisited
|
|
345
|
+
alreadyVisited
|
|
315
346
|
) => {
|
|
316
|
-
const exportsType =
|
|
317
|
-
moduleGraph,
|
|
318
|
-
strictHarmonyModule
|
|
319
|
-
);
|
|
347
|
+
const exportsType = getExportsType(moduleGraph, info, strictHarmonyModule);
|
|
320
348
|
const moduleDeferred =
|
|
321
349
|
info.type === "external" &&
|
|
322
350
|
info.deferred &&
|
|
@@ -504,6 +532,9 @@ const getFinalBinding = (
|
|
|
504
532
|
}
|
|
505
533
|
const exportsInfo = moduleGraph.getExportsInfo(info.module);
|
|
506
534
|
const exportInfo = exportsInfo.getExportInfo(exportName[0]);
|
|
535
|
+
// Lazily allocate: only the reexport-following recursion below needs it,
|
|
536
|
+
// most calls return before reaching this point.
|
|
537
|
+
if (alreadyVisited === undefined) alreadyVisited = new Set();
|
|
507
538
|
if (alreadyVisited.has(exportInfo)) {
|
|
508
539
|
return {
|
|
509
540
|
info,
|
|
@@ -528,9 +559,7 @@ const getFinalBinding = (
|
|
|
528
559
|
}
|
|
529
560
|
const directExport = info.exportMap && info.exportMap.get(exportId);
|
|
530
561
|
if (directExport) {
|
|
531
|
-
const usedName =
|
|
532
|
-
exportsInfo.getUsedName(exportName, runtime)
|
|
533
|
-
);
|
|
562
|
+
const usedName = exportsInfo.getUsedName(exportName, runtime);
|
|
534
563
|
if (!usedName) {
|
|
535
564
|
return {
|
|
536
565
|
info,
|
|
@@ -539,10 +568,26 @@ const getFinalBinding = (
|
|
|
539
568
|
exportName
|
|
540
569
|
};
|
|
541
570
|
}
|
|
571
|
+
if (usedName instanceof InlinedUsedName) {
|
|
572
|
+
return {
|
|
573
|
+
info,
|
|
574
|
+
// Render the inlined literal only (e.g. `"str"`), not its property
|
|
575
|
+
// suffix: that suffix is returned in `ids` and appended once by
|
|
576
|
+
// getFinalName. Using `usedName.render()` would emit it here too,
|
|
577
|
+
// duplicating the access (e.g. `"str".a.a`).
|
|
578
|
+
rawName: usedName.render(
|
|
579
|
+
Template.toNormalComment(
|
|
580
|
+
`inlined export ${propertyAccess(exportName)}`
|
|
581
|
+
)
|
|
582
|
+
),
|
|
583
|
+
ids: usedName.suffix,
|
|
584
|
+
exportName
|
|
585
|
+
};
|
|
586
|
+
}
|
|
542
587
|
return {
|
|
543
588
|
info,
|
|
544
589
|
name: directExport,
|
|
545
|
-
ids: usedName.slice(1),
|
|
590
|
+
ids: /** @type {ExportName} */ (usedName).slice(1),
|
|
546
591
|
exportName
|
|
547
592
|
};
|
|
548
593
|
}
|
|
@@ -559,6 +604,27 @@ const getFinalBinding = (
|
|
|
559
604
|
moduleToInfoMap.has(module)
|
|
560
605
|
);
|
|
561
606
|
if (reexport === false) {
|
|
607
|
+
// Source module was removed because all its exports were inlined;
|
|
608
|
+
// we render the inlined value here instead of binding to the now-absent module.
|
|
609
|
+
const target = exportInfo.getTarget(moduleGraph);
|
|
610
|
+
if (target && target.export) {
|
|
611
|
+
const usedName = moduleGraph
|
|
612
|
+
.getExportsInfo(target.module)
|
|
613
|
+
.getUsedName([...target.export, ...exportName.slice(1)], runtime);
|
|
614
|
+
if (usedName instanceof InlinedUsedName) {
|
|
615
|
+
return {
|
|
616
|
+
info,
|
|
617
|
+
// Literal only; suffix is appended once via `ids` (see directExport branch).
|
|
618
|
+
rawName: usedName.render(
|
|
619
|
+
Template.toNormalComment(
|
|
620
|
+
`inlined export ${propertyAccess(exportName)}`
|
|
621
|
+
)
|
|
622
|
+
),
|
|
623
|
+
ids: usedName.suffix,
|
|
624
|
+
exportName
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
}
|
|
562
628
|
throw new Error(
|
|
563
629
|
`Target module of reexport from '${info.module.readableIdentifier(
|
|
564
630
|
requestShortener
|
|
@@ -609,9 +675,7 @@ const getFinalBinding = (
|
|
|
609
675
|
}
|
|
610
676
|
|
|
611
677
|
case "external": {
|
|
612
|
-
const used =
|
|
613
|
-
exportsInfo.getUsedName(exportName, runtime)
|
|
614
|
-
);
|
|
678
|
+
const used = exportsInfo.getUsedName(exportName, runtime);
|
|
615
679
|
if (!used) {
|
|
616
680
|
return {
|
|
617
681
|
info,
|
|
@@ -620,7 +684,21 @@ const getFinalBinding = (
|
|
|
620
684
|
exportName
|
|
621
685
|
};
|
|
622
686
|
}
|
|
623
|
-
|
|
687
|
+
if (used instanceof InlinedUsedName) {
|
|
688
|
+
return {
|
|
689
|
+
info,
|
|
690
|
+
// Literal only; suffix is appended once via `ids` (see directExport branch).
|
|
691
|
+
rawName: used.render(
|
|
692
|
+
Template.toNormalComment(
|
|
693
|
+
`inlined export ${propertyAccess(exportName)}`
|
|
694
|
+
)
|
|
695
|
+
),
|
|
696
|
+
ids: used.suffix,
|
|
697
|
+
exportName
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
const usedName = /** @type {ExportName} */ (used);
|
|
701
|
+
const comment = equals(usedName, exportName)
|
|
624
702
|
? ""
|
|
625
703
|
: Template.toNormalComment(`${exportName.join(".")}`);
|
|
626
704
|
return {
|
|
@@ -629,7 +707,7 @@ const getFinalBinding = (
|
|
|
629
707
|
(deferred ? info.deferredName : info.name) +
|
|
630
708
|
(deferred ? ".a" : "") +
|
|
631
709
|
comment,
|
|
632
|
-
ids:
|
|
710
|
+
ids: usedName,
|
|
633
711
|
exportName
|
|
634
712
|
};
|
|
635
713
|
}
|
|
@@ -727,6 +805,18 @@ const getFinalName = (
|
|
|
727
805
|
|
|
728
806
|
/** @typedef {BuildInfo["topLevelDeclarations"]} TopLevelDeclarations */
|
|
729
807
|
|
|
808
|
+
/**
|
|
809
|
+
* Defines the build info properties specific to concatenated modules.
|
|
810
|
+
* @typedef {object} KnownConcatenatedModuleBuildInfo
|
|
811
|
+
* @property {FileSystemDependencies=} fileDependencies
|
|
812
|
+
* @property {FileSystemDependencies=} contextDependencies
|
|
813
|
+
* @property {FileSystemDependencies=} missingDependencies
|
|
814
|
+
* @property {boolean=} needCreateRequire collected from the inner modules
|
|
815
|
+
* @property {boolean=} inlineExports taken over from the root module
|
|
816
|
+
*/
|
|
817
|
+
|
|
818
|
+
/** @typedef {BuildInfo & KnownConcatenatedModuleBuildInfo} ConcatenatedModuleBuildInfo */
|
|
819
|
+
|
|
730
820
|
/** @type {WeakMap<Compilation, ConcatenateModuleHooks>} */
|
|
731
821
|
const compilationHooksMap = new WeakMap();
|
|
732
822
|
|
|
@@ -798,6 +888,12 @@ class ConcatenatedModule extends Module {
|
|
|
798
888
|
constructor({ identifier, rootModule, modules, runtime, compilation }) {
|
|
799
889
|
super(JAVASCRIPT_MODULE_TYPE_ESM, null, rootModule && rootModule.layer);
|
|
800
890
|
|
|
891
|
+
// Redeclared with the concatenated module specific shape
|
|
892
|
+
/** @type {ConcatenatedModuleBuildInfo | undefined} */
|
|
893
|
+
this.buildInfo = undefined;
|
|
894
|
+
/** @type {JavascriptModuleBuildMeta | undefined} */
|
|
895
|
+
this.buildMeta = undefined;
|
|
896
|
+
|
|
801
897
|
// Info from Factory
|
|
802
898
|
/** @type {string} */
|
|
803
899
|
this._identifier = identifier;
|
|
@@ -805,6 +901,7 @@ class ConcatenatedModule extends Module {
|
|
|
805
901
|
this.rootModule = rootModule;
|
|
806
902
|
/** @type {Set<Module>} */
|
|
807
903
|
this._modules = modules;
|
|
904
|
+
/** @type {RuntimeSpec} */
|
|
808
905
|
this._runtime = runtime;
|
|
809
906
|
this.factoryMeta = rootModule && rootModule.factoryMeta;
|
|
810
907
|
/** @type {Compilation} */
|
|
@@ -848,9 +945,9 @@ class ConcatenatedModule extends Module {
|
|
|
848
945
|
* @returns {string} a user readable identifier of the module
|
|
849
946
|
*/
|
|
850
947
|
readableIdentifier(requestShortener) {
|
|
851
|
-
return `${this.rootModule.readableIdentifier(
|
|
852
|
-
|
|
853
|
-
|
|
948
|
+
return `${this.rootModule.readableIdentifier(requestShortener)} + ${
|
|
949
|
+
this._modules.size - 1
|
|
950
|
+
} modules`;
|
|
854
951
|
}
|
|
855
952
|
|
|
856
953
|
/**
|
|
@@ -893,7 +990,7 @@ class ConcatenatedModule extends Module {
|
|
|
893
990
|
const { moduleArgument, exportsArgument } =
|
|
894
991
|
/** @type {BuildInfo} */
|
|
895
992
|
(rootModule.buildInfo);
|
|
896
|
-
/** @type {
|
|
993
|
+
/** @type {ConcatenatedModuleBuildInfo} */
|
|
897
994
|
this.buildInfo = {
|
|
898
995
|
strict: true,
|
|
899
996
|
cacheable: true,
|
|
@@ -903,7 +1000,10 @@ class ConcatenatedModule extends Module {
|
|
|
903
1000
|
contextDependencies: new LazySet(),
|
|
904
1001
|
missingDependencies: new LazySet(),
|
|
905
1002
|
topLevelDeclarations: new Set(),
|
|
906
|
-
assets: undefined
|
|
1003
|
+
assets: undefined,
|
|
1004
|
+
inlineExports: /** @type {JavascriptModuleBuildInfo} */ (
|
|
1005
|
+
rootModule.buildInfo
|
|
1006
|
+
).inlineExports
|
|
907
1007
|
};
|
|
908
1008
|
this.buildMeta = rootModule.buildMeta;
|
|
909
1009
|
this.clearDependenciesAndBlocks();
|
|
@@ -962,16 +1062,16 @@ class ConcatenatedModule extends Module {
|
|
|
962
1062
|
}
|
|
963
1063
|
|
|
964
1064
|
const { assets, assetsInfo, topLevelDeclarations, needCreateRequire } =
|
|
965
|
-
/** @type {
|
|
1065
|
+
/** @type {JavascriptModuleBuildInfo} */ (m.buildInfo);
|
|
966
1066
|
|
|
967
1067
|
const buildInfo = this.buildInfo;
|
|
968
1068
|
|
|
969
1069
|
// populate topLevelDeclarations
|
|
970
1070
|
if (topLevelDeclarations) {
|
|
971
|
-
const
|
|
972
|
-
if (
|
|
1071
|
+
const mergedTopLevelDeclarations = buildInfo.topLevelDeclarations;
|
|
1072
|
+
if (mergedTopLevelDeclarations !== undefined) {
|
|
973
1073
|
for (const decl of topLevelDeclarations) {
|
|
974
|
-
|
|
1074
|
+
mergedTopLevelDeclarations.add(decl);
|
|
975
1075
|
}
|
|
976
1076
|
}
|
|
977
1077
|
} else {
|
|
@@ -1351,6 +1451,11 @@ class ConcatenatedModule extends Module {
|
|
|
1351
1451
|
/** @type {NeededNamespaceObjects} */
|
|
1352
1452
|
const neededNamespaceObjects = new Set();
|
|
1353
1453
|
|
|
1454
|
+
// Set with modules whose mangled namespace escapes as a whole value and
|
|
1455
|
+
// therefore needs a decoupled namespace object keyed by the original names
|
|
1456
|
+
/** @type {Set<ConcatenatedModuleInfo | ExternalModuleInfo>} */
|
|
1457
|
+
const neededEscapeNamespaceObjects = new Set();
|
|
1458
|
+
|
|
1354
1459
|
// List of all used names to avoid conflicts
|
|
1355
1460
|
const allUsedNames = new Set(RESERVED_NAMES);
|
|
1356
1461
|
|
|
@@ -1376,14 +1481,66 @@ class ConcatenatedModule extends Module {
|
|
|
1376
1481
|
/** @type {TopLevelDeclarations} */
|
|
1377
1482
|
const topLevelDeclarations = new Set();
|
|
1378
1483
|
|
|
1484
|
+
// Free names remaining in the rendered source (runtime globals are
|
|
1485
|
+
// tracked by runtimeRequirements instead)
|
|
1486
|
+
/** @type {Set<string>} */
|
|
1487
|
+
const freeNames = new Set();
|
|
1488
|
+
|
|
1379
1489
|
// List of additional names in scope for module references
|
|
1380
|
-
/** @type {
|
|
1490
|
+
/** @type {UsedNamesInScopeInfo} */
|
|
1381
1491
|
const usedNamesInScopeInfo = new Map();
|
|
1382
1492
|
|
|
1383
1493
|
// Set of already checked scopes
|
|
1384
1494
|
/** @type {Set<Scope>} */
|
|
1385
1495
|
const ignoredScopes = new Set();
|
|
1386
1496
|
|
|
1497
|
+
/**
|
|
1498
|
+
* Lazily allocates a decoupled namespace object for a concatenated module
|
|
1499
|
+
* whose exports are mangled, so an escaping whole-namespace value still
|
|
1500
|
+
* exposes the original export names. Returns undefined when no export is
|
|
1501
|
+
* mangled (the regular namespace object can be used as-is).
|
|
1502
|
+
* @param {ConcatenatedModuleInfo | ExternalModuleInfo} info module info
|
|
1503
|
+
* @returns {string | undefined} the escape namespace object name
|
|
1504
|
+
*/
|
|
1505
|
+
const getEscapeNamespaceObjectName = (info) => {
|
|
1506
|
+
if (info.type === "concatenated" && info.namespaceExportSymbol) {
|
|
1507
|
+
return undefined;
|
|
1508
|
+
}
|
|
1509
|
+
// Deferred external modules keep their special deferred namespace object
|
|
1510
|
+
// and are rendered through a different path that wouldn't emit ours.
|
|
1511
|
+
if (info.type === "external" && info.deferred) return undefined;
|
|
1512
|
+
// Only real ES module namespaces are decoupled; non-harmony modules use
|
|
1513
|
+
// their interop/fake namespace object as before.
|
|
1514
|
+
const buildMeta = /** @type {BuildMeta} */ (info.module.buildMeta);
|
|
1515
|
+
if (!buildMeta || buildMeta.exportsType !== "namespace") return undefined;
|
|
1516
|
+
if (info.escapeNamespaceObjectName !== undefined) {
|
|
1517
|
+
return info.escapeNamespaceObjectName;
|
|
1518
|
+
}
|
|
1519
|
+
const exportsInfo = moduleGraph.getExportsInfo(info.module);
|
|
1520
|
+
let mangled = false;
|
|
1521
|
+
for (const exportInfo of exportsInfo.orderedExports) {
|
|
1522
|
+
if (exportInfo.provided === false) continue;
|
|
1523
|
+
const usedName = exportInfo.getUsedName(undefined, runtime);
|
|
1524
|
+
if (!usedName || usedName instanceof InlinedUsedName) continue;
|
|
1525
|
+
if (usedName[usedName.length - 1] !== exportInfo.name) {
|
|
1526
|
+
mangled = true;
|
|
1527
|
+
break;
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
if (!mangled) return undefined;
|
|
1531
|
+
const name = findNewName(
|
|
1532
|
+
"namespaceObject",
|
|
1533
|
+
allUsedNames,
|
|
1534
|
+
/** @type {UsedNames} */ (new Set()),
|
|
1535
|
+
info.module.readableIdentifier(requestShortener)
|
|
1536
|
+
);
|
|
1537
|
+
allUsedNames.add(name);
|
|
1538
|
+
topLevelDeclarations.add(name);
|
|
1539
|
+
info.escapeNamespaceObjectName = name;
|
|
1540
|
+
neededEscapeNamespaceObjects.add(info);
|
|
1541
|
+
return name;
|
|
1542
|
+
};
|
|
1543
|
+
|
|
1387
1544
|
// get all global names
|
|
1388
1545
|
for (const info of modulesWithInfo) {
|
|
1389
1546
|
if (info.type === "concatenated") {
|
|
@@ -1436,6 +1593,18 @@ class ConcatenatedModule extends Module {
|
|
|
1436
1593
|
if (referencedInfo.type === "reference") {
|
|
1437
1594
|
throw new Error("Module reference can't point to a reference");
|
|
1438
1595
|
}
|
|
1596
|
+
// An escaping mangled namespace resolves to its own decoupled
|
|
1597
|
+
// namespace object (a unique top-level name), so it neither needs
|
|
1598
|
+
// the regular namespace object nor super-class scope handling.
|
|
1599
|
+
if (
|
|
1600
|
+
match.mangleableNamespace &&
|
|
1601
|
+
match.ids.length === 0 &&
|
|
1602
|
+
(referencedInfo.type === "concatenated" ||
|
|
1603
|
+
referencedInfo.type === "external") &&
|
|
1604
|
+
getEscapeNamespaceObjectName(referencedInfo) !== undefined
|
|
1605
|
+
) {
|
|
1606
|
+
continue;
|
|
1607
|
+
}
|
|
1439
1608
|
const binding = getFinalBinding(
|
|
1440
1609
|
moduleGraph,
|
|
1441
1610
|
referencedInfo,
|
|
@@ -1478,6 +1647,7 @@ class ConcatenatedModule extends Module {
|
|
|
1478
1647
|
);
|
|
1479
1648
|
} else {
|
|
1480
1649
|
allUsedNames.add(name);
|
|
1650
|
+
freeNames.add(name);
|
|
1481
1651
|
}
|
|
1482
1652
|
}
|
|
1483
1653
|
}
|
|
@@ -1745,22 +1915,35 @@ class ConcatenatedModule extends Module {
|
|
|
1745
1915
|
concatenationScope.setRawExportMap(exportId, newName);
|
|
1746
1916
|
}
|
|
1747
1917
|
}
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1918
|
+
// A whole-namespace value that escapes: when the module's exports
|
|
1919
|
+
// are mangled, point it at a decoupled namespace object that keeps
|
|
1920
|
+
// the original names so untracked access keeps working.
|
|
1921
|
+
const escapeName =
|
|
1922
|
+
match.mangleableNamespace &&
|
|
1923
|
+
match.ids.length === 0 &&
|
|
1924
|
+
(referencedInfo.type === "concatenated" ||
|
|
1925
|
+
referencedInfo.type === "external")
|
|
1926
|
+
? getEscapeNamespaceObjectName(referencedInfo)
|
|
1927
|
+
: undefined;
|
|
1928
|
+
const finalName =
|
|
1929
|
+
escapeName !== undefined
|
|
1930
|
+
? escapeName
|
|
1931
|
+
: getFinalName(
|
|
1932
|
+
moduleGraph,
|
|
1933
|
+
referencedInfo,
|
|
1934
|
+
match.ids,
|
|
1935
|
+
moduleToInfoMap,
|
|
1936
|
+
runtime,
|
|
1937
|
+
requestShortener,
|
|
1938
|
+
runtimeTemplate,
|
|
1939
|
+
neededNamespaceObjects,
|
|
1940
|
+
match.call,
|
|
1941
|
+
match.deferredImport,
|
|
1942
|
+
!match.directImport,
|
|
1943
|
+
/** @type {BuildMeta} */
|
|
1944
|
+
(info.module.buildMeta).strictHarmonyModule,
|
|
1945
|
+
match.asiSafe
|
|
1946
|
+
);
|
|
1764
1947
|
|
|
1765
1948
|
for (const reference of references) {
|
|
1766
1949
|
const r = /** @type {Range} */ (reference.identifier.range);
|
|
@@ -1780,6 +1963,9 @@ class ConcatenatedModule extends Module {
|
|
|
1780
1963
|
// Set with all root exposed unused exports
|
|
1781
1964
|
/** @type {Set<string>} */
|
|
1782
1965
|
const unusedExports = new Set();
|
|
1966
|
+
// Set with all root exposed exports that were substituted with inlined literals
|
|
1967
|
+
/** @type {Set<string>} */
|
|
1968
|
+
const inlinedExports = new Set();
|
|
1783
1969
|
|
|
1784
1970
|
const rootInfo =
|
|
1785
1971
|
/** @type {ConcatenatedModuleInfo} */
|
|
@@ -1798,6 +1984,10 @@ class ConcatenatedModule extends Module {
|
|
|
1798
1984
|
unusedExports.add(name);
|
|
1799
1985
|
continue;
|
|
1800
1986
|
}
|
|
1987
|
+
if (used instanceof InlinedUsedName) {
|
|
1988
|
+
inlinedExports.add(name);
|
|
1989
|
+
continue;
|
|
1990
|
+
}
|
|
1801
1991
|
exportsMap.set(used, (requestShortener) => {
|
|
1802
1992
|
try {
|
|
1803
1993
|
const finalName = getFinalName(
|
|
@@ -1868,9 +2058,9 @@ class ConcatenatedModule extends Module {
|
|
|
1868
2058
|
|
|
1869
2059
|
const exportsSource =
|
|
1870
2060
|
"\n// EXPORTS\n" +
|
|
1871
|
-
`${RuntimeGlobals.definePropertyGetters}(${
|
|
1872
|
-
|
|
1873
|
-
)}\n});\n`;
|
|
2061
|
+
`${RuntimeGlobals.definePropertyGetters}(${
|
|
2062
|
+
this.exportsArgument
|
|
2063
|
+
}, {${definitions.join(",")}\n});\n`;
|
|
1874
2064
|
|
|
1875
2065
|
const { onDemandExportsGeneration } =
|
|
1876
2066
|
ConcatenatedModule.getCompilationHooks(this.compilation);
|
|
@@ -1894,6 +2084,87 @@ class ConcatenatedModule extends Module {
|
|
|
1894
2084
|
);
|
|
1895
2085
|
}
|
|
1896
2086
|
|
|
2087
|
+
// list inlined exports
|
|
2088
|
+
if (inlinedExports.size > 0) {
|
|
2089
|
+
result.add(
|
|
2090
|
+
`\n// INLINED EXPORTS: ${joinIterableWithComma(inlinedExports)}\n`
|
|
2091
|
+
);
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
// generate decoupled namespace objects for escaping mangled namespaces:
|
|
2095
|
+
// same getters as the regular namespace object, but keyed by the original
|
|
2096
|
+
// export names so untracked access by name keeps working. Done before the
|
|
2097
|
+
// regular namespace objects so any nested namespace they pull in is built.
|
|
2098
|
+
/** @type {Map<ConcatenatedModuleInfo | ExternalModuleInfo, string>} */
|
|
2099
|
+
const escapeNamespaceObjectSources = new Map();
|
|
2100
|
+
for (const info of neededEscapeNamespaceObjects) {
|
|
2101
|
+
/** @type {string[]} */
|
|
2102
|
+
const nsObj = [];
|
|
2103
|
+
const exportsInfo = moduleGraph.getExportsInfo(info.module);
|
|
2104
|
+
for (const exportInfo of exportsInfo.orderedExports) {
|
|
2105
|
+
if (exportInfo.provided === false) continue;
|
|
2106
|
+
const usedName = exportInfo.getUsedName(undefined, runtime);
|
|
2107
|
+
if (!usedName) continue;
|
|
2108
|
+
if (usedName instanceof InlinedUsedName) {
|
|
2109
|
+
nsObj.push(
|
|
2110
|
+
`\n ${propertyName(exportInfo.name)}: ${runtimeTemplate.returningFunction(
|
|
2111
|
+
usedName.render(
|
|
2112
|
+
Template.toNormalComment(
|
|
2113
|
+
`inlined export ${propertyAccess(exportInfo.name)}`
|
|
2114
|
+
)
|
|
2115
|
+
)
|
|
2116
|
+
)}`
|
|
2117
|
+
);
|
|
2118
|
+
} else {
|
|
2119
|
+
// External (non-concatenated) modules are accessed through their
|
|
2120
|
+
// import variable; concatenated ones resolve to an internal binding.
|
|
2121
|
+
const finalName =
|
|
2122
|
+
info.type === "external"
|
|
2123
|
+
? `${/** @type {string} */ (info.name)}${propertyAccess(usedName)}`
|
|
2124
|
+
: getFinalName(
|
|
2125
|
+
moduleGraph,
|
|
2126
|
+
info,
|
|
2127
|
+
[exportInfo.name],
|
|
2128
|
+
moduleToInfoMap,
|
|
2129
|
+
runtime,
|
|
2130
|
+
requestShortener,
|
|
2131
|
+
runtimeTemplate,
|
|
2132
|
+
neededNamespaceObjects,
|
|
2133
|
+
false,
|
|
2134
|
+
false,
|
|
2135
|
+
undefined,
|
|
2136
|
+
/** @type {BuildMeta} */
|
|
2137
|
+
(info.module.buildMeta).strictHarmonyModule,
|
|
2138
|
+
true
|
|
2139
|
+
);
|
|
2140
|
+
nsObj.push(
|
|
2141
|
+
`\n ${propertyName(exportInfo.name)}: ${runtimeTemplate.returningFunction(
|
|
2142
|
+
finalName
|
|
2143
|
+
)}`
|
|
2144
|
+
);
|
|
2145
|
+
}
|
|
2146
|
+
}
|
|
2147
|
+
const name = /** @type {string} */ (info.escapeNamespaceObjectName);
|
|
2148
|
+
const defineGetters =
|
|
2149
|
+
nsObj.length > 0
|
|
2150
|
+
? `${RuntimeGlobals.definePropertyGetters}(${name}, {${nsObj.join(
|
|
2151
|
+
","
|
|
2152
|
+
)}\n});\n`
|
|
2153
|
+
: "";
|
|
2154
|
+
if (nsObj.length > 0) {
|
|
2155
|
+
runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
|
|
2156
|
+
}
|
|
2157
|
+
escapeNamespaceObjectSources.set(
|
|
2158
|
+
info,
|
|
2159
|
+
`
|
|
2160
|
+
// NAMESPACE OBJECT (decoupled): ${info.module.readableIdentifier(requestShortener)}
|
|
2161
|
+
var ${name} = {};
|
|
2162
|
+
${RuntimeGlobals.makeNamespaceObject}(${name});
|
|
2163
|
+
${defineGetters}`
|
|
2164
|
+
);
|
|
2165
|
+
runtimeRequirements.add(RuntimeGlobals.makeNamespaceObject);
|
|
2166
|
+
}
|
|
2167
|
+
|
|
1897
2168
|
// generate namespace objects
|
|
1898
2169
|
/** @type {Map<ConcatenatedModuleInfo, string>} */
|
|
1899
2170
|
const namespaceObjectSources = new Map();
|
|
@@ -1906,27 +2177,40 @@ class ConcatenatedModule extends Module {
|
|
|
1906
2177
|
if (exportInfo.provided === false) continue;
|
|
1907
2178
|
const usedName = exportInfo.getUsedName(undefined, runtime);
|
|
1908
2179
|
if (usedName) {
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
2180
|
+
// TODO: Replace with the inlined value directly at the call site
|
|
2181
|
+
if (usedName instanceof InlinedUsedName) {
|
|
2182
|
+
nsObj.push(
|
|
2183
|
+
`\n ${propertyName(exportInfo.name)}: ${runtimeTemplate.returningFunction(
|
|
2184
|
+
usedName.render(
|
|
2185
|
+
Template.toNormalComment(
|
|
2186
|
+
`inlined export ${propertyAccess(exportInfo.name)}`
|
|
2187
|
+
)
|
|
2188
|
+
)
|
|
2189
|
+
)}`
|
|
2190
|
+
);
|
|
2191
|
+
} else {
|
|
2192
|
+
const finalName = getFinalName(
|
|
2193
|
+
moduleGraph,
|
|
2194
|
+
info,
|
|
2195
|
+
[exportInfo.name],
|
|
2196
|
+
moduleToInfoMap,
|
|
2197
|
+
runtime,
|
|
2198
|
+
requestShortener,
|
|
2199
|
+
runtimeTemplate,
|
|
2200
|
+
neededNamespaceObjects,
|
|
2201
|
+
false,
|
|
2202
|
+
false,
|
|
2203
|
+
undefined,
|
|
2204
|
+
/** @type {BuildMeta} */
|
|
2205
|
+
(info.module.buildMeta).strictHarmonyModule,
|
|
2206
|
+
true
|
|
2207
|
+
);
|
|
2208
|
+
nsObj.push(
|
|
2209
|
+
`\n ${propertyName(usedName)}: ${runtimeTemplate.returningFunction(
|
|
2210
|
+
finalName
|
|
2211
|
+
)}`
|
|
2212
|
+
);
|
|
2213
|
+
}
|
|
1930
2214
|
}
|
|
1931
2215
|
}
|
|
1932
2216
|
const name = info.namespaceObjectName;
|
|
@@ -1954,16 +2238,21 @@ ${defineGetters}`
|
|
|
1954
2238
|
for (const info of modulesWithInfo) {
|
|
1955
2239
|
if (info.type === "concatenated") {
|
|
1956
2240
|
const source = namespaceObjectSources.get(info);
|
|
1957
|
-
if (
|
|
1958
|
-
|
|
2241
|
+
if (source) result.add(source);
|
|
2242
|
+
const escapeSource = escapeNamespaceObjectSources.get(
|
|
2243
|
+
/** @type {ConcatenatedModuleInfo} */ (info)
|
|
2244
|
+
);
|
|
2245
|
+
if (escapeSource) result.add(escapeSource);
|
|
2246
|
+
if (!source && !escapeSource) continue;
|
|
1959
2247
|
}
|
|
1960
2248
|
|
|
1961
2249
|
if (info.type === "external" && info.deferred) {
|
|
1962
2250
|
const moduleId = JSON.stringify(chunkGraph.getModuleId(info.module));
|
|
1963
2251
|
const loader = getOptimizedDeferredModule(
|
|
1964
2252
|
moduleId,
|
|
1965
|
-
|
|
2253
|
+
getExportsType(
|
|
1966
2254
|
moduleGraph,
|
|
2255
|
+
info,
|
|
1967
2256
|
/** @type {BuildMeta} */
|
|
1968
2257
|
(this.rootModule.buildMeta).strictHarmonyModule
|
|
1969
2258
|
),
|
|
@@ -1973,7 +2262,9 @@ ${defineGetters}`
|
|
|
1973
2262
|
);
|
|
1974
2263
|
runtimeRequirements.add(RuntimeGlobals.require);
|
|
1975
2264
|
result.add(
|
|
1976
|
-
`\n// DEFERRED EXTERNAL MODULE: ${info.module.readableIdentifier(
|
|
2265
|
+
`\n// DEFERRED EXTERNAL MODULE: ${info.module.readableIdentifier(
|
|
2266
|
+
requestShortener
|
|
2267
|
+
)}\nvar ${info.deferredName} = ${loader};`
|
|
1977
2268
|
);
|
|
1978
2269
|
if (info.deferredNamespaceObjectUsed) {
|
|
1979
2270
|
runtimeRequirements.add(RuntimeGlobals.makeDeferredNamespaceObject);
|
|
@@ -1983,7 +2274,7 @@ ${defineGetters}`
|
|
|
1983
2274
|
}(${JSON.stringify(
|
|
1984
2275
|
chunkGraph.getModuleId(info.module)
|
|
1985
2276
|
)}, ${getMakeDeferredNamespaceModeFromExportsType(
|
|
1986
|
-
|
|
2277
|
+
getExportsType(moduleGraph, info, strictHarmonyModule)
|
|
1987
2278
|
)});`
|
|
1988
2279
|
);
|
|
1989
2280
|
}
|
|
@@ -2041,8 +2332,15 @@ ${defineGetters}`
|
|
|
2041
2332
|
const moduleId = JSON.stringify(
|
|
2042
2333
|
chunkGraph.getModuleId(info.module)
|
|
2043
2334
|
);
|
|
2335
|
+
// External module bindings may be wrapped in
|
|
2336
|
+
// runtime-condition `if` blocks but referenced outside,
|
|
2337
|
+
// so they must remain function-scoped (`var`).
|
|
2044
2338
|
result.add(`var ${info.name} = __webpack_require__(${moduleId});`);
|
|
2045
2339
|
name = info.name;
|
|
2340
|
+
// Decoupled namespace object for an escaping mangled external
|
|
2341
|
+
// module must come after its import variable is defined.
|
|
2342
|
+
const escapeSource = escapeNamespaceObjectSources.get(info);
|
|
2343
|
+
if (escapeSource) result.add(escapeSource);
|
|
2046
2344
|
}
|
|
2047
2345
|
// If a module is deferred in other places, but used as non-deferred here,
|
|
2048
2346
|
// the module itself will be emitted as mod_deferred (in the case "external"),
|
|
@@ -2052,7 +2350,9 @@ ${defineGetters}`
|
|
|
2052
2350
|
(rawInfo);
|
|
2053
2351
|
if (info.deferred && nonDeferAccess) {
|
|
2054
2352
|
result.add(
|
|
2055
|
-
`\n// non-deferred import to a deferred module (${info.module.readableIdentifier(
|
|
2353
|
+
`\n// non-deferred import to a deferred module (${info.module.readableIdentifier(
|
|
2354
|
+
requestShortener
|
|
2355
|
+
)})\nvar ${info.name} = ${info.deferredName}.a;`
|
|
2056
2356
|
);
|
|
2057
2357
|
}
|
|
2058
2358
|
break;
|
|
@@ -2090,6 +2390,7 @@ ${defineGetters}`
|
|
|
2090
2390
|
data.set("chunkInitFragments", chunkInitFragments);
|
|
2091
2391
|
}
|
|
2092
2392
|
data.set("topLevelDeclarations", topLevelDeclarations);
|
|
2393
|
+
data.set("freeNames", freeNames);
|
|
2093
2394
|
|
|
2094
2395
|
/** @type {CodeGenerationResult} */
|
|
2095
2396
|
const resultEntry = {
|
|
@@ -2135,7 +2436,8 @@ ${defineGetters}`
|
|
|
2135
2436
|
usedNames
|
|
2136
2437
|
);
|
|
2137
2438
|
|
|
2138
|
-
//
|
|
2439
|
+
// Not cached: Compilation memoizes the outer codeGeneration per
|
|
2440
|
+
// (module, runtime), so inner generation never recomputes usefully.
|
|
2139
2441
|
const codeGenResult = m.codeGeneration({
|
|
2140
2442
|
dependencyTemplates,
|
|
2141
2443
|
runtimeTemplate,
|
|
@@ -2236,6 +2538,7 @@ ${defineGetters}`
|
|
|
2236
2538
|
module: info.module,
|
|
2237
2539
|
index,
|
|
2238
2540
|
ast: undefined,
|
|
2541
|
+
chunkInitFragments: undefined,
|
|
2239
2542
|
internalSource: undefined,
|
|
2240
2543
|
runtimeRequirements: undefined,
|
|
2241
2544
|
source: undefined,
|
|
@@ -2246,13 +2549,16 @@ ${defineGetters}`
|
|
|
2246
2549
|
rawExportMap: undefined,
|
|
2247
2550
|
namespaceExportSymbol: undefined,
|
|
2248
2551
|
namespaceObjectName: undefined,
|
|
2552
|
+
escapeNamespaceObjectName: undefined,
|
|
2249
2553
|
interopNamespaceObjectUsed: false,
|
|
2250
2554
|
interopNamespaceObjectName: undefined,
|
|
2251
2555
|
interopNamespaceObject2Used: false,
|
|
2252
2556
|
interopNamespaceObject2Name: undefined,
|
|
2253
2557
|
interopDefaultAccessUsed: false,
|
|
2254
2558
|
interopDefaultAccessName: undefined,
|
|
2255
|
-
concatenationScope: undefined
|
|
2559
|
+
concatenationScope: undefined,
|
|
2560
|
+
exportsTypeStrict: undefined,
|
|
2561
|
+
exportsTypeNonStrict: undefined
|
|
2256
2562
|
};
|
|
2257
2563
|
break;
|
|
2258
2564
|
case "external":
|
|
@@ -2263,6 +2569,7 @@ ${defineGetters}`
|
|
|
2263
2569
|
nonDeferAccess: info.nonDeferAccess,
|
|
2264
2570
|
index,
|
|
2265
2571
|
name: undefined,
|
|
2572
|
+
escapeNamespaceObjectName: undefined,
|
|
2266
2573
|
deferredName: undefined,
|
|
2267
2574
|
interopNamespaceObjectUsed: false,
|
|
2268
2575
|
interopNamespaceObjectName: undefined,
|
|
@@ -2270,9 +2577,13 @@ ${defineGetters}`
|
|
|
2270
2577
|
interopNamespaceObject2Name: undefined,
|
|
2271
2578
|
interopDefaultAccessUsed: false,
|
|
2272
2579
|
interopDefaultAccessName: undefined,
|
|
2273
|
-
deferred:
|
|
2580
|
+
deferred: this.compilation.options.experiments.deferImport
|
|
2581
|
+
? moduleGraph.isDeferred(info.module)
|
|
2582
|
+
: false,
|
|
2274
2583
|
deferredNamespaceObjectName: undefined,
|
|
2275
|
-
deferredNamespaceObjectUsed: false
|
|
2584
|
+
deferredNamespaceObjectUsed: false,
|
|
2585
|
+
exportsTypeStrict: undefined,
|
|
2586
|
+
exportsTypeNonStrict: undefined
|
|
2276
2587
|
};
|
|
2277
2588
|
break;
|
|
2278
2589
|
default:
|
|
@@ -2318,7 +2629,14 @@ ${defineGetters}`
|
|
|
2318
2629
|
break;
|
|
2319
2630
|
case "external":
|
|
2320
2631
|
hash.update(
|
|
2321
|
-
`${chunkGraph.getModuleId(info.module)}|${runtimeConditionToString(
|
|
2632
|
+
`${chunkGraph.getModuleId(info.module)}|${runtimeConditionToString(
|
|
2633
|
+
info.runtimeCondition
|
|
2634
|
+
)}|${info.nonDeferAccess ? "1" : "0"}|${
|
|
2635
|
+
this.compilation.options.experiments.deferImport &&
|
|
2636
|
+
chunkGraph.moduleGraph.isDeferred(info.module)
|
|
2637
|
+
? "1"
|
|
2638
|
+
: "0"
|
|
2639
|
+
}`
|
|
2322
2640
|
);
|
|
2323
2641
|
break;
|
|
2324
2642
|
}
|