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
|
@@ -10,9 +10,14 @@ const {
|
|
|
10
10
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
11
11
|
} = require("../ModuleTypeConstants");
|
|
12
12
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
13
|
+
const {
|
|
14
|
+
harmonySpecifierTag
|
|
15
|
+
} = require("../dependencies/HarmonyImportDependencyParserPlugin");
|
|
16
|
+
const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
|
|
13
17
|
const PureExpressionDependency = require("../dependencies/PureExpressionDependency");
|
|
14
|
-
const
|
|
18
|
+
const { getInnerGraphUtils, topLevelSymbolTag } = require("./InnerGraph");
|
|
15
19
|
|
|
20
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
|
16
21
|
/** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
|
|
17
22
|
/** @typedef {import("estree").ClassExpression} ClassExpression */
|
|
18
23
|
/** @typedef {import("estree").Expression} Expression */
|
|
@@ -21,14 +26,16 @@ const InnerGraph = require("./InnerGraph");
|
|
|
21
26
|
/** @typedef {import("estree").Node} Node */
|
|
22
27
|
/** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
|
|
23
28
|
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
|
29
|
+
/** @typedef {import("../Compilation")} Compilation */
|
|
24
30
|
/** @typedef {import("../Compiler")} Compiler */
|
|
31
|
+
/** @typedef {import("../Dependency")} Dependency */
|
|
25
32
|
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
33
|
+
/** @typedef {import("../Module")} Module */
|
|
34
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
26
35
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
|
27
36
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
28
37
|
/** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
|
|
29
38
|
|
|
30
|
-
const { topLevelSymbolTag } = InnerGraph;
|
|
31
|
-
|
|
32
39
|
const PLUGIN_NAME = "InnerGraphPlugin";
|
|
33
40
|
const impureVariableDeclarationKinds = new Set(["using", "await using"]);
|
|
34
41
|
|
|
@@ -43,12 +50,24 @@ class InnerGraphPlugin {
|
|
|
43
50
|
PLUGIN_NAME,
|
|
44
51
|
(compilation, { normalModuleFactory }) => {
|
|
45
52
|
const logger = compilation.getLogger("webpack.InnerGraphPlugin");
|
|
53
|
+
const innerGraph = getInnerGraphUtils(compilation);
|
|
46
54
|
|
|
47
55
|
compilation.dependencyTemplates.set(
|
|
48
56
|
PureExpressionDependency,
|
|
49
57
|
new PureExpressionDependency.Template()
|
|
50
58
|
);
|
|
51
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Adds pure dependency added after parsing, with parents set so it survives persistent caching.
|
|
62
|
+
* @param {Module} module module
|
|
63
|
+
* @param {Dependency} dep pure dependency
|
|
64
|
+
* @returns {void}
|
|
65
|
+
*/
|
|
66
|
+
const addPureDependency = (module, dep) => {
|
|
67
|
+
compilation.moduleGraph.setParents(dep, module, module, -1);
|
|
68
|
+
module.addDependency(dep);
|
|
69
|
+
};
|
|
70
|
+
|
|
52
71
|
/**
|
|
53
72
|
* Handles the hook callback for this code path.
|
|
54
73
|
* @param {JavascriptParser} parser the parser
|
|
@@ -61,7 +80,7 @@ class InnerGraphPlugin {
|
|
|
61
80
|
* @param {Expression} sup sup
|
|
62
81
|
*/
|
|
63
82
|
const onUsageSuper = (sup) => {
|
|
64
|
-
|
|
83
|
+
innerGraph.onUsage(parser.state, (usedByExports, module) => {
|
|
65
84
|
switch (usedByExports) {
|
|
66
85
|
case undefined:
|
|
67
86
|
case true:
|
|
@@ -73,7 +92,7 @@ class InnerGraphPlugin {
|
|
|
73
92
|
);
|
|
74
93
|
dep.loc = /** @type {DependencyLocation} */ (sup.loc);
|
|
75
94
|
dep.usedByExports = usedByExports;
|
|
76
|
-
|
|
95
|
+
addPureDependency(module, dep);
|
|
77
96
|
break;
|
|
78
97
|
}
|
|
79
98
|
}
|
|
@@ -81,21 +100,14 @@ class InnerGraphPlugin {
|
|
|
81
100
|
};
|
|
82
101
|
|
|
83
102
|
parser.hooks.program.tap(PLUGIN_NAME, () => {
|
|
84
|
-
|
|
103
|
+
innerGraph.enable(parser.state);
|
|
85
104
|
|
|
86
105
|
statementWithTopLevelSymbol = new WeakMap();
|
|
87
106
|
statementPurePart = new WeakMap();
|
|
88
107
|
classWithTopLevelSymbol = new WeakMap();
|
|
89
108
|
declWithTopLevelSymbol = new WeakMap();
|
|
90
109
|
pureDeclarators = new WeakSet();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
parser.hooks.finish.tap(PLUGIN_NAME, () => {
|
|
94
|
-
if (!InnerGraph.isEnabled(parser.state)) return;
|
|
95
|
-
|
|
96
|
-
logger.time("infer dependency usage");
|
|
97
|
-
InnerGraph.inferDependencyUsage(parser.state);
|
|
98
|
-
logger.timeAggregate("infer dependency usage");
|
|
110
|
+
pureConditionByCallExpr = new WeakMap();
|
|
99
111
|
});
|
|
100
112
|
|
|
101
113
|
// During prewalking the following datastructures are filled with
|
|
@@ -120,75 +132,151 @@ class InnerGraphPlugin {
|
|
|
120
132
|
/** @type {WeakSet<VariableDeclarator>} */
|
|
121
133
|
let pureDeclarators = new WeakSet();
|
|
122
134
|
|
|
135
|
+
/** @type {WeakMap<CallExpression, (compilation: Compilation, module: Module) => boolean>} */
|
|
136
|
+
let pureConditionByCallExpr = new WeakMap();
|
|
137
|
+
|
|
138
|
+
parser.hooks.isPure.for("CallExpression").tap(
|
|
139
|
+
{
|
|
140
|
+
name: PLUGIN_NAME,
|
|
141
|
+
stage: -10
|
|
142
|
+
},
|
|
143
|
+
(expression) => {
|
|
144
|
+
const expr = /** @type {CallExpression} */ (expression);
|
|
145
|
+
const callee = expr.callee;
|
|
146
|
+
/** @type {Node} */
|
|
147
|
+
let root;
|
|
148
|
+
/** @type {string[]} */
|
|
149
|
+
let chainMembers;
|
|
150
|
+
if (callee.type === "Identifier") {
|
|
151
|
+
root = callee;
|
|
152
|
+
chainMembers = [];
|
|
153
|
+
} else if (callee.type === "MemberExpression") {
|
|
154
|
+
const chain = parser.extractMemberExpressionChain(callee);
|
|
155
|
+
// optional chaining short-circuits and breaks straight purity
|
|
156
|
+
if (chain.membersOptionals.some(Boolean)) return;
|
|
157
|
+
root = /** @type {Node} */ (chain.object);
|
|
158
|
+
// extractMemberExpressionChain returns members in reverse
|
|
159
|
+
chainMembers = [...chain.members].reverse();
|
|
160
|
+
} else {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (root.type !== "Identifier") return;
|
|
164
|
+
const harmonySettings =
|
|
165
|
+
/** @type {{ source: string, ids: string[] } | undefined} */ (
|
|
166
|
+
parser.getTagData(root.name, harmonySpecifierTag)
|
|
167
|
+
);
|
|
168
|
+
if (!harmonySettings) return;
|
|
169
|
+
const ids = [...harmonySettings.ids, ...chainMembers];
|
|
170
|
+
if (ids.length === 0) return;
|
|
171
|
+
let pos = /** @type {Range} */ (callee.range)[1];
|
|
172
|
+
for (const arg of expr.arguments) {
|
|
173
|
+
if (arg.type === "SpreadElement") return;
|
|
174
|
+
if (!parser.isPure(arg, pos)) return;
|
|
175
|
+
pos = /** @type {Range} */ (arg.range)[1];
|
|
176
|
+
}
|
|
177
|
+
const source = harmonySettings.source;
|
|
178
|
+
pureConditionByCallExpr.set(expr, (compilation, module) => {
|
|
179
|
+
const moduleGraph = compilation.moduleGraph;
|
|
180
|
+
for (const dep of module.dependencies) {
|
|
181
|
+
if (
|
|
182
|
+
dep instanceof HarmonyImportSideEffectDependency &&
|
|
183
|
+
dep.request === source
|
|
184
|
+
) {
|
|
185
|
+
const m = moduleGraph.getModule(dep);
|
|
186
|
+
if (!m) return false;
|
|
187
|
+
const exportInfo = moduleGraph
|
|
188
|
+
.getExportsInfo(m)
|
|
189
|
+
.getReadOnlyExportInfoRecursive(ids);
|
|
190
|
+
if (!exportInfo) return false;
|
|
191
|
+
const target = exportInfo.getTarget(moduleGraph);
|
|
192
|
+
const final =
|
|
193
|
+
target && target.export
|
|
194
|
+
? moduleGraph
|
|
195
|
+
.getExportsInfo(target.module)
|
|
196
|
+
.getReadOnlyExportInfoRecursive(target.export)
|
|
197
|
+
: exportInfo;
|
|
198
|
+
return final !== undefined && final.pureProvide === true;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
|
|
123
206
|
// The following hooks are used during prewalking:
|
|
124
207
|
|
|
125
208
|
parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
|
|
126
|
-
if (!
|
|
209
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
127
210
|
|
|
128
211
|
if (
|
|
129
212
|
parser.scope.topLevelScope === true &&
|
|
130
213
|
statement.type === "FunctionDeclaration"
|
|
131
214
|
) {
|
|
132
215
|
const name = statement.id ? statement.id.name : "*default*";
|
|
133
|
-
const symbol =
|
|
134
|
-
|
|
135
|
-
|
|
216
|
+
const symbol = /** @type {TopLevelSymbol} */ (
|
|
217
|
+
innerGraph.tagTopLevelSymbol(
|
|
218
|
+
parser,
|
|
219
|
+
name,
|
|
220
|
+
parser.isPure(
|
|
221
|
+
statement,
|
|
222
|
+
/** @type {Range} */ (statement.range)[0]
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
|
+
);
|
|
136
226
|
statementWithTopLevelSymbol.set(statement, symbol);
|
|
137
227
|
return true;
|
|
138
228
|
}
|
|
139
229
|
});
|
|
140
230
|
|
|
141
231
|
parser.hooks.blockPreStatement.tap(PLUGIN_NAME, (statement) => {
|
|
142
|
-
if (!
|
|
232
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
143
233
|
|
|
144
234
|
if (parser.scope.topLevelScope === true) {
|
|
145
|
-
if (
|
|
146
|
-
statement.
|
|
147
|
-
parser.isPure(
|
|
235
|
+
if (statement.type === "ClassDeclaration") {
|
|
236
|
+
const name = statement.id ? statement.id.name : "*default*";
|
|
237
|
+
const pure = parser.isPure(
|
|
148
238
|
statement,
|
|
149
239
|
/** @type {Range} */ (statement.range)[0]
|
|
150
|
-
)
|
|
151
|
-
) {
|
|
152
|
-
const name = statement.id ? statement.id.name : "*default*";
|
|
240
|
+
);
|
|
153
241
|
const symbol = /** @type {TopLevelSymbol} */ (
|
|
154
|
-
|
|
242
|
+
innerGraph.tagTopLevelSymbol(parser, name, pure)
|
|
155
243
|
);
|
|
156
244
|
classWithTopLevelSymbol.set(statement, symbol);
|
|
157
245
|
return true;
|
|
158
246
|
}
|
|
159
247
|
if (statement.type === "ExportDefaultDeclaration") {
|
|
160
248
|
const name = "*default*";
|
|
249
|
+
const decl = statement.declaration;
|
|
250
|
+
/** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
|
|
251
|
+
let pure = parser.isPure(
|
|
252
|
+
decl,
|
|
253
|
+
/** @type {Range} */ (statement.range)[0]
|
|
254
|
+
);
|
|
255
|
+
if (!pure && decl.type === "CallExpression") {
|
|
256
|
+
const deferred = pureConditionByCallExpr.get(decl);
|
|
257
|
+
if (deferred) pure = deferred;
|
|
258
|
+
}
|
|
161
259
|
const symbol =
|
|
162
260
|
/** @type {TopLevelSymbol} */
|
|
163
|
-
(
|
|
164
|
-
const decl = statement.declaration;
|
|
261
|
+
(innerGraph.tagTopLevelSymbol(parser, name, pure));
|
|
165
262
|
if (
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
parser.isPure(
|
|
169
|
-
/** @type {ClassExpression | ClassDeclaration} */
|
|
170
|
-
(decl),
|
|
171
|
-
/** @type {Range} */
|
|
172
|
-
(decl.range)[0]
|
|
173
|
-
)
|
|
263
|
+
decl.type === "ClassExpression" ||
|
|
264
|
+
decl.type === "ClassDeclaration"
|
|
174
265
|
) {
|
|
175
266
|
classWithTopLevelSymbol.set(
|
|
176
267
|
/** @type {ClassExpression | ClassDeclaration} */
|
|
177
268
|
(decl),
|
|
178
269
|
symbol
|
|
179
270
|
);
|
|
180
|
-
} else
|
|
181
|
-
parser.isPure(
|
|
182
|
-
/** @type {Expression} */
|
|
183
|
-
(decl),
|
|
184
|
-
/** @type {Range} */
|
|
185
|
-
(statement.range)[0]
|
|
186
|
-
)
|
|
187
|
-
) {
|
|
271
|
+
} else {
|
|
188
272
|
statementWithTopLevelSymbol.set(statement, symbol);
|
|
189
273
|
if (
|
|
274
|
+
pure &&
|
|
275
|
+
// body deferred to call-time, no eager read
|
|
190
276
|
!decl.type.endsWith("FunctionExpression") &&
|
|
277
|
+
// only FunctionDeclaration here (classes routed above), body deferred
|
|
191
278
|
!decl.type.endsWith("Declaration") &&
|
|
279
|
+
// literal references nothing
|
|
192
280
|
decl.type !== "Literal"
|
|
193
281
|
) {
|
|
194
282
|
statementPurePart.set(
|
|
@@ -203,7 +291,7 @@ class InnerGraphPlugin {
|
|
|
203
291
|
});
|
|
204
292
|
|
|
205
293
|
parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
|
|
206
|
-
if (!
|
|
294
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
207
295
|
if (impureVariableDeclarationKinds.has(statement.kind)) return;
|
|
208
296
|
if (
|
|
209
297
|
parser.scope.topLevelScope === true &&
|
|
@@ -218,28 +306,28 @@ class InnerGraphPlugin {
|
|
|
218
306
|
) {
|
|
219
307
|
return;
|
|
220
308
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
309
|
+
/** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
|
|
310
|
+
let pure = parser.isPure(
|
|
311
|
+
decl.init,
|
|
312
|
+
/** @type {Range} */ (decl.id.range)[1]
|
|
313
|
+
);
|
|
314
|
+
if (!pure && decl.init.type === "CallExpression") {
|
|
315
|
+
const deferred = pureConditionByCallExpr.get(decl.init);
|
|
316
|
+
if (deferred) pure = deferred;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (decl.init.type === "ClassExpression") {
|
|
228
320
|
const symbol =
|
|
229
321
|
/** @type {TopLevelSymbol} */
|
|
230
|
-
(
|
|
322
|
+
(innerGraph.tagTopLevelSymbol(parser, name, pure));
|
|
231
323
|
classWithTopLevelSymbol.set(decl.init, symbol);
|
|
232
|
-
} else
|
|
233
|
-
parser.isPure(
|
|
234
|
-
decl.init,
|
|
235
|
-
/** @type {Range} */ (decl.id.range)[1]
|
|
236
|
-
)
|
|
237
|
-
) {
|
|
324
|
+
} else {
|
|
238
325
|
const symbol =
|
|
239
326
|
/** @type {TopLevelSymbol} */
|
|
240
|
-
(
|
|
327
|
+
(innerGraph.tagTopLevelSymbol(parser, name, pure));
|
|
241
328
|
declWithTopLevelSymbol.set(decl, symbol);
|
|
242
329
|
if (
|
|
330
|
+
pure &&
|
|
243
331
|
!decl.init.type.endsWith("FunctionExpression") &&
|
|
244
332
|
decl.init.type !== "Literal"
|
|
245
333
|
) {
|
|
@@ -266,16 +354,16 @@ class InnerGraphPlugin {
|
|
|
266
354
|
// The following hooks are called during walking:
|
|
267
355
|
|
|
268
356
|
parser.hooks.statement.tap(PLUGIN_NAME, (statement) => {
|
|
269
|
-
if (!
|
|
357
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
270
358
|
if (parser.scope.topLevelScope === true) {
|
|
271
|
-
|
|
359
|
+
innerGraph.setTopLevelSymbol(parser.state, undefined);
|
|
272
360
|
|
|
273
361
|
const symbol = statementWithTopLevelSymbol.get(statement);
|
|
274
362
|
if (symbol) {
|
|
275
|
-
|
|
363
|
+
innerGraph.setTopLevelSymbol(parser.state, symbol);
|
|
276
364
|
const purePart = statementPurePart.get(statement);
|
|
277
365
|
if (purePart) {
|
|
278
|
-
|
|
366
|
+
innerGraph.onUsage(parser.state, (usedByExports, module) => {
|
|
279
367
|
switch (usedByExports) {
|
|
280
368
|
case undefined:
|
|
281
369
|
case true:
|
|
@@ -288,7 +376,7 @@ class InnerGraphPlugin {
|
|
|
288
376
|
/** @type {DependencyLocation} */
|
|
289
377
|
(statement.loc);
|
|
290
378
|
dep.usedByExports = usedByExports;
|
|
291
|
-
|
|
379
|
+
addPureDependency(module, dep);
|
|
292
380
|
break;
|
|
293
381
|
}
|
|
294
382
|
}
|
|
@@ -301,7 +389,7 @@ class InnerGraphPlugin {
|
|
|
301
389
|
parser.hooks.classExtendsExpression.tap(
|
|
302
390
|
PLUGIN_NAME,
|
|
303
391
|
(expr, statement) => {
|
|
304
|
-
if (!
|
|
392
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
305
393
|
if (parser.scope.topLevelScope === true) {
|
|
306
394
|
const symbol = classWithTopLevelSymbol.get(statement);
|
|
307
395
|
if (
|
|
@@ -313,7 +401,7 @@ class InnerGraphPlugin {
|
|
|
313
401
|
: /** @type {Range} */ (statement.range)[0]
|
|
314
402
|
)
|
|
315
403
|
) {
|
|
316
|
-
|
|
404
|
+
innerGraph.setTopLevelSymbol(parser.state, symbol);
|
|
317
405
|
onUsageSuper(expr);
|
|
318
406
|
}
|
|
319
407
|
}
|
|
@@ -323,11 +411,11 @@ class InnerGraphPlugin {
|
|
|
323
411
|
parser.hooks.classBodyElement.tap(
|
|
324
412
|
PLUGIN_NAME,
|
|
325
413
|
(element, classDefinition) => {
|
|
326
|
-
if (!
|
|
414
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
327
415
|
if (parser.scope.topLevelScope === true) {
|
|
328
416
|
const symbol = classWithTopLevelSymbol.get(classDefinition);
|
|
329
417
|
if (symbol) {
|
|
330
|
-
|
|
418
|
+
innerGraph.setTopLevelSymbol(parser.state, undefined);
|
|
331
419
|
}
|
|
332
420
|
}
|
|
333
421
|
}
|
|
@@ -336,7 +424,7 @@ class InnerGraphPlugin {
|
|
|
336
424
|
parser.hooks.classBodyValue.tap(
|
|
337
425
|
PLUGIN_NAME,
|
|
338
426
|
(expression, element, classDefinition) => {
|
|
339
|
-
if (!
|
|
427
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
340
428
|
if (parser.scope.topLevelScope === true) {
|
|
341
429
|
const symbol = classWithTopLevelSymbol.get(classDefinition);
|
|
342
430
|
if (symbol) {
|
|
@@ -349,29 +437,32 @@ class InnerGraphPlugin {
|
|
|
349
437
|
: /** @type {Range} */ (element.range)[0]
|
|
350
438
|
)
|
|
351
439
|
) {
|
|
352
|
-
|
|
440
|
+
innerGraph.setTopLevelSymbol(parser.state, symbol);
|
|
353
441
|
if (element.type !== "MethodDefinition" && element.static) {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
442
|
+
innerGraph.onUsage(
|
|
443
|
+
parser.state,
|
|
444
|
+
(usedByExports, module) => {
|
|
445
|
+
switch (usedByExports) {
|
|
446
|
+
case undefined:
|
|
447
|
+
case true:
|
|
448
|
+
return;
|
|
449
|
+
default: {
|
|
450
|
+
const dep = new PureExpressionDependency(
|
|
451
|
+
/** @type {Range} */ (expression.range)
|
|
452
|
+
);
|
|
453
|
+
dep.loc =
|
|
454
|
+
/** @type {DependencyLocation} */
|
|
455
|
+
(expression.loc);
|
|
456
|
+
dep.usedByExports = usedByExports;
|
|
457
|
+
addPureDependency(module, dep);
|
|
458
|
+
break;
|
|
459
|
+
}
|
|
369
460
|
}
|
|
370
461
|
}
|
|
371
|
-
|
|
462
|
+
);
|
|
372
463
|
}
|
|
373
464
|
} else {
|
|
374
|
-
|
|
465
|
+
innerGraph.setTopLevelSymbol(parser.state, undefined);
|
|
375
466
|
}
|
|
376
467
|
}
|
|
377
468
|
}
|
|
@@ -379,11 +470,11 @@ class InnerGraphPlugin {
|
|
|
379
470
|
);
|
|
380
471
|
|
|
381
472
|
parser.hooks.declarator.tap(PLUGIN_NAME, (decl, _statement) => {
|
|
382
|
-
if (!
|
|
473
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
383
474
|
const symbol = declWithTopLevelSymbol.get(decl);
|
|
384
475
|
|
|
385
476
|
if (symbol) {
|
|
386
|
-
|
|
477
|
+
innerGraph.setTopLevelSymbol(parser.state, symbol);
|
|
387
478
|
if (pureDeclarators.has(decl)) {
|
|
388
479
|
if (
|
|
389
480
|
/** @type {ClassExpression} */
|
|
@@ -393,7 +484,7 @@ class InnerGraphPlugin {
|
|
|
393
484
|
onUsageSuper(decl.init.superClass);
|
|
394
485
|
}
|
|
395
486
|
} else {
|
|
396
|
-
|
|
487
|
+
innerGraph.onUsage(parser.state, (usedByExports, module) => {
|
|
397
488
|
switch (usedByExports) {
|
|
398
489
|
case undefined:
|
|
399
490
|
case true:
|
|
@@ -407,7 +498,7 @@ class InnerGraphPlugin {
|
|
|
407
498
|
);
|
|
408
499
|
dep.loc = /** @type {DependencyLocation} */ (decl.loc);
|
|
409
500
|
dep.usedByExports = usedByExports;
|
|
410
|
-
|
|
501
|
+
addPureDependency(module, dep);
|
|
411
502
|
break;
|
|
412
503
|
}
|
|
413
504
|
}
|
|
@@ -419,7 +510,7 @@ class InnerGraphPlugin {
|
|
|
419
510
|
decl.init
|
|
420
511
|
)
|
|
421
512
|
);
|
|
422
|
-
|
|
513
|
+
innerGraph.setTopLevelSymbol(parser.state, undefined);
|
|
423
514
|
return true;
|
|
424
515
|
} else if (
|
|
425
516
|
decl.id.type === "Identifier" &&
|
|
@@ -428,7 +519,7 @@ class InnerGraphPlugin {
|
|
|
428
519
|
classWithTopLevelSymbol.has(decl.init)
|
|
429
520
|
) {
|
|
430
521
|
parser.walkExpression(decl.init);
|
|
431
|
-
|
|
522
|
+
innerGraph.setTopLevelSymbol(parser.state, undefined);
|
|
432
523
|
return true;
|
|
433
524
|
}
|
|
434
525
|
});
|
|
@@ -439,10 +530,10 @@ class InnerGraphPlugin {
|
|
|
439
530
|
const topLevelSymbol = /** @type {TopLevelSymbol} */ (
|
|
440
531
|
parser.currentTagData
|
|
441
532
|
);
|
|
442
|
-
const currentTopLevelSymbol =
|
|
533
|
+
const currentTopLevelSymbol = innerGraph.getTopLevelSymbol(
|
|
443
534
|
parser.state
|
|
444
535
|
);
|
|
445
|
-
|
|
536
|
+
innerGraph.addUsage(
|
|
446
537
|
parser.state,
|
|
447
538
|
topLevelSymbol,
|
|
448
539
|
currentTopLevelSymbol || true
|
|
@@ -451,7 +542,7 @@ class InnerGraphPlugin {
|
|
|
451
542
|
parser.hooks.assign
|
|
452
543
|
.for(topLevelSymbolTag)
|
|
453
544
|
.tap(PLUGIN_NAME, (expr) => {
|
|
454
|
-
if (!
|
|
545
|
+
if (!innerGraph.isEnabled(parser.state)) return;
|
|
455
546
|
if (expr.operator === "=") return true;
|
|
456
547
|
});
|
|
457
548
|
};
|
|
@@ -462,8 +553,14 @@ class InnerGraphPlugin {
|
|
|
462
553
|
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
|
463
554
|
.tap(PLUGIN_NAME, handler);
|
|
464
555
|
|
|
465
|
-
compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {
|
|
466
|
-
logger.
|
|
556
|
+
compilation.hooks.finishModules.tap(PLUGIN_NAME, (modules) => {
|
|
557
|
+
logger.time("infer dependency usage");
|
|
558
|
+
for (const module of modules) {
|
|
559
|
+
innerGraph.inferDependencyUsage(module);
|
|
560
|
+
// state is dead after inference; release it to not retain ASTs via callbacks
|
|
561
|
+
innerGraph.release(module);
|
|
562
|
+
}
|
|
563
|
+
logger.timeEnd("infer dependency usage");
|
|
467
564
|
});
|
|
468
565
|
}
|
|
469
566
|
);
|