@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,12 +6,179 @@
|
|
|
6
6
|
|
|
7
7
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
8
|
const Template = require("../Template");
|
|
9
|
+
const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
|
|
9
10
|
const HelperRuntimeModule = require("./HelperRuntimeModule");
|
|
10
11
|
|
|
12
|
+
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
13
|
+
/** @typedef {import("../Module")} Module */
|
|
14
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
11
15
|
/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
|
|
12
16
|
/** @typedef {import("../Module").ExportsType} ExportsType */
|
|
13
17
|
/** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
|
|
14
18
|
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {object} DeferredCycleState
|
|
21
|
+
* @property {Map<Module, Set<Module>>} sccOf strongly-connected component per module (shared object per component)
|
|
22
|
+
* @property {Map<Module, Set<Module> | null>} peers memoized SCC peers (component minus the module) per deferred module
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/** @type {WeakMap<ModuleGraph, DeferredCycleState>} */
|
|
26
|
+
const deferredCycleCache = new WeakMap();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Materializes the active harmony-import targets of a module (deferred edges
|
|
30
|
+
* included, matching the spec's `RequestedModules` recursion).
|
|
31
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
32
|
+
* @param {Module} module the module
|
|
33
|
+
* @returns {Module[]} imported modules
|
|
34
|
+
*/
|
|
35
|
+
function harmonyImportTargets(moduleGraph, module) {
|
|
36
|
+
const connections = moduleGraph.getOutgoingConnectionsByModule(module);
|
|
37
|
+
if (!connections) return [];
|
|
38
|
+
/** @type {Module[]} */
|
|
39
|
+
const targets = [];
|
|
40
|
+
for (const [dep, moduleConnections] of connections) {
|
|
41
|
+
if (
|
|
42
|
+
dep &&
|
|
43
|
+
moduleConnections.some(
|
|
44
|
+
(c) =>
|
|
45
|
+
c.dependency instanceof HarmonyImportDependency &&
|
|
46
|
+
c.isTargetActive(undefined)
|
|
47
|
+
)
|
|
48
|
+
) {
|
|
49
|
+
targets.push(dep);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return targets;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Assigns every module reachable from `seed` (through active harmony imports)
|
|
57
|
+
* to its strongly-connected component via an iterative Tarjan pass, writing the
|
|
58
|
+
* results into `sccOf`. Modules already assigned by an earlier pass are treated
|
|
59
|
+
* as finished, so across all deferred imports every edge is visited once
|
|
60
|
+
* (O(V + E) total) rather than re-walked per import.
|
|
61
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
62
|
+
* @param {Module} seed the module to explore from
|
|
63
|
+
* @param {Map<Module, Set<Module>>} sccOf module-to-component map to populate
|
|
64
|
+
* @returns {void}
|
|
65
|
+
*/
|
|
66
|
+
function assignStronglyConnectedComponents(moduleGraph, seed, sccOf) {
|
|
67
|
+
if (sccOf.has(seed)) return;
|
|
68
|
+
/** @type {Map<Module, number>} */
|
|
69
|
+
const index = new Map();
|
|
70
|
+
/** @type {Map<Module, number>} */
|
|
71
|
+
const low = new Map();
|
|
72
|
+
/** @type {Set<Module>} */
|
|
73
|
+
const onStack = new Set();
|
|
74
|
+
/** @type {Module[]} */
|
|
75
|
+
const componentStack = [];
|
|
76
|
+
/** @type {{ node: Module, targets: Module[], i: number }[]} */
|
|
77
|
+
const work = [];
|
|
78
|
+
let counter = 0;
|
|
79
|
+
/**
|
|
80
|
+
* @param {Module} node node to open
|
|
81
|
+
*/
|
|
82
|
+
const open = (node) => {
|
|
83
|
+
index.set(node, counter);
|
|
84
|
+
low.set(node, counter);
|
|
85
|
+
counter++;
|
|
86
|
+
componentStack.push(node);
|
|
87
|
+
onStack.add(node);
|
|
88
|
+
work.push({ node, targets: harmonyImportTargets(moduleGraph, node), i: 0 });
|
|
89
|
+
};
|
|
90
|
+
open(seed);
|
|
91
|
+
while (work.length > 0) {
|
|
92
|
+
const frame = work[work.length - 1];
|
|
93
|
+
if (frame.i < frame.targets.length) {
|
|
94
|
+
const next = frame.targets[frame.i++];
|
|
95
|
+
// Already in a finished component (from this or a prior pass): skip.
|
|
96
|
+
if (sccOf.has(next)) continue;
|
|
97
|
+
if (!index.has(next)) {
|
|
98
|
+
open(next);
|
|
99
|
+
} else if (onStack.has(next)) {
|
|
100
|
+
const nodeLow = /** @type {number} */ (low.get(frame.node));
|
|
101
|
+
const nextIndex = /** @type {number} */ (index.get(next));
|
|
102
|
+
if (nextIndex < nodeLow) low.set(frame.node, nextIndex);
|
|
103
|
+
}
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
work.pop();
|
|
107
|
+
const node = frame.node;
|
|
108
|
+
const nodeLow = /** @type {number} */ (low.get(node));
|
|
109
|
+
if (work.length > 0) {
|
|
110
|
+
const parent = work[work.length - 1].node;
|
|
111
|
+
if (nodeLow < /** @type {number} */ (low.get(parent))) {
|
|
112
|
+
low.set(parent, nodeLow);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (nodeLow === index.get(node)) {
|
|
116
|
+
/** @type {Set<Module>} */
|
|
117
|
+
const component = new Set();
|
|
118
|
+
let member;
|
|
119
|
+
do {
|
|
120
|
+
member = /** @type {Module} */ (componentStack.pop());
|
|
121
|
+
onStack.delete(member);
|
|
122
|
+
component.add(member);
|
|
123
|
+
} while (member !== node);
|
|
124
|
+
for (const m of component) sccOf.set(m, component);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Per the TC39 import-defer spec's `ReadyForSyncExecution`, forcing evaluation
|
|
131
|
+
* of a deferred module must throw when any module in its transitive static
|
|
132
|
+
* import closure is currently evaluating. Only a module in `module`'s own
|
|
133
|
+
* strongly-connected component can be evaluating at that point (anything else it
|
|
134
|
+
* imports is either already evaluated or not started), so we emit just the SCC
|
|
135
|
+
* peers instead of the whole (potentially huge) forward closure.
|
|
136
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
137
|
+
* @param {Module} module the deferred module
|
|
138
|
+
* @returns {Set<Module> | null} the SCC peers when cyclic, otherwise null
|
|
139
|
+
*/
|
|
140
|
+
function getDeferredCycleModules(moduleGraph, module) {
|
|
141
|
+
let state = deferredCycleCache.get(moduleGraph);
|
|
142
|
+
if (state === undefined) {
|
|
143
|
+
state = { sccOf: new Map(), peers: new Map() };
|
|
144
|
+
deferredCycleCache.set(moduleGraph, state);
|
|
145
|
+
}
|
|
146
|
+
const cached = state.peers.get(module);
|
|
147
|
+
if (cached !== undefined) return cached;
|
|
148
|
+
assignStronglyConnectedComponents(moduleGraph, module, state.sccOf);
|
|
149
|
+
const component = state.sccOf.get(module);
|
|
150
|
+
// A trivial component (size 1, no self-cycle peers) means no cycle; a direct
|
|
151
|
+
// self-loop is already covered by the `evaluating` check on `module` itself.
|
|
152
|
+
let result = null;
|
|
153
|
+
if (component !== undefined && component.size > 1) {
|
|
154
|
+
result = new Set(component);
|
|
155
|
+
result.delete(module);
|
|
156
|
+
}
|
|
157
|
+
state.peers.set(module, result);
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Maps a defer-cycle closure to the runtime module ids whose `evaluating` flag
|
|
163
|
+
* the deferred namespace must check. `resolveId` maps a closure module to the
|
|
164
|
+
* runtime id that carries its evaluation state (its own id, or the id of the
|
|
165
|
+
* concatenated module that absorbed it); unresolved (`null`) members are
|
|
166
|
+
* dropped. Returns `null` when there is nothing to check.
|
|
167
|
+
* @param {Set<Module> | null} closure closure modules, or null when not cyclic
|
|
168
|
+
* @param {(module: Module) => ModuleId | null} resolveId maps a module to its runtime id
|
|
169
|
+
* @returns {ModuleId[] | null} deduplicated runtime ids, or null
|
|
170
|
+
*/
|
|
171
|
+
function getDeferredCycleModuleIds(closure, resolveId) {
|
|
172
|
+
if (closure === null) return null;
|
|
173
|
+
/** @type {Set<ModuleId>} */
|
|
174
|
+
const ids = new Set();
|
|
175
|
+
for (const module of closure) {
|
|
176
|
+
const id = resolveId(module);
|
|
177
|
+
if (id !== null) ids.add(id);
|
|
178
|
+
}
|
|
179
|
+
return ids.size > 0 ? [...ids] : null;
|
|
180
|
+
}
|
|
181
|
+
|
|
15
182
|
/**
|
|
16
183
|
* @param {ExportsType} exportsType exports type
|
|
17
184
|
* @returns {string} mode
|
|
@@ -29,6 +196,7 @@ function getMakeDeferredNamespaceModeFromExportsType(exportsType) {
|
|
|
29
196
|
* @param {string} moduleId moduleId
|
|
30
197
|
* @param {ExportsType} exportsType exportsType
|
|
31
198
|
* @param {(ModuleId | null)[]} asyncDepsIds asyncDepsIds
|
|
199
|
+
* @param {ModuleId[] | null} syncCycleDepsIds transitive static closure ids when the module is part of a defer cycle
|
|
32
200
|
* @param {RuntimeRequirements} runtimeRequirements runtime requirements
|
|
33
201
|
* @returns {string} call make optimized deferred namespace object
|
|
34
202
|
*/
|
|
@@ -36,15 +204,23 @@ function getOptimizedDeferredModule(
|
|
|
36
204
|
moduleId,
|
|
37
205
|
exportsType,
|
|
38
206
|
asyncDepsIds,
|
|
207
|
+
syncCycleDepsIds,
|
|
39
208
|
runtimeRequirements
|
|
40
209
|
) {
|
|
41
210
|
runtimeRequirements.add(RuntimeGlobals.makeOptimizedDeferredNamespaceObject);
|
|
42
211
|
const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
212
|
+
const asyncDeps = asyncDepsIds.filter((x) => x !== null);
|
|
213
|
+
const hasSync = syncCycleDepsIds !== null && syncCycleDepsIds.length > 0;
|
|
214
|
+
// `syncDeps` is passed positionally after `asyncDeps`, so a `0` placeholder
|
|
215
|
+
// keeps the slot when the module has cycle deps but no async deps.
|
|
216
|
+
const args = [moduleId, mode];
|
|
217
|
+
if (asyncDeps.length > 0 || hasSync) {
|
|
218
|
+
args.push(asyncDeps.length > 0 ? JSON.stringify(asyncDeps) : "0");
|
|
219
|
+
}
|
|
220
|
+
if (hasSync) args.push(JSON.stringify(syncCycleDepsIds));
|
|
221
|
+
return `${RuntimeGlobals.makeOptimizedDeferredNamespaceObject}(${args.join(
|
|
222
|
+
", "
|
|
223
|
+
)})`;
|
|
48
224
|
}
|
|
49
225
|
|
|
50
226
|
class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
@@ -58,23 +234,42 @@ class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeMod
|
|
|
58
234
|
}
|
|
59
235
|
|
|
60
236
|
/**
|
|
237
|
+
* Generates runtime code for this runtime module.
|
|
61
238
|
* @returns {string | null} runtime code
|
|
62
239
|
*/
|
|
63
240
|
generate() {
|
|
64
241
|
if (!this.compilation) return null;
|
|
242
|
+
const { runtimeTemplate } = this.compilation;
|
|
243
|
+
const cst = runtimeTemplate.renderConst();
|
|
244
|
+
const lt = runtimeTemplate.renderLet();
|
|
65
245
|
const fn = RuntimeGlobals.makeOptimizedDeferredNamespaceObject;
|
|
66
246
|
const hasAsync = this.hasAsyncRuntime;
|
|
67
247
|
return Template.asString([
|
|
68
248
|
// Note: must be a function (not arrow), because this is used in body!
|
|
69
|
-
|
|
249
|
+
// `asyncDeps` keeps a fixed positional slot even without async runtime
|
|
250
|
+
// so the trailing `syncDeps` (defer-cycle closure) always lines up.
|
|
251
|
+
`${fn} = function(moduleId, mode, asyncDeps, syncDeps) {`,
|
|
70
252
|
Template.indent([
|
|
71
|
-
|
|
72
|
-
hasAsync ?
|
|
73
|
-
|
|
253
|
+
`${cst} r = this;`,
|
|
254
|
+
hasAsync ? `${cst} isAsync = asyncDeps && asyncDeps.length;` : "",
|
|
255
|
+
`${cst} obj = {`,
|
|
74
256
|
Template.indent([
|
|
75
257
|
"get a() {",
|
|
76
258
|
Template.indent([
|
|
77
|
-
|
|
259
|
+
// Forcing evaluation of a module that is currently evaluating
|
|
260
|
+
// (a cycle reached through a deferred import) must throw rather
|
|
261
|
+
// than expose its partial exports. `syncDeps` (present only for
|
|
262
|
+
// cyclic deferred modules) carries the transitive static closure,
|
|
263
|
+
// so an evaluating dependency is caught before any evaluation.
|
|
264
|
+
`${cst} cachedModule = __webpack_module_cache__[moduleId];`,
|
|
265
|
+
'if (cachedModule !== undefined && (cachedModule.evaluating || cachedModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while the module is being evaluated");',
|
|
266
|
+
"if (syncDeps) for (var i = 0; i < syncDeps.length; i++) {",
|
|
267
|
+
Template.indent([
|
|
268
|
+
`${cst} depModule = __webpack_module_cache__[syncDeps[i]];`,
|
|
269
|
+
'if (depModule !== undefined && (depModule.evaluating || depModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while a dependency is being evaluated");'
|
|
270
|
+
]),
|
|
271
|
+
"}",
|
|
272
|
+
`${lt} exports = r(moduleId);`,
|
|
78
273
|
hasAsync
|
|
79
274
|
? `if(isAsync) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
80
275
|
: "",
|
|
@@ -108,30 +303,61 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
108
303
|
}
|
|
109
304
|
|
|
110
305
|
/**
|
|
306
|
+
* Generates runtime code for this runtime module.
|
|
111
307
|
* @returns {string | null} runtime code
|
|
112
308
|
*/
|
|
113
309
|
generate() {
|
|
114
310
|
if (!this.compilation) return null;
|
|
115
311
|
const { runtimeTemplate } = this.compilation;
|
|
312
|
+
const cst = runtimeTemplate.renderConst();
|
|
313
|
+
const lt = runtimeTemplate.renderLet();
|
|
116
314
|
const fn = RuntimeGlobals.makeDeferredNamespaceObject;
|
|
117
315
|
const hasAsync = this.hasAsyncRuntime;
|
|
118
|
-
const init = runtimeTemplate.
|
|
119
|
-
? "init?.();"
|
|
120
|
-
: "if (init) init();";
|
|
316
|
+
const init = `${runtimeTemplate.optionalChaining("init", "()")};`;
|
|
121
317
|
return `${fn} = ${runtimeTemplate.basicFunction("moduleId, mode", [
|
|
122
|
-
|
|
123
|
-
|
|
318
|
+
// Per the TC39 import-defer spec, deferred namespaces are
|
|
319
|
+
// distinct from their eager counterparts and the same module
|
|
320
|
+
// referenced from multiple defer-import sites must yield the
|
|
321
|
+
// same object. Cache the Proxy / fake namespace per-moduleId so
|
|
322
|
+
// repeated calls (including across files) share identity.
|
|
323
|
+
//
|
|
324
|
+
// Bit 16 (`createFakeNamespaceObject`'s "return value when
|
|
325
|
+
// it's Promise-like" flag added by
|
|
326
|
+
// `RuntimeTemplate.moduleNamespacePromise` for dynamic
|
|
327
|
+
// imports) is irrelevant for deferred namespaces — the value
|
|
328
|
+
// passed into `createFakeNamespaceObject` here is always the
|
|
329
|
+
// resolved module exports (after unwrapping the async-module
|
|
330
|
+
// export symbol when present), never a Promise. Strip it
|
|
331
|
+
// once so all downstream behavior, the cache key, and the
|
|
332
|
+
// `createFakeNamespaceObject` call below see the same shape
|
|
333
|
+
// mode. This keeps static defer (mode 8) and dynamic
|
|
334
|
+
// `await import.defer` (mode 8 | 16) sharing the same
|
|
335
|
+
// Deferred Module Namespace object, while still keying by
|
|
336
|
+
// `(moduleId, mode)` so distinct exports-type shapes
|
|
337
|
+
// (e.g. one importer treats a CJS module as
|
|
338
|
+
// "default-with-named", another as "namespace") get
|
|
339
|
+
// distinct cache entries.
|
|
340
|
+
"mode &= ~16;",
|
|
341
|
+
`${lt} byMode = __webpack_module_deferred_namespace_cache__[moduleId];`,
|
|
342
|
+
"if (byMode && byMode[mode] !== undefined) return byMode[mode];",
|
|
343
|
+
"if (!byMode) byMode = __webpack_module_deferred_namespace_cache__[moduleId] = {};",
|
|
344
|
+
`${cst} cachedModule = __webpack_module_cache__[moduleId];`,
|
|
345
|
+
"if (cachedModule && cachedModule.error === undefined && !(mode & 8)) {",
|
|
124
346
|
Template.indent([
|
|
125
|
-
|
|
347
|
+
`${lt} exports = cachedModule.exports;`,
|
|
126
348
|
hasAsync
|
|
127
349
|
? `if (${RuntimeGlobals.asyncModuleExportSymbol} in exports) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
128
350
|
: "",
|
|
129
|
-
|
|
130
|
-
`return ${RuntimeGlobals.createFakeNamespaceObject}(exports, mode);`
|
|
351
|
+
`return byMode[mode] = ${RuntimeGlobals.createFakeNamespaceObject}(exports, mode);`
|
|
131
352
|
]),
|
|
132
353
|
"}",
|
|
133
354
|
"",
|
|
134
|
-
|
|
355
|
+
`${lt} init = ${runtimeTemplate.basicFunction("", [
|
|
356
|
+
// A deferred namespace that forces evaluation of a module that is
|
|
357
|
+
// already evaluating (a cycle) must throw rather than expose its
|
|
358
|
+
// partial exports.
|
|
359
|
+
`${cst} evaluatingModule = __webpack_module_cache__[moduleId];`,
|
|
360
|
+
'if (evaluatingModule !== undefined && (evaluatingModule.evaluating || evaluatingModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while the module is being evaluated");',
|
|
135
361
|
`ns = ${RuntimeGlobals.require}(moduleId);`,
|
|
136
362
|
hasAsync
|
|
137
363
|
? `if (${RuntimeGlobals.asyncModuleExportSymbol} in ns) ns = ns[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
@@ -139,9 +365,23 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
139
365
|
"init = null;",
|
|
140
366
|
"if (mode & 8 || mode & 4 && ns.__esModule && typeof ns === 'object') {",
|
|
141
367
|
Template.indent([
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
368
|
+
// Drop only the read-side traps after init: with the
|
|
369
|
+
// resolved namespace's own keys mirrored onto
|
|
370
|
+
// `ns_target` below, the default `Reflect` behavior
|
|
371
|
+
// returns the right values via the live-binding
|
|
372
|
+
// getters, so we no longer need to intercept `get` /
|
|
373
|
+
// `has` / `ownKeys` / `getOwnPropertyDescriptor`.
|
|
374
|
+
//
|
|
375
|
+
// The mutation traps (`set`, `deleteProperty`,
|
|
376
|
+
// `defineProperty`) are kept because per the TC39
|
|
377
|
+
// import-defer spec, `[[Set]]` / `[[Delete]]` /
|
|
378
|
+
// `[[DefineOwnProperty]]` on a Deferred Module
|
|
379
|
+
// Namespace Exotic Object never succeed — and the
|
|
380
|
+
// proxy target itself remains extensible
|
|
381
|
+
// (architecturally we cannot freeze it up-front),
|
|
382
|
+
// so without these traps `ns.notExported = "x"`
|
|
383
|
+
// after evaluation would silently create a property
|
|
384
|
+
// on the target instead of returning false.
|
|
145
385
|
"delete handler.get;",
|
|
146
386
|
"delete handler.has;",
|
|
147
387
|
"delete handler.ownKeys;",
|
|
@@ -151,14 +391,59 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
151
391
|
Template.indent([
|
|
152
392
|
`ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, mode);`
|
|
153
393
|
]),
|
|
394
|
+
"}",
|
|
395
|
+
// Mirror own properties from the resolved namespace onto the proxy
|
|
396
|
+
// target so that proxy invariants hold for callers that structurally
|
|
397
|
+
// introspect via `Object.keys` / `Object.getOwnPropertyNames` /
|
|
398
|
+
// `Object.getOwnPropertyDescriptor`: when our trap reports a
|
|
399
|
+
// non-configurable descriptor for a key, the target must also have
|
|
400
|
+
// that key with a matching descriptor.
|
|
401
|
+
//
|
|
402
|
+
// `__esModule` and `Symbol.toStringTag` are intentionally skipped:
|
|
403
|
+
// the proxy synthesizes "Deferred Module" / true regardless of what
|
|
404
|
+
// the underlying namespace exposes (per the TC39 import-defer
|
|
405
|
+
// proposal, the [[StringTag]] of a Deferred Module Namespace
|
|
406
|
+
// Exotic Object is "Deferred Module"), and the target was already
|
|
407
|
+
// pre-populated with those values below.
|
|
408
|
+
`${cst} keys = Reflect.ownKeys(ns);`,
|
|
409
|
+
"for (var i = 0; i < keys.length; i++) {",
|
|
410
|
+
Template.indent([
|
|
411
|
+
`${cst} k = keys[i];`,
|
|
412
|
+
'if (k === "__esModule" || k === Symbol.toStringTag) continue;',
|
|
413
|
+
`if (!${runtimeTemplate.objectHasOwn("ns_target", "k")}) {`,
|
|
414
|
+
Template.indent([
|
|
415
|
+
"try { Object.defineProperty(ns_target, k, Reflect.getOwnPropertyDescriptor(ns, k)); } catch (_) {}"
|
|
416
|
+
]),
|
|
417
|
+
"}"
|
|
418
|
+
]),
|
|
154
419
|
"}"
|
|
155
420
|
])};`,
|
|
156
421
|
"",
|
|
157
|
-
|
|
158
|
-
|
|
422
|
+
// The proxy target is a fresh placeholder, separate from
|
|
423
|
+
// `__webpack_module_deferred_exports__[moduleId]` (which is reused
|
|
424
|
+
// by `__webpack_require__` as `module.exports` for deferred-loaded
|
|
425
|
+
// modules and would conflict with our pre-populated synthetic
|
|
426
|
+
// `__esModule` / `Symbol.toStringTag` non-configurable properties).
|
|
427
|
+
// Using a dedicated target keeps the proxy invariant-compliant
|
|
428
|
+
// without interfering with the module's own exports object.
|
|
429
|
+
`${cst} ns_target = { __proto__: null };`,
|
|
430
|
+
// Pre-populate the synthetic deferred-namespace properties with
|
|
431
|
+
// fully non-configurable, non-writable, non-enumerable descriptors
|
|
432
|
+
// (matching the TC39 import-defer spec for Module Namespace
|
|
433
|
+
// Exotic Objects). The trap returns the same descriptors below.
|
|
434
|
+
'Object.defineProperty(ns_target, "__esModule", { value: true });',
|
|
435
|
+
'Object.defineProperty(ns_target, Symbol.toStringTag, { value: "Deferred Module" });',
|
|
436
|
+
`${lt} ns = ns_target;`,
|
|
437
|
+
`${cst} handler = {`,
|
|
159
438
|
Template.indent([
|
|
160
439
|
"__proto__: null,",
|
|
161
|
-
|
|
440
|
+
// Per the TC39 import-defer proposal, `IsSymbolLikeNamespaceKey`
|
|
441
|
+
// returns true for any Symbol-keyed access (and for "then"); such
|
|
442
|
+
// accesses go through `OrdinaryGetOwnProperty` and must not
|
|
443
|
+
// trigger evaluation of the deferred module. The Symbol checks
|
|
444
|
+
// below short-circuit to the pre-populated target without
|
|
445
|
+
// running `init()`.
|
|
446
|
+
`${runtimeTemplate.method("get", "_, name", [
|
|
162
447
|
"switch (name) {",
|
|
163
448
|
Template.indent([
|
|
164
449
|
'case "__esModule": return true;',
|
|
@@ -166,10 +451,11 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
166
451
|
'case "then": return undefined;'
|
|
167
452
|
]),
|
|
168
453
|
"}",
|
|
454
|
+
'if (typeof name === "symbol") return ns_target[name];',
|
|
169
455
|
init,
|
|
170
456
|
"return ns[name];"
|
|
171
457
|
])},`,
|
|
172
|
-
|
|
458
|
+
`${runtimeTemplate.method("has", "_, name", [
|
|
173
459
|
"switch (name) {",
|
|
174
460
|
Template.indent(
|
|
175
461
|
[
|
|
@@ -184,41 +470,70 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
184
470
|
].filter(Boolean)
|
|
185
471
|
),
|
|
186
472
|
"}",
|
|
473
|
+
'if (typeof name === "symbol") return name in ns_target;',
|
|
187
474
|
init,
|
|
188
475
|
"return name in ns;"
|
|
189
476
|
])},`,
|
|
190
|
-
|
|
477
|
+
`${runtimeTemplate.method("ownKeys", "", [
|
|
191
478
|
init,
|
|
192
|
-
|
|
479
|
+
`${cst} filtered = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction(
|
|
480
|
+
'x !== "then" && x !== Symbol.toStringTag',
|
|
481
|
+
"x"
|
|
482
|
+
)});`,
|
|
483
|
+
`${cst} keys = ${
|
|
484
|
+
runtimeTemplate.supportsSpread()
|
|
485
|
+
? "[...filtered, Symbol.toStringTag]"
|
|
486
|
+
: "filtered.concat([Symbol.toStringTag])"
|
|
487
|
+
};`,
|
|
193
488
|
"return keys;"
|
|
194
489
|
])},`,
|
|
195
|
-
|
|
490
|
+
`${runtimeTemplate.method("getOwnPropertyDescriptor", "_, name", [
|
|
196
491
|
"switch (name) {",
|
|
197
492
|
Template.indent([
|
|
198
|
-
|
|
199
|
-
|
|
493
|
+
// Match the descriptors actually defined on `ns_target`
|
|
494
|
+
// (non-configurable, non-writable, non-enumerable) so the
|
|
495
|
+
// proxy invariant holds for both the trap result and any
|
|
496
|
+
// post-init forwarding via the deleted-handler path.
|
|
497
|
+
'case "__esModule": return { value: true, writable: false, enumerable: false, configurable: false };',
|
|
498
|
+
'case Symbol.toStringTag: return { value: "Deferred Module", writable: false, enumerable: false, configurable: false };',
|
|
200
499
|
'case "then": return undefined;'
|
|
201
500
|
]),
|
|
202
501
|
"}",
|
|
502
|
+
'if (typeof name === "symbol") return Reflect.getOwnPropertyDescriptor(ns_target, name);',
|
|
203
503
|
init,
|
|
204
|
-
|
|
504
|
+
`${lt} desc = Reflect.getOwnPropertyDescriptor(ns, name);`,
|
|
205
505
|
'if (mode & 2 && name == "default" && !desc) {',
|
|
206
506
|
Template.indent("desc = { value: ns, configurable: true };"),
|
|
207
507
|
"}",
|
|
208
508
|
"return desc;"
|
|
209
509
|
])},`,
|
|
210
|
-
`defineProperty
|
|
510
|
+
// `defineProperty` always rejects, but per the TC39 spec it
|
|
511
|
+
// must still trigger evaluation for string keys (the spec
|
|
512
|
+
// algorithm calls `[[GetOwnProperty]]` first, which forces
|
|
513
|
+
// evaluation on a deferred namespace). Symbol keys go through
|
|
514
|
+
// OrdinaryDefineOwnProperty and do not trigger eval.
|
|
515
|
+
`${runtimeTemplate.method("defineProperty", "_, name", [
|
|
516
|
+
'if (typeof name === "symbol" || name === "then") return false;',
|
|
517
|
+
init,
|
|
518
|
+
"return false;"
|
|
519
|
+
])},`,
|
|
520
|
+
// `deleteProperty` rejects, but per the TC39 spec it must
|
|
521
|
+
// still trigger evaluation for string keys (the spec
|
|
522
|
+
// algorithm calls `GetModuleExportsList` for non-symbol-like
|
|
523
|
+
// keys, forcing evaluation on a deferred namespace).
|
|
524
|
+
`${runtimeTemplate.method("deleteProperty", "_, name", [
|
|
525
|
+
'if (typeof name === "symbol" || name === "then") return false;',
|
|
211
526
|
init,
|
|
212
|
-
// Note: This behavior does not match the spec one, but since webpack does not do it either
|
|
213
|
-
// for a normal Module Namespace object (in MakeNamespaceObjectRuntimeModule), let's keep it simple.
|
|
214
527
|
"return false;"
|
|
215
528
|
])},`,
|
|
216
|
-
`
|
|
529
|
+
// `set` always returns false without triggering evaluation —
|
|
530
|
+
// the spec [[Set]] algorithm for Module Namespaces is just
|
|
531
|
+
// "return false" (no [[GetOwnProperty]], no eval).
|
|
217
532
|
`set: ${runtimeTemplate.returningFunction("false")},`
|
|
218
533
|
]),
|
|
219
534
|
"}",
|
|
220
535
|
// we don't fully emulate ES Module semantics in this Proxy to align with normal webpack esm namespace object.
|
|
221
|
-
"return new Proxy(
|
|
536
|
+
"return byMode[mode] = new Proxy(ns_target, handler);"
|
|
222
537
|
])};`;
|
|
223
538
|
}
|
|
224
539
|
}
|
|
@@ -227,6 +542,8 @@ module.exports.MakeDeferredNamespaceObjectRuntimeModule =
|
|
|
227
542
|
MakeDeferredNamespaceObjectRuntimeModule;
|
|
228
543
|
module.exports.MakeOptimizedDeferredNamespaceObjectRuntimeModule =
|
|
229
544
|
MakeOptimizedDeferredNamespaceObjectRuntimeModule;
|
|
545
|
+
module.exports.getDeferredCycleModuleIds = getDeferredCycleModuleIds;
|
|
546
|
+
module.exports.getDeferredCycleModules = getDeferredCycleModules;
|
|
230
547
|
module.exports.getMakeDeferredNamespaceModeFromExportsType =
|
|
231
548
|
getMakeDeferredNamespaceModeFromExportsType;
|
|
232
549
|
module.exports.getOptimizedDeferredModule = getOptimizedDeferredModule;
|
|
@@ -16,6 +16,7 @@ class MakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
+
* Generates runtime code for this runtime module.
|
|
19
20
|
* @returns {string | null} runtime code
|
|
20
21
|
*/
|
|
21
22
|
generate() {
|
|
@@ -25,7 +26,7 @@ class MakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
|
25
26
|
return Template.asString([
|
|
26
27
|
"// define __esModule on exports",
|
|
27
28
|
`${fn} = ${runtimeTemplate.basicFunction("exports", [
|
|
28
|
-
|
|
29
|
+
`if(${runtimeTemplate.supportsSymbol() ? "" : "typeof Symbol !== 'undefined' && "}Symbol.toStringTag) {`,
|
|
29
30
|
Template.indent([
|
|
30
31
|
"Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });"
|
|
31
32
|
]),
|
|
@@ -16,13 +16,14 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
+
* Generates runtime code for this runtime module.
|
|
19
20
|
* @returns {string | null} runtime code
|
|
20
21
|
*/
|
|
21
22
|
generate() {
|
|
22
23
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
23
24
|
const { runtimeTemplate } = compilation;
|
|
24
25
|
return Template.asString([
|
|
25
|
-
|
|
26
|
+
`${runtimeTemplate.renderConst()} deferred = [];`,
|
|
26
27
|
`${RuntimeGlobals.onChunksLoaded} = ${runtimeTemplate.basicFunction(
|
|
27
28
|
"result, chunkIds, fn, priority",
|
|
28
29
|
[
|
|
@@ -34,14 +35,14 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
|
|
|
34
35
|
"return;"
|
|
35
36
|
]),
|
|
36
37
|
"}",
|
|
37
|
-
|
|
38
|
+
`${runtimeTemplate.renderLet()} notFulfilled = Infinity;`,
|
|
38
39
|
"for (var i = 0; i < deferred.length; i++) {",
|
|
39
40
|
Template.indent([
|
|
40
41
|
runtimeTemplate.destructureArray(
|
|
41
42
|
["chunkIds", "fn", "priority"],
|
|
42
43
|
"deferred[i]"
|
|
43
44
|
),
|
|
44
|
-
|
|
45
|
+
`${runtimeTemplate.renderLet()} fulfilled = true;`,
|
|
45
46
|
"for (var j = 0; j < chunkIds.length; j++) {",
|
|
46
47
|
Template.indent([
|
|
47
48
|
`if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(${
|
|
@@ -62,7 +63,7 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
|
|
|
62
63
|
"if(fulfilled) {",
|
|
63
64
|
Template.indent([
|
|
64
65
|
"deferred.splice(i--, 1)",
|
|
65
|
-
|
|
66
|
+
`${runtimeTemplate.renderConst()} r = fn();`,
|
|
66
67
|
"if (r !== undefined) result = r;"
|
|
67
68
|
]),
|
|
68
69
|
"}"
|
|
@@ -16,16 +16,18 @@ class RelativeUrlRuntimeModule extends HelperRuntimeModule {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
+
* Generates runtime code for this runtime module.
|
|
19
20
|
* @returns {string | null} runtime code
|
|
20
21
|
*/
|
|
21
22
|
generate() {
|
|
22
23
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
23
24
|
const { runtimeTemplate } = compilation;
|
|
25
|
+
const cst = runtimeTemplate.renderConst();
|
|
24
26
|
return Template.asString([
|
|
25
27
|
`${RuntimeGlobals.relativeUrl} = function RelativeURL(url) {`,
|
|
26
28
|
Template.indent([
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
`${cst} realUrl = new URL(url, "x:/");`,
|
|
30
|
+
`${cst} values = {};`,
|
|
29
31
|
"for (var key in realUrl) values[key] = realUrl[key];",
|
|
30
32
|
"values.href = url;",
|
|
31
33
|
'values.pathname = url.replace(/[?#].*/, "");',
|