@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +49 -12
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
9
|
-
const formatLocation = require("../formatLocation");
|
|
10
9
|
const { evaluateToString } = require("../javascript/JavascriptParserHelpers");
|
|
10
|
+
const formatLocation = require("../util/formatLocation");
|
|
11
11
|
const { propertyAccess } = require("../util/property");
|
|
12
12
|
const CommonJsExportRequireDependency = require("./CommonJsExportRequireDependency");
|
|
13
13
|
const CommonJsExportsDependency = require("./CommonJsExportsDependency");
|
|
@@ -19,7 +19,9 @@ const ModuleDecoratorDependency = require("./ModuleDecoratorDependency");
|
|
|
19
19
|
/** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
|
|
20
20
|
/** @typedef {import("estree").CallExpression} CallExpression */
|
|
21
21
|
/** @typedef {import("estree").Expression} Expression */
|
|
22
|
+
/** @typedef {import("estree").Node} Node */
|
|
22
23
|
/** @typedef {import("estree").Super} Super */
|
|
24
|
+
/** @typedef {import("estree").ThisExpression} ThisExpression */
|
|
23
25
|
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
24
26
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
25
27
|
/** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
|
|
@@ -29,7 +31,7 @@ const ModuleDecoratorDependency = require("./ModuleDecoratorDependency");
|
|
|
29
31
|
/** @typedef {import("../javascript/JavascriptParser").Members} Members */
|
|
30
32
|
/** @typedef {import("../javascript/JavascriptParser").StatementPath} StatementPath */
|
|
31
33
|
/** @typedef {import("./CommonJsDependencyHelpers").CommonJSDependencyBaseKeywords} CommonJSDependencyBaseKeywords */
|
|
32
|
-
/** @typedef {import("../
|
|
34
|
+
/** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
|
|
33
35
|
|
|
34
36
|
/**
|
|
35
37
|
* This function takes a generic expression and detects whether it is an ObjectExpression.
|
|
@@ -59,6 +61,55 @@ const getValueOfPropertyDescription = (expr) => {
|
|
|
59
61
|
}
|
|
60
62
|
};
|
|
61
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Extracts the re-exportable expression from a property descriptor, handling
|
|
66
|
+
* both the eager `{ value: <expr> }` form and the lazy
|
|
67
|
+
* `{ get: () => <expr> }` / `{ get() { return <expr>; } }` accessor form used
|
|
68
|
+
* by barrel files (e.g. webpack's own `lib/index.js`). A `set` accessor cannot
|
|
69
|
+
* be reproduced by the rewritten descriptor, so descriptors with a setter are
|
|
70
|
+
* left to the generic handler (which keeps the descriptor verbatim).
|
|
71
|
+
* @param {Expression} expr property descriptor expression
|
|
72
|
+
* @returns {{ expr: Expression, getter: boolean } | undefined} the value expression and whether it is a lazy getter
|
|
73
|
+
*/
|
|
74
|
+
const getReexportOfPropertyDescriptor = (expr) => {
|
|
75
|
+
if (expr.type !== "ObjectExpression") return;
|
|
76
|
+
/** @type {Expression | undefined} */
|
|
77
|
+
let valueExpr;
|
|
78
|
+
/** @type {Expression | undefined} */
|
|
79
|
+
let getFn;
|
|
80
|
+
for (const property of expr.properties) {
|
|
81
|
+
if (property.type === "SpreadElement" || property.computed) continue;
|
|
82
|
+
const key = property.key;
|
|
83
|
+
if (key.type !== "Identifier") continue;
|
|
84
|
+
// A setter would be silently dropped by the rewrite — bail out.
|
|
85
|
+
if (key.name === "set") return;
|
|
86
|
+
if (key.name === "value") {
|
|
87
|
+
valueExpr = /** @type {Expression} */ (property.value);
|
|
88
|
+
} else if (key.name === "get") {
|
|
89
|
+
getFn = /** @type {Expression} */ (property.value);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (valueExpr) return { expr: valueExpr, getter: false };
|
|
93
|
+
if (
|
|
94
|
+
getFn &&
|
|
95
|
+
(getFn.type === "FunctionExpression" ||
|
|
96
|
+
getFn.type === "ArrowFunctionExpression")
|
|
97
|
+
) {
|
|
98
|
+
// Arrow with expression body: `() => require("./x")`.
|
|
99
|
+
if (getFn.body.type !== "BlockStatement") {
|
|
100
|
+
return { expr: /** @type {Expression} */ (getFn.body), getter: true };
|
|
101
|
+
}
|
|
102
|
+
// Function body must be exactly `return <expr>;`.
|
|
103
|
+
if (
|
|
104
|
+
getFn.body.body.length === 1 &&
|
|
105
|
+
getFn.body.body[0].type === "ReturnStatement" &&
|
|
106
|
+
getFn.body.body[0].argument
|
|
107
|
+
) {
|
|
108
|
+
return { expr: getFn.body.body[0].argument, getter: true };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
62
113
|
/**
|
|
63
114
|
* The purpose of this function is to check whether an expression is a truthy literal or not. This is
|
|
64
115
|
* useful when parsing CommonJS exports, because CommonJS modules can export any value, including falsy
|
|
@@ -94,6 +145,7 @@ const isFalsyLiteral = (expr) => {
|
|
|
94
145
|
};
|
|
95
146
|
|
|
96
147
|
/**
|
|
148
|
+
* Parses require call.
|
|
97
149
|
* @param {JavascriptParser} parser the parser
|
|
98
150
|
* @param {Expression} expr expression
|
|
99
151
|
* @returns {{ argument: BasicEvaluatedExpression, ids: ExportInfoName[] } | undefined} parsed call
|
|
@@ -128,17 +180,119 @@ const parseRequireCall = (parser, expr) => {
|
|
|
128
180
|
return { argument: argValue, ids: ids.reverse() };
|
|
129
181
|
};
|
|
130
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Checks if a value is an AST node.
|
|
185
|
+
* @param {unknown} value candidate
|
|
186
|
+
* @returns {value is Node} true when the value is an AST node
|
|
187
|
+
*/
|
|
188
|
+
const isNode = (value) =>
|
|
189
|
+
typeof value === "object" &&
|
|
190
|
+
value !== null &&
|
|
191
|
+
typeof (/** @type {{ type?: unknown }} */ (value).type) === "string";
|
|
192
|
+
|
|
193
|
+
/** Positional/metadata keys that never hold child AST nodes. */
|
|
194
|
+
const NON_CHILD_KEYS = new Set([
|
|
195
|
+
"type",
|
|
196
|
+
"start",
|
|
197
|
+
"end",
|
|
198
|
+
"loc",
|
|
199
|
+
"range",
|
|
200
|
+
"leadingComments",
|
|
201
|
+
"trailingComments"
|
|
202
|
+
]);
|
|
203
|
+
|
|
204
|
+
/** @type {Map<string, string[]>} per node type: own keys that may hold child nodes */
|
|
205
|
+
const childKeysByType = new Map();
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Returns the keys of a node that may hold child nodes, excluding positional
|
|
209
|
+
* metadata. Computed once per node type and cached: acorn initializes every
|
|
210
|
+
* field of a given type (to `null` when absent), so the key set is stable, and
|
|
211
|
+
* the cache stays allocation-free on the hot path after the first node of each
|
|
212
|
+
* type is seen.
|
|
213
|
+
* @param {Node} node node
|
|
214
|
+
* @returns {string[]} candidate child keys
|
|
215
|
+
*/
|
|
216
|
+
const getChildKeys = (node) => {
|
|
217
|
+
let keys = childKeysByType.get(node.type);
|
|
218
|
+
if (keys === undefined) {
|
|
219
|
+
keys = Object.keys(node).filter((key) => !NON_CHILD_KEYS.has(key));
|
|
220
|
+
childKeysByType.set(node.type, keys);
|
|
221
|
+
}
|
|
222
|
+
return keys;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Searches for a `this` belonging to the scanned function's own `this`-scope.
|
|
227
|
+
* Descends into arrow functions, but not into nested functions, static blocks
|
|
228
|
+
* and class field values, which have their own `this`. Class method bodies are
|
|
229
|
+
* function expressions and are skipped by the same rule, while computed keys
|
|
230
|
+
* and `extends` clauses evaluate in the outer scope and are searched. The
|
|
231
|
+
* `this`-scope boundary is enforced when a node is popped, so the generic
|
|
232
|
+
* branch may enumerate any child without crossing it.
|
|
233
|
+
* @param {Node[]} initialNodes nodes to search
|
|
234
|
+
* @returns {ThisExpression | undefined} first own `this` expression
|
|
235
|
+
*/
|
|
236
|
+
const findOwnThisExpression = (initialNodes) => {
|
|
237
|
+
const stack = [...initialNodes];
|
|
238
|
+
let node;
|
|
239
|
+
while ((node = stack.pop()) !== undefined) {
|
|
240
|
+
switch (node.type) {
|
|
241
|
+
case "ThisExpression":
|
|
242
|
+
return node;
|
|
243
|
+
case "FunctionExpression":
|
|
244
|
+
case "FunctionDeclaration":
|
|
245
|
+
case "StaticBlock":
|
|
246
|
+
break;
|
|
247
|
+
case "PropertyDefinition":
|
|
248
|
+
if (node.computed) stack.push(node.key);
|
|
249
|
+
break;
|
|
250
|
+
default: {
|
|
251
|
+
const children =
|
|
252
|
+
/** @type {Record<string, unknown>} */
|
|
253
|
+
(/** @type {unknown} */ (node));
|
|
254
|
+
const keys = getChildKeys(node);
|
|
255
|
+
for (let i = 0; i < keys.length; i++) {
|
|
256
|
+
const value = children[keys[i]];
|
|
257
|
+
if (Array.isArray(value)) {
|
|
258
|
+
for (const item of value) {
|
|
259
|
+
if (isNode(item)) stack.push(item);
|
|
260
|
+
}
|
|
261
|
+
} else if (isNode(value)) {
|
|
262
|
+
stack.push(value);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Returns the own `this` of a function-expression export value. When such a
|
|
272
|
+
* function is called as a method of the exports object, `this` is the exports
|
|
273
|
+
* object and may reach any sibling export (#21178).
|
|
274
|
+
* @param {Node} expr the exported value
|
|
275
|
+
* @returns {ThisExpression | undefined} first own `this` expression
|
|
276
|
+
*/
|
|
277
|
+
const getThisAccessInExportedValue = (expr) =>
|
|
278
|
+
expr.type === "FunctionExpression"
|
|
279
|
+
? findOwnThisExpression([...expr.params, expr.body])
|
|
280
|
+
: undefined;
|
|
281
|
+
|
|
131
282
|
const PLUGIN_NAME = "CommonJsExportsParserPlugin";
|
|
132
283
|
|
|
133
284
|
class CommonJsExportsParserPlugin {
|
|
134
285
|
/**
|
|
286
|
+
* Creates an instance of CommonJsExportsParserPlugin.
|
|
135
287
|
* @param {ModuleGraph} moduleGraph module graph
|
|
136
288
|
*/
|
|
137
289
|
constructor(moduleGraph) {
|
|
290
|
+
/** @type {ModuleGraph} */
|
|
138
291
|
this.moduleGraph = moduleGraph;
|
|
139
292
|
}
|
|
140
293
|
|
|
141
294
|
/**
|
|
295
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
142
296
|
* @param {JavascriptParser} parser the parser
|
|
143
297
|
* @returns {void}
|
|
144
298
|
*/
|
|
@@ -148,6 +302,7 @@ class CommonJsExportsParserPlugin {
|
|
|
148
302
|
};
|
|
149
303
|
|
|
150
304
|
/**
|
|
305
|
+
* Checks namespace.
|
|
151
306
|
* @param {boolean} topLevel true, when the export is on top level
|
|
152
307
|
* @param {Members} members members of the export
|
|
153
308
|
* @param {Expression | undefined} valueExpr expression for the value
|
|
@@ -164,6 +319,7 @@ class CommonJsExportsParserPlugin {
|
|
|
164
319
|
}
|
|
165
320
|
};
|
|
166
321
|
/**
|
|
322
|
+
* Processes the provided reason.
|
|
167
323
|
* @param {string=} reason reason
|
|
168
324
|
*/
|
|
169
325
|
const bailout = (reason) => {
|
|
@@ -171,6 +327,7 @@ class CommonJsExportsParserPlugin {
|
|
|
171
327
|
if (reason) bailoutHint(reason);
|
|
172
328
|
};
|
|
173
329
|
/**
|
|
330
|
+
* Processes the provided reason.
|
|
174
331
|
* @param {string} reason reason
|
|
175
332
|
*/
|
|
176
333
|
const bailoutHint = (reason) => {
|
|
@@ -178,6 +335,36 @@ class CommonJsExportsParserPlugin {
|
|
|
178
335
|
.getOptimizationBailout(parser.state.module)
|
|
179
336
|
.push(`CommonJS bailout: ${reason}`);
|
|
180
337
|
};
|
|
338
|
+
/** @type {unknown} */
|
|
339
|
+
let keptAllExportsForState;
|
|
340
|
+
/**
|
|
341
|
+
* An exported function accessing its own `this` may reach any export
|
|
342
|
+
* through it when called as a method of the exports object, so the
|
|
343
|
+
* whole exports object must be kept (#21178).
|
|
344
|
+
* @param {Node} valueExpr the exported value
|
|
345
|
+
* @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
|
|
346
|
+
* @returns {void}
|
|
347
|
+
*/
|
|
348
|
+
const keepAllExportsOnThisAccess = (valueExpr, base) => {
|
|
349
|
+
// One bailout per module is enough
|
|
350
|
+
if (keptAllExportsForState === parser.state) return;
|
|
351
|
+
const thisExpr = getThisAccessInExportedValue(valueExpr);
|
|
352
|
+
if (thisExpr === undefined) return;
|
|
353
|
+
keptAllExportsForState = parser.state;
|
|
354
|
+
bailoutHint(
|
|
355
|
+
`this in exported function may access any export, so all exports are kept, at ${formatLocation(
|
|
356
|
+
parser.getLocation(thisExpr)
|
|
357
|
+
)}`
|
|
358
|
+
);
|
|
359
|
+
const dep = new CommonJsSelfReferenceDependency(
|
|
360
|
+
/** @type {Range} */ (thisExpr.range),
|
|
361
|
+
base,
|
|
362
|
+
[],
|
|
363
|
+
false
|
|
364
|
+
);
|
|
365
|
+
dep.loc = parser.getLocation(thisExpr);
|
|
366
|
+
parser.state.module.addDependency(dep);
|
|
367
|
+
};
|
|
181
368
|
|
|
182
369
|
// metadata //
|
|
183
370
|
parser.hooks.evaluateTypeof
|
|
@@ -190,6 +377,7 @@ class CommonJsExportsParserPlugin {
|
|
|
190
377
|
// exporting //
|
|
191
378
|
|
|
192
379
|
/**
|
|
380
|
+
* Handle assign export.
|
|
193
381
|
* @param {AssignmentExpression} expr expression
|
|
194
382
|
* @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
|
|
195
383
|
* @param {Members} members members of the export
|
|
@@ -216,10 +404,10 @@ class CommonJsExportsParserPlugin {
|
|
|
216
404
|
requireCall.ids,
|
|
217
405
|
!parser.isStatementLevelExpression(expr)
|
|
218
406
|
);
|
|
219
|
-
dep.loc =
|
|
407
|
+
dep.loc = parser.getLocation(expr);
|
|
220
408
|
dep.optional = Boolean(parser.scope.inTry);
|
|
221
409
|
parser.state.module.addDependency(dep);
|
|
222
|
-
/** @type {
|
|
410
|
+
/** @type {JavascriptModuleBuildMeta} */ (
|
|
223
411
|
parser.state.module.buildMeta
|
|
224
412
|
).treatAsCommonJs = true;
|
|
225
413
|
|
|
@@ -241,10 +429,12 @@ class CommonJsExportsParserPlugin {
|
|
|
241
429
|
base,
|
|
242
430
|
remainingMembers
|
|
243
431
|
);
|
|
244
|
-
dep.loc =
|
|
432
|
+
dep.loc = parser.getLocation(expr);
|
|
245
433
|
parser.state.module.addDependency(dep);
|
|
246
|
-
/** @type {
|
|
247
|
-
|
|
434
|
+
/** @type {JavascriptModuleBuildMeta} */ (
|
|
435
|
+
parser.state.module.buildMeta
|
|
436
|
+
).treatAsCommonJs = true;
|
|
437
|
+
keepAllExportsOnThisAccess(expr.right, base);
|
|
248
438
|
parser.walkExpression(expr.right);
|
|
249
439
|
return true;
|
|
250
440
|
};
|
|
@@ -288,6 +478,33 @@ class CommonJsExportsParserPlugin {
|
|
|
288
478
|
if (typeof property !== "string") return;
|
|
289
479
|
enableStructuredExports();
|
|
290
480
|
const descArg = expr.arguments[2];
|
|
481
|
+
// Handle reexporting: `Object.defineProperty(exports, "x", { value: require("./y")[.z] })`
|
|
482
|
+
// and the lazy getter form `{ get: () => require("./y")[.z] }`.
|
|
483
|
+
if (property !== "__esModule") {
|
|
484
|
+
const reexport = getReexportOfPropertyDescriptor(descArg);
|
|
485
|
+
const requireCall =
|
|
486
|
+
reexport && parseRequireCall(parser, reexport.expr);
|
|
487
|
+
if (reexport && requireCall && requireCall.argument.isString()) {
|
|
488
|
+
const dep = new CommonJsExportRequireDependency(
|
|
489
|
+
/** @type {Range} */ (expr.range),
|
|
490
|
+
/** @type {Range} */ (reexport.expr.range),
|
|
491
|
+
`Object.defineProperty(${exportsArg.identifier})`,
|
|
492
|
+
[property],
|
|
493
|
+
/** @type {string} */ (requireCall.argument.string),
|
|
494
|
+
requireCall.ids,
|
|
495
|
+
false
|
|
496
|
+
);
|
|
497
|
+
dep.getter = reexport.getter;
|
|
498
|
+
dep.loc = parser.getLocation(expr);
|
|
499
|
+
dep.optional = Boolean(parser.scope.inTry);
|
|
500
|
+
parser.state.module.addDependency(dep);
|
|
501
|
+
/** @type {JavascriptModuleBuildMeta} */ (
|
|
502
|
+
parser.state.module.buildMeta
|
|
503
|
+
).treatAsCommonJs = true;
|
|
504
|
+
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
291
508
|
checkNamespace(
|
|
292
509
|
/** @type {StatementPath} */
|
|
293
510
|
(parser.statementPath).length === 1,
|
|
@@ -300,12 +517,24 @@ class CommonJsExportsParserPlugin {
|
|
|
300
517
|
`Object.defineProperty(${exportsArg.identifier})`,
|
|
301
518
|
[property]
|
|
302
519
|
);
|
|
303
|
-
dep.loc =
|
|
520
|
+
dep.loc = parser.getLocation(expr);
|
|
304
521
|
parser.state.module.addDependency(dep);
|
|
305
|
-
/** @type {
|
|
522
|
+
/** @type {JavascriptModuleBuildMeta} */ (
|
|
306
523
|
parser.state.module.buildMeta
|
|
307
524
|
).treatAsCommonJs = true;
|
|
308
525
|
|
|
526
|
+
if (descArg.type === "ObjectExpression") {
|
|
527
|
+
// `value`, `get` and `set` descriptor functions are all called
|
|
528
|
+
// with the exports object as `this`
|
|
529
|
+
for (const descProperty of descArg.properties) {
|
|
530
|
+
if (descProperty.type === "SpreadElement") continue;
|
|
531
|
+
keepAllExportsOnThisAccess(
|
|
532
|
+
descProperty.value,
|
|
533
|
+
/** @type {CommonJSDependencyBaseKeywords} */
|
|
534
|
+
(exportsArg.identifier)
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
309
538
|
parser.walkExpression(expr.arguments[2]);
|
|
310
539
|
return true;
|
|
311
540
|
});
|
|
@@ -313,6 +542,7 @@ class CommonJsExportsParserPlugin {
|
|
|
313
542
|
// Self reference //
|
|
314
543
|
|
|
315
544
|
/**
|
|
545
|
+
* Handle access export.
|
|
316
546
|
* @param {Expression | Super} expr expression
|
|
317
547
|
* @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
|
|
318
548
|
* @param {Members} members members of the export
|
|
@@ -324,7 +554,7 @@ class CommonJsExportsParserPlugin {
|
|
|
324
554
|
if (members.length === 0) {
|
|
325
555
|
bailout(
|
|
326
556
|
`${base} is used directly at ${formatLocation(
|
|
327
|
-
|
|
557
|
+
parser.getLocation(expr)
|
|
328
558
|
)}`
|
|
329
559
|
);
|
|
330
560
|
}
|
|
@@ -333,7 +563,7 @@ class CommonJsExportsParserPlugin {
|
|
|
333
563
|
`${base}${propertyAccess(
|
|
334
564
|
members
|
|
335
565
|
)}(...) prevents optimization as ${base} is passed as call context at ${formatLocation(
|
|
336
|
-
|
|
566
|
+
parser.getLocation(expr)
|
|
337
567
|
)}`
|
|
338
568
|
);
|
|
339
569
|
}
|
|
@@ -343,10 +573,11 @@ class CommonJsExportsParserPlugin {
|
|
|
343
573
|
members,
|
|
344
574
|
Boolean(call)
|
|
345
575
|
);
|
|
346
|
-
dep.loc =
|
|
576
|
+
dep.loc = parser.getLocation(expr);
|
|
347
577
|
parser.state.module.addDependency(dep);
|
|
348
|
-
/** @type {
|
|
349
|
-
|
|
578
|
+
/** @type {JavascriptModuleBuildMeta} */ (
|
|
579
|
+
parser.state.module.buildMeta
|
|
580
|
+
).treatAsCommonJs = true;
|
|
350
581
|
|
|
351
582
|
if (call) {
|
|
352
583
|
parser.walkExpressions(call.arguments);
|
|
@@ -415,7 +646,7 @@ class CommonJsExportsParserPlugin {
|
|
|
415
646
|
: RuntimeGlobals.nodeModuleDecorator,
|
|
416
647
|
!isHarmony
|
|
417
648
|
);
|
|
418
|
-
dep.loc =
|
|
649
|
+
dep.loc = parser.getLocation(expr);
|
|
419
650
|
parser.state.module.addDependency(dep);
|
|
420
651
|
return true;
|
|
421
652
|
});
|
|
@@ -9,23 +9,34 @@ const Template = require("../Template");
|
|
|
9
9
|
const { equals } = require("../util/ArrayHelpers");
|
|
10
10
|
const { getTrimmedIdsAndRange } = require("../util/chainedImports");
|
|
11
11
|
const makeSerializable = require("../util/makeSerializable");
|
|
12
|
+
const memoize = require("../util/memoize");
|
|
12
13
|
const { propertyAccess } = require("../util/property");
|
|
14
|
+
const {
|
|
15
|
+
ESM_MODULE_EXPORTS_NAME,
|
|
16
|
+
getRequireEsmModuleExportsAccess,
|
|
17
|
+
isRequireEsmModuleExportsModule
|
|
18
|
+
} = require("./CommonJsDependencyHelpers");
|
|
13
19
|
const ModuleDependency = require("./ModuleDependency");
|
|
14
20
|
|
|
15
21
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
|
16
22
|
/** @typedef {import("../Dependency")} Dependency */
|
|
23
|
+
/** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
|
|
17
24
|
/** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
|
|
18
25
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
|
19
26
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
20
27
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
21
28
|
/** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
|
|
22
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
23
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
24
29
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
25
30
|
/** @typedef {import("../util/chainedImports").IdRanges} IdRanges */
|
|
31
|
+
/** @typedef {import("./HarmonyImportGuard").DependencyGuard} DependencyGuard */
|
|
32
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined]>} ObjectDeserializerContext */
|
|
33
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined]>} ObjectSerializerContext */
|
|
34
|
+
|
|
35
|
+
const getHarmonyImportGuard = memoize(() => require("./HarmonyImportGuard"));
|
|
26
36
|
|
|
27
37
|
class CommonJsFullRequireDependency extends ModuleDependency {
|
|
28
38
|
/**
|
|
39
|
+
* Creates an instance of CommonJsFullRequireDependency.
|
|
29
40
|
* @param {string} request the request string
|
|
30
41
|
* @param {Range} range location in source code
|
|
31
42
|
* @param {ExportInfoName[]} names accessed properties on module
|
|
@@ -39,12 +50,28 @@ class CommonJsFullRequireDependency extends ModuleDependency {
|
|
|
39
50
|
) {
|
|
40
51
|
super(request);
|
|
41
52
|
this.range = range;
|
|
53
|
+
/** @type {string[]} */
|
|
42
54
|
this.names = names;
|
|
55
|
+
/** @type {IdRanges | undefined} */
|
|
43
56
|
this.idRanges = idRanges;
|
|
44
57
|
/** @type {boolean} */
|
|
45
58
|
this.call = false;
|
|
46
59
|
/** @type {undefined | boolean} */
|
|
47
60
|
this.asiSafe = undefined;
|
|
61
|
+
/** @type {DependencyGuard[] | undefined} */
|
|
62
|
+
this.branchGuards = undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Returns function to determine if the connection is active.
|
|
67
|
+
* @param {ModuleGraph} moduleGraph module graph
|
|
68
|
+
* @returns {null | false | GetConditionFn} function to determine if the connection is active
|
|
69
|
+
*/
|
|
70
|
+
getCondition(moduleGraph) {
|
|
71
|
+
const guards = this.branchGuards;
|
|
72
|
+
if (guards === undefined) return null;
|
|
73
|
+
return (connection, runtime) =>
|
|
74
|
+
!getHarmonyImportGuard().isDeadByGuards(guards, moduleGraph, runtime);
|
|
48
75
|
}
|
|
49
76
|
|
|
50
77
|
/**
|
|
@@ -54,40 +81,56 @@ class CommonJsFullRequireDependency extends ModuleDependency {
|
|
|
54
81
|
* @returns {ReferencedExports} referenced exports
|
|
55
82
|
*/
|
|
56
83
|
getReferencedExports(moduleGraph, runtime) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
84
|
+
const importedModule = moduleGraph.getModule(this);
|
|
85
|
+
// CommonJS property access is never rewritten to a literal, so it can't inline
|
|
86
|
+
if (
|
|
87
|
+
importedModule &&
|
|
88
|
+
isRequireEsmModuleExportsModule(importedModule, moduleGraph)
|
|
89
|
+
) {
|
|
90
|
+
// When `require(esm)` unwraps a `"module.exports"` named export, the
|
|
91
|
+
// user's property access lands on that value (which webpack does not
|
|
92
|
+
// model), so only the "module.exports" export itself is referenced.
|
|
93
|
+
return [{ name: [ESM_MODULE_EXPORTS_NAME], canInline: false }];
|
|
94
|
+
}
|
|
95
|
+
if (
|
|
96
|
+
this.call &&
|
|
97
|
+
(!importedModule ||
|
|
98
|
+
importedModule.getExportsType(moduleGraph, false) !== "namespace")
|
|
99
|
+
) {
|
|
100
|
+
return [{ name: this.names.slice(0, -1), canInline: false }];
|
|
65
101
|
}
|
|
66
|
-
return [this.names];
|
|
102
|
+
return [{ name: this.names, canInline: false }];
|
|
67
103
|
}
|
|
68
104
|
|
|
69
105
|
/**
|
|
106
|
+
* Serializes this instance into the provided serializer context.
|
|
70
107
|
* @param {ObjectSerializerContext} context context
|
|
71
108
|
*/
|
|
72
109
|
serialize(context) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
110
|
+
context
|
|
111
|
+
.write(this.names)
|
|
112
|
+
.write(this.idRanges)
|
|
113
|
+
.write(this.call)
|
|
114
|
+
.write(this.asiSafe)
|
|
115
|
+
.write(this.branchGuards);
|
|
78
116
|
super.serialize(context);
|
|
79
117
|
}
|
|
80
118
|
|
|
81
119
|
/**
|
|
120
|
+
* Restores this instance from the provided deserializer context.
|
|
82
121
|
* @param {ObjectDeserializerContext} context context
|
|
83
122
|
*/
|
|
84
123
|
deserialize(context) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.idRanges = read();
|
|
88
|
-
|
|
89
|
-
this.
|
|
90
|
-
|
|
124
|
+
this.names = context.read();
|
|
125
|
+
const c1 = context.rest;
|
|
126
|
+
this.idRanges = c1.read();
|
|
127
|
+
const c2 = c1.rest;
|
|
128
|
+
this.call = c2.read();
|
|
129
|
+
const c3 = c2.rest;
|
|
130
|
+
this.asiSafe = c3.read();
|
|
131
|
+
const c4 = c3.rest;
|
|
132
|
+
this.branchGuards = c4.read();
|
|
133
|
+
super.deserialize(c4.rest);
|
|
91
134
|
}
|
|
92
135
|
|
|
93
136
|
get type() {
|
|
@@ -103,6 +146,7 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
|
|
|
103
146
|
ModuleDependency.Template
|
|
104
147
|
) {
|
|
105
148
|
/**
|
|
149
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
106
150
|
* @param {Dependency} dependency the dependency for which the template should be applied
|
|
107
151
|
* @param {ReplaceSource} source the current replace source which can be modified
|
|
108
152
|
* @param {DependencyTemplateContext} templateContext the context object
|
|
@@ -115,6 +159,13 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
|
|
|
115
159
|
) {
|
|
116
160
|
const dep = /** @type {CommonJsFullRequireDependency} */ (dependency);
|
|
117
161
|
if (!dep.range) return;
|
|
162
|
+
const connection = moduleGraph.getConnection(dep);
|
|
163
|
+
// Dead branch: module is excluded and has no id; code is never executed.
|
|
164
|
+
if (connection && !connection.isTargetActive(runtime)) {
|
|
165
|
+
// Replaces the whole member chain, so no property access is left dangling
|
|
166
|
+
source.replace(dep.range[0], dep.range[1] - 1, "null /* dead branch */");
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
118
169
|
const importedModule = moduleGraph.getModule(dep);
|
|
119
170
|
let requireExpr = runtimeTemplate.moduleExports({
|
|
120
171
|
module: importedModule,
|
|
@@ -124,6 +175,10 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
|
|
|
124
175
|
runtimeRequirements
|
|
125
176
|
});
|
|
126
177
|
|
|
178
|
+
const esmRequireAccess = importedModule
|
|
179
|
+
? getRequireEsmModuleExportsAccess(importedModule, moduleGraph, runtime)
|
|
180
|
+
: null;
|
|
181
|
+
|
|
127
182
|
const {
|
|
128
183
|
trimmedRange: [trimmedRangeStart, trimmedRangeEnd],
|
|
129
184
|
trimmedIds
|
|
@@ -135,15 +190,24 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
|
|
|
135
190
|
dep
|
|
136
191
|
);
|
|
137
192
|
|
|
138
|
-
if (
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
.
|
|
193
|
+
if (esmRequireAccess !== null) {
|
|
194
|
+
const access = `${esmRequireAccess}${propertyAccess(trimmedIds)}`;
|
|
195
|
+
requireExpr =
|
|
196
|
+
dep.asiSafe === true
|
|
197
|
+
? `(${requireExpr}${access})`
|
|
198
|
+
: `${requireExpr}${access}`;
|
|
199
|
+
} else if (importedModule) {
|
|
200
|
+
// CJS exports are never inlined
|
|
201
|
+
const usedImported = /** @type {string | string[] | false} */ (
|
|
202
|
+
moduleGraph
|
|
203
|
+
.getExportsInfo(importedModule)
|
|
204
|
+
.getUsedName(trimmedIds, runtime)
|
|
205
|
+
);
|
|
142
206
|
if (usedImported) {
|
|
143
207
|
const comment = equals(usedImported, trimmedIds)
|
|
144
208
|
? ""
|
|
145
209
|
: `${Template.toNormalComment(propertyAccess(trimmedIds))} `;
|
|
146
|
-
const access = `${comment}${propertyAccess(usedImported)}`;
|
|
210
|
+
const access = `${comment}${propertyAccess(/** @type {string[]} */ (usedImported))}`;
|
|
147
211
|
requireExpr =
|
|
148
212
|
dep.asiSafe === true
|
|
149
213
|
? `(${requireExpr}${access})`
|