@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -11
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +141 -9
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +23 -26
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +54 -37
- package/lib/Compilation.js +635 -107
- package/lib/Compiler.js +93 -31
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +498 -127
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +399 -108
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +376 -78
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +575 -149
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +92 -6
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +15 -0
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -60
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +5 -2
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +485 -181
- package/lib/NormalModuleFactory.js +148 -29
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +104 -26
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +29 -3
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +43 -7
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +591 -41
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/ModuleFederationPlugin.js +12 -26
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +534 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +156 -77
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +356 -204
- package/lib/css/CssParser.js +3452 -1950
- package/lib/css/syntax.js +4058 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +682 -368
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +59 -3
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +426 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +34 -8
- package/lib/html/HtmlGenerator.js +1470 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1111 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9020 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +25 -2
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +579 -183
- package/lib/javascript/JavascriptParser.js +1289 -462
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +4380 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +585 -116
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
- package/lib/optimize/RealContentHashPlugin.js +125 -50
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +54 -6
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +663 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +552 -463
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +50 -3
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
- package/lib/stats/StatsFactory.js +39 -18
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +97 -6
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1117 -79
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +8608 -1159
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -16,8 +16,7 @@ const {
|
|
|
16
16
|
RawSource,
|
|
17
17
|
ReplaceSource
|
|
18
18
|
} = require("webpack-sources");
|
|
19
|
-
|
|
20
|
-
const { tryRunOrWebpackError } = require("../HookWebpackError");
|
|
19
|
+
/** @typedef {import("../Compilation")} Compilation */
|
|
21
20
|
const HotUpdateChunk = require("../HotUpdateChunk");
|
|
22
21
|
const InitFragment = require("../InitFragment");
|
|
23
22
|
const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
|
|
@@ -30,6 +29,7 @@ const {
|
|
|
30
29
|
const NormalModule = require("../NormalModule");
|
|
31
30
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
32
31
|
const Template = require("../Template");
|
|
32
|
+
const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
|
|
33
33
|
const { last, someInIterable } = require("../util/IterableHelpers");
|
|
34
34
|
const StringXor = require("../util/StringXor");
|
|
35
35
|
const { compareModulesByFullName } = require("../util/comparators");
|
|
@@ -42,16 +42,33 @@ const {
|
|
|
42
42
|
getUsedNamesInScopeInfo
|
|
43
43
|
} = require("../util/concatenate");
|
|
44
44
|
const createHash = require("../util/createHash");
|
|
45
|
-
const
|
|
45
|
+
const createHooksRegistry = require("../util/createHooksRegistry");
|
|
46
|
+
const { digestNonNumericOnlyWithFull } = require("../util/nonNumericOnlyHash");
|
|
46
47
|
const removeBOM = require("../util/removeBOM");
|
|
47
48
|
const { intersectRuntime } = require("../util/runtime");
|
|
49
|
+
const { getAllChunks } = require("./ChunkHelpers");
|
|
48
50
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
|
51
|
+
const JavascriptModule = require("./JavascriptModule");
|
|
49
52
|
const JavascriptParser = require("./JavascriptParser");
|
|
50
53
|
|
|
51
|
-
/** @typedef {import("eslint-scope").Reference} Reference */
|
|
52
|
-
/** @typedef {import("eslint-scope").Scope} Scope */
|
|
53
|
-
/** @typedef {import("eslint-scope").Variable} Variable */
|
|
54
54
|
/** @typedef {import("estree").Program} Program */
|
|
55
|
+
/** @typedef {import("estree").Node} Node */
|
|
56
|
+
/** @typedef {import("estree").Identifier} Identifier */
|
|
57
|
+
/** @typedef {import("estree").CatchClause} CatchClause */
|
|
58
|
+
/** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
|
|
59
|
+
/** @typedef {import("estree").ClassExpression} ClassExpression */
|
|
60
|
+
/** @typedef {import("estree").FunctionDeclaration} FunctionDeclaration */
|
|
61
|
+
/** @typedef {import("estree").FunctionExpression} FunctionExpression */
|
|
62
|
+
/** @typedef {import("estree").ArrowFunctionExpression} ArrowFunctionExpression */
|
|
63
|
+
/** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
|
|
64
|
+
/** @typedef {import("estree").VariableDeclaration} VariableDeclaration */
|
|
65
|
+
/** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
|
|
66
|
+
/** @typedef {import("estree").ImportSpecifier} ImportSpecifier */
|
|
67
|
+
/** @typedef {import("estree").ImportDefaultSpecifier} ImportDefaultSpecifier */
|
|
68
|
+
/** @typedef {import("estree").ImportNamespaceSpecifier} ImportNamespaceSpecifier */
|
|
69
|
+
/** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
|
|
70
|
+
/** @typedef {import("estree").ForInStatement} ForInStatement */
|
|
71
|
+
/** @typedef {import("estree").ForOfStatement} ForOfStatement */
|
|
55
72
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
56
73
|
/** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
|
|
57
74
|
/** @typedef {import("../Chunk")} Chunk */
|
|
@@ -69,17 +86,73 @@ const JavascriptParser = require("./JavascriptParser");
|
|
|
69
86
|
/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
|
|
70
87
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
71
88
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
|
72
|
-
/** @typedef {import("../
|
|
73
|
-
/** @typedef {import("../WebpackError")} WebpackError */
|
|
89
|
+
/** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
|
|
90
|
+
/** @typedef {import("../errors/WebpackError")} WebpackError */
|
|
74
91
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
75
92
|
/** @typedef {import("../util/Hash")} Hash */
|
|
76
93
|
/** @typedef {import("../util/concatenate").ScopeSet} ScopeSet */
|
|
77
94
|
/** @typedef {import("../util/concatenate").UsedNamesInScopeInfo} UsedNamesInScopeInfo */
|
|
78
95
|
|
|
96
|
+
// TODO remove these types when we will update `eslint-scope` to the latest version and import them from `eslint-scope`
|
|
97
|
+
/**
|
|
98
|
+
* @typedef {object} Scope
|
|
99
|
+
* @property {"block" | "catch" | "class" | "class-field-initializer" | "class-static-block" | "for" | "function" | "function-expression-name" | "global" | "module" | "switch" | "with" | "TDZ"} type
|
|
100
|
+
* @property {boolean} isStrict
|
|
101
|
+
* @property {Scope | null} upper
|
|
102
|
+
* @property {Scope[]} childScopes
|
|
103
|
+
* @property {Scope} variableScope
|
|
104
|
+
* @property {Node} block
|
|
105
|
+
* @property {Variable[]} variables
|
|
106
|
+
* @property {Map<string, Variable>} set
|
|
107
|
+
* @property {Reference[]} references
|
|
108
|
+
* @property {Reference[]} through
|
|
109
|
+
* @property {boolean} functionExpressionScope
|
|
110
|
+
* @property {{ variables: Variable[], set: Map<string, Variable> }=} implicit
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @typedef {
|
|
115
|
+
* | { type: "CatchClause", node: CatchClause, parent: null }
|
|
116
|
+
* | { type: "ClassName", node: ClassDeclaration | ClassExpression, parent: null }
|
|
117
|
+
* | { type: "FunctionName", node: FunctionDeclaration | FunctionExpression, parent: null }
|
|
118
|
+
* | { type: "ImplicitGlobalVariable", node: AssignmentExpression | ForInStatement | ForOfStatement, parent: null }
|
|
119
|
+
* | { type: "ImportBinding", node: ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier, parent: ImportDeclaration }
|
|
120
|
+
* | { type: "Parameter", node: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression, parent: null }
|
|
121
|
+
* | { type: "TDZ", node: any, parent: null }
|
|
122
|
+
* | { type: "Variable", node: VariableDeclarator, parent: VariableDeclaration }
|
|
123
|
+
* } DefinitionType
|
|
124
|
+
*/
|
|
125
|
+
|
|
126
|
+
/** @typedef {DefinitionType & { name: Identifier }} Definition */
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @typedef {object} Variable
|
|
130
|
+
* @property {string} name
|
|
131
|
+
* @property {Scope} scope
|
|
132
|
+
* @property {Identifier[]} identifiers
|
|
133
|
+
* @property {Reference[]} references
|
|
134
|
+
* @property {Definition[]} defs
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @typedef {object} Reference
|
|
139
|
+
* @property {Identifier} identifier
|
|
140
|
+
* @property {Scope} from
|
|
141
|
+
* @property {Variable | null} resolved
|
|
142
|
+
* @property {Node | null} writeExpr
|
|
143
|
+
* @property {boolean} init
|
|
144
|
+
* @property {() => boolean} isWrite
|
|
145
|
+
* @property {() => boolean} isRead
|
|
146
|
+
* @property {() => boolean} isWriteOnly
|
|
147
|
+
* @property {() => boolean} isReadOnly
|
|
148
|
+
* @property {() => boolean} isReadWrite
|
|
149
|
+
*/
|
|
150
|
+
|
|
79
151
|
/** @type {WeakMap<ChunkGraph, WeakMap<Chunk, boolean>>} */
|
|
80
152
|
const chunkHasJsCache = new WeakMap();
|
|
81
153
|
|
|
82
154
|
/**
|
|
155
|
+
* Returns true, when a JS file is needed for this chunk.
|
|
83
156
|
* @param {Chunk} chunk a chunk
|
|
84
157
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
85
158
|
* @returns {boolean} true, when a JS file is needed for this chunk
|
|
@@ -99,6 +172,7 @@ const _chunkHasJs = (chunk, chunkGraph) => {
|
|
|
99
172
|
};
|
|
100
173
|
|
|
101
174
|
/**
|
|
175
|
+
* Returns true, when a JS file is needed for this chunk.
|
|
102
176
|
* @param {Chunk} chunk a chunk
|
|
103
177
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
104
178
|
* @returns {boolean} true, when a JS file is needed for this chunk
|
|
@@ -121,6 +195,7 @@ const chunkHasJs = (chunk, chunkGraph) => {
|
|
|
121
195
|
};
|
|
122
196
|
|
|
123
197
|
/**
|
|
198
|
+
* Chunk has runtime or js.
|
|
124
199
|
* @param {Chunk} chunk a chunk
|
|
125
200
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
126
201
|
* @returns {boolean} true, when a JS file is needed for this chunk
|
|
@@ -148,6 +223,7 @@ const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
|
|
|
148
223
|
};
|
|
149
224
|
|
|
150
225
|
/**
|
|
226
|
+
* Print generated code for stack.
|
|
151
227
|
* @param {Module} module a module
|
|
152
228
|
* @param {string} code the code
|
|
153
229
|
* @returns {string} generated code for the stack
|
|
@@ -158,6 +234,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
158
234
|
return `\n\nGenerated code for ${module.identifier()}\n${lines
|
|
159
235
|
.map(
|
|
160
236
|
/**
|
|
237
|
+
* Handles the callback logic for this hook.
|
|
161
238
|
* @param {string} line the line
|
|
162
239
|
* @param {number} i the index
|
|
163
240
|
* @param {string[]} _lines the lines
|
|
@@ -172,6 +249,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
172
249
|
};
|
|
173
250
|
|
|
174
251
|
/**
|
|
252
|
+
* Defines the render context type used by this module.
|
|
175
253
|
* @typedef {object} RenderContext
|
|
176
254
|
* @property {Chunk} chunk the chunk
|
|
177
255
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -183,6 +261,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
183
261
|
*/
|
|
184
262
|
|
|
185
263
|
/**
|
|
264
|
+
* Defines the main render context type used by this module.
|
|
186
265
|
* @typedef {object} MainRenderContext
|
|
187
266
|
* @property {Chunk} chunk the chunk
|
|
188
267
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -195,6 +274,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
195
274
|
*/
|
|
196
275
|
|
|
197
276
|
/**
|
|
277
|
+
* Defines the chunk render context type used by this module.
|
|
198
278
|
* @typedef {object} ChunkRenderContext
|
|
199
279
|
* @property {Chunk} chunk the chunk
|
|
200
280
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -204,9 +284,12 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
204
284
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
|
205
285
|
* @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
|
|
206
286
|
* @property {boolean | undefined} strictMode rendering in strict context
|
|
287
|
+
* @property {Module=} inlinedEntryModule entry module inlined at the chunk top level instead of the registry
|
|
288
|
+
* @property {Source=} inlinedEntrySource rendered body of the inlined entry module
|
|
207
289
|
*/
|
|
208
290
|
|
|
209
291
|
/**
|
|
292
|
+
* Defines the render bootstrap context type used by this module.
|
|
210
293
|
* @typedef {object} RenderBootstrapContext
|
|
211
294
|
* @property {Chunk} chunk the chunk
|
|
212
295
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
|
@@ -217,6 +300,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
217
300
|
*/
|
|
218
301
|
|
|
219
302
|
/**
|
|
303
|
+
* Defines the startup render context type used by this module.
|
|
220
304
|
* @typedef {object} StartupRenderContext
|
|
221
305
|
* @property {Chunk} chunk the chunk
|
|
222
306
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -231,6 +315,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
231
315
|
*/
|
|
232
316
|
|
|
233
317
|
/**
|
|
318
|
+
* Defines the module render context type used by this module.
|
|
234
319
|
* @typedef {object} ModuleRenderContext
|
|
235
320
|
* @property {Chunk} chunk the chunk
|
|
236
321
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -246,6 +331,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
246
331
|
*/
|
|
247
332
|
|
|
248
333
|
/**
|
|
334
|
+
* Defines the compilation hooks type used by this module.
|
|
249
335
|
* @typedef {object} CompilationHooks
|
|
250
336
|
* @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContent
|
|
251
337
|
* @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContainer
|
|
@@ -263,63 +349,80 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
263
349
|
* @property {SyncBailHook<[Chunk, RenderContext], boolean | void>} useSourceMap
|
|
264
350
|
*/
|
|
265
351
|
|
|
266
|
-
/**
|
|
267
|
-
|
|
352
|
+
/**
|
|
353
|
+
* Renames an inlined module's top-level declaration (and all its references) when
|
|
354
|
+
* its name is already taken in the shared startup scope, recording the chosen name
|
|
355
|
+
* in `allUsedNames`. Lets inlined modules be emitted without a per-entry/per-chunk
|
|
356
|
+
* IIFE by resolving name collisions instead of isolating each module.
|
|
357
|
+
* @param {InstanceType<typeof import("webpack-sources").ReplaceSource>} source the module source to edit
|
|
358
|
+
* @param {Program} ast the parsed module AST
|
|
359
|
+
* @param {Variable} variable the top-level variable to check/rename
|
|
360
|
+
* @param {string} moduleIdentifier the module identifier (for scope caching)
|
|
361
|
+
* @param {string} readableIdentifier the readable module identifier (for new names)
|
|
362
|
+
* @param {Set<string>} allUsedNames names already used in the shared scope (mutated)
|
|
363
|
+
* @returns {void}
|
|
364
|
+
*/
|
|
365
|
+
const renameInlinedModuleVariable = (
|
|
366
|
+
source,
|
|
367
|
+
ast,
|
|
368
|
+
variable,
|
|
369
|
+
moduleIdentifier,
|
|
370
|
+
readableIdentifier,
|
|
371
|
+
allUsedNames
|
|
372
|
+
) => {
|
|
373
|
+
/** @type {UsedNamesInScopeInfo} */
|
|
374
|
+
const usedNamesInScopeInfo = new Map();
|
|
375
|
+
/** @type {ScopeSet} */
|
|
376
|
+
const ignoredScopes = new Set();
|
|
377
|
+
|
|
378
|
+
const name = variable.name;
|
|
379
|
+
const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
|
|
380
|
+
usedNamesInScopeInfo,
|
|
381
|
+
moduleIdentifier,
|
|
382
|
+
name
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
if (allUsedNames.has(name) || usedNames.has(name)) {
|
|
386
|
+
const references = getAllReferences(variable);
|
|
387
|
+
const allIdentifiers = new Set([
|
|
388
|
+
...references.map((r) => r.identifier),
|
|
389
|
+
...variable.identifiers
|
|
390
|
+
]);
|
|
391
|
+
for (const ref of references) {
|
|
392
|
+
addScopeSymbols(ref.from, usedNames, alreadyCheckedScopes, ignoredScopes);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
const newName = findNewName(
|
|
396
|
+
name,
|
|
397
|
+
allUsedNames,
|
|
398
|
+
usedNames,
|
|
399
|
+
readableIdentifier
|
|
400
|
+
);
|
|
401
|
+
allUsedNames.add(newName);
|
|
402
|
+
for (const identifier of allIdentifiers) {
|
|
403
|
+
const r = /** @type {Range} */ (identifier.range);
|
|
404
|
+
const path = getPathInAst(ast, identifier);
|
|
405
|
+
if (path && path.length > 1) {
|
|
406
|
+
const maybeProperty =
|
|
407
|
+
path[1].type === "AssignmentPattern" && path[1].left === path[0]
|
|
408
|
+
? path[2]
|
|
409
|
+
: path[1];
|
|
410
|
+
if (maybeProperty.type === "Property" && maybeProperty.shorthand) {
|
|
411
|
+
source.insert(r[1], `: ${newName}`);
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
source.replace(r[0], r[1] - 1, newName);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
allUsedNames.add(name);
|
|
419
|
+
};
|
|
268
420
|
|
|
269
421
|
const PLUGIN_NAME = "JavascriptModulesPlugin";
|
|
270
422
|
|
|
271
423
|
/** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
|
|
272
424
|
|
|
273
425
|
class JavascriptModulesPlugin {
|
|
274
|
-
/**
|
|
275
|
-
* @param {Compilation} compilation the compilation
|
|
276
|
-
* @returns {CompilationHooks} the attached hooks
|
|
277
|
-
*/
|
|
278
|
-
static getCompilationHooks(compilation) {
|
|
279
|
-
if (!(compilation instanceof Compilation)) {
|
|
280
|
-
throw new TypeError(
|
|
281
|
-
"The 'compilation' argument must be an instance of Compilation"
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
let hooks = compilationHooksMap.get(compilation);
|
|
285
|
-
if (hooks === undefined) {
|
|
286
|
-
hooks = {
|
|
287
|
-
renderModuleContent: new SyncWaterfallHook([
|
|
288
|
-
"source",
|
|
289
|
-
"module",
|
|
290
|
-
"moduleRenderContext"
|
|
291
|
-
]),
|
|
292
|
-
renderModuleContainer: new SyncWaterfallHook([
|
|
293
|
-
"source",
|
|
294
|
-
"module",
|
|
295
|
-
"moduleRenderContext"
|
|
296
|
-
]),
|
|
297
|
-
renderModulePackage: new SyncWaterfallHook([
|
|
298
|
-
"source",
|
|
299
|
-
"module",
|
|
300
|
-
"moduleRenderContext"
|
|
301
|
-
]),
|
|
302
|
-
render: new SyncWaterfallHook(["source", "renderContext"]),
|
|
303
|
-
renderContent: new SyncWaterfallHook(["source", "renderContext"]),
|
|
304
|
-
renderStartup: new SyncWaterfallHook([
|
|
305
|
-
"source",
|
|
306
|
-
"module",
|
|
307
|
-
"startupRenderContext"
|
|
308
|
-
]),
|
|
309
|
-
renderChunk: new SyncWaterfallHook(["source", "renderContext"]),
|
|
310
|
-
renderMain: new SyncWaterfallHook(["source", "renderContext"]),
|
|
311
|
-
renderRequire: new SyncWaterfallHook(["code", "renderContext"]),
|
|
312
|
-
inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
|
|
313
|
-
embedInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
|
|
314
|
-
strictRuntimeBailout: new SyncBailHook(["renderContext"]),
|
|
315
|
-
chunkHash: new SyncHook(["chunk", "hash", "context"]),
|
|
316
|
-
useSourceMap: new SyncBailHook(["chunk", "renderContext"])
|
|
317
|
-
};
|
|
318
|
-
compilationHooksMap.set(compilation, hooks);
|
|
319
|
-
}
|
|
320
|
-
return hooks;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
426
|
constructor(options = {}) {
|
|
324
427
|
this.options = options;
|
|
325
428
|
/** @type {WeakMap<Source, { source: Source, needModule: boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
|
|
@@ -327,7 +430,7 @@ class JavascriptModulesPlugin {
|
|
|
327
430
|
}
|
|
328
431
|
|
|
329
432
|
/**
|
|
330
|
-
*
|
|
433
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
331
434
|
* @param {Compiler} compiler the compiler instance
|
|
332
435
|
* @returns {void}
|
|
333
436
|
*/
|
|
@@ -342,21 +445,44 @@ class JavascriptModulesPlugin {
|
|
|
342
445
|
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
343
446
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
344
447
|
]) {
|
|
448
|
+
normalModuleFactory.hooks.createModuleClass
|
|
449
|
+
.for(type)
|
|
450
|
+
.tap(
|
|
451
|
+
PLUGIN_NAME,
|
|
452
|
+
(createData, _resolveData) => new JavascriptModule(createData)
|
|
453
|
+
);
|
|
345
454
|
normalModuleFactory.hooks.createParser
|
|
346
455
|
.for(type)
|
|
347
456
|
.tap(PLUGIN_NAME, (options) => {
|
|
348
457
|
switch (type) {
|
|
349
458
|
case JAVASCRIPT_MODULE_TYPE_AUTO: {
|
|
350
|
-
return new JavascriptParser("auto", {
|
|
459
|
+
return new JavascriptParser("auto", {
|
|
460
|
+
parse: options.parse,
|
|
461
|
+
typescript: options.typescript,
|
|
462
|
+
importPhases: Boolean(
|
|
463
|
+
options.deferImport || options.sourceImport
|
|
464
|
+
),
|
|
465
|
+
strictModeViolations: options.strictModeViolations
|
|
466
|
+
});
|
|
351
467
|
}
|
|
352
468
|
case JAVASCRIPT_MODULE_TYPE_DYNAMIC: {
|
|
353
469
|
return new JavascriptParser("script", {
|
|
354
|
-
parse: options.parse
|
|
470
|
+
parse: options.parse,
|
|
471
|
+
typescript: options.typescript,
|
|
472
|
+
importPhases: Boolean(
|
|
473
|
+
options.deferImport || options.sourceImport
|
|
474
|
+
),
|
|
475
|
+
strictModeViolations: options.strictModeViolations
|
|
355
476
|
});
|
|
356
477
|
}
|
|
357
478
|
case JAVASCRIPT_MODULE_TYPE_ESM: {
|
|
358
479
|
return new JavascriptParser("module", {
|
|
359
|
-
parse: options.parse
|
|
480
|
+
parse: options.parse,
|
|
481
|
+
typescript: options.typescript,
|
|
482
|
+
importPhases: Boolean(
|
|
483
|
+
options.deferImport || options.sourceImport
|
|
484
|
+
),
|
|
485
|
+
strictModeViolations: options.strictModeViolations
|
|
360
486
|
});
|
|
361
487
|
}
|
|
362
488
|
}
|
|
@@ -554,11 +680,8 @@ class JavascriptModulesPlugin {
|
|
|
554
680
|
}
|
|
555
681
|
xor.updateHash(hash);
|
|
556
682
|
}
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
digest,
|
|
560
|
-
hashDigestLength
|
|
561
|
-
);
|
|
683
|
+
[chunk.contentHash.javascript, chunk.contentHashFull.javascript] =
|
|
684
|
+
digestNonNumericOnlyWithFull(hash, hashDigest, hashDigestLength);
|
|
562
685
|
});
|
|
563
686
|
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
|
564
687
|
PLUGIN_NAME,
|
|
@@ -642,15 +765,22 @@ class JavascriptModulesPlugin {
|
|
|
642
765
|
}
|
|
643
766
|
|
|
644
767
|
/**
|
|
768
|
+
* Gets chunk filename template.
|
|
645
769
|
* @param {Chunk} chunk chunk
|
|
646
770
|
* @param {OutputOptions} outputOptions output options
|
|
647
|
-
* @returns {
|
|
771
|
+
* @returns {ChunkFilenameTemplate} used filename template
|
|
648
772
|
*/
|
|
649
773
|
static getChunkFilenameTemplate(chunk, outputOptions) {
|
|
650
774
|
if (chunk.filenameTemplate) {
|
|
651
775
|
return chunk.filenameTemplate;
|
|
652
776
|
} else if (chunk instanceof HotUpdateChunk) {
|
|
653
777
|
return outputOptions.hotUpdateChunkFilename;
|
|
778
|
+
}
|
|
779
|
+
const entryOptions = chunk.getEntryOptions();
|
|
780
|
+
// A worker entry (`new Worker` or `entry.worker`) uses workerChunkFilename;
|
|
781
|
+
// chunks it loads internally keep `chunkFilename`
|
|
782
|
+
if (entryOptions !== undefined && entryOptions.worker) {
|
|
783
|
+
return outputOptions.workerChunkFilename;
|
|
654
784
|
} else if (chunk.canBeInitial()) {
|
|
655
785
|
return outputOptions.filename;
|
|
656
786
|
}
|
|
@@ -658,6 +788,7 @@ class JavascriptModulesPlugin {
|
|
|
658
788
|
}
|
|
659
789
|
|
|
660
790
|
/**
|
|
791
|
+
* Renders the newly generated source from rendering.
|
|
661
792
|
* @param {Module} module the rendered module
|
|
662
793
|
* @param {ModuleRenderContext} renderContext options object
|
|
663
794
|
* @param {CompilationHooks} hooks hooks
|
|
@@ -797,6 +928,7 @@ class JavascriptModulesPlugin {
|
|
|
797
928
|
}
|
|
798
929
|
|
|
799
930
|
/**
|
|
931
|
+
* Renders the rendered source.
|
|
800
932
|
* @param {RenderContext} renderContext the render context
|
|
801
933
|
* @param {CompilationHooks} hooks hooks
|
|
802
934
|
* @returns {Source} the rendered source
|
|
@@ -828,10 +960,30 @@ class JavascriptModulesPlugin {
|
|
|
828
960
|
chunkInitFragments: [],
|
|
829
961
|
strictMode: allStrict
|
|
830
962
|
};
|
|
963
|
+
// ESM entry chunk whose runtime lives in a separate chunk: inline the
|
|
964
|
+
// single entry module at the top level (instead of the module registry)
|
|
965
|
+
// so its own top-level declarations stay live ESM bindings for consumers.
|
|
966
|
+
const inlinedEntryModule = this._getEsmEntryModuleToInline(
|
|
967
|
+
renderContext,
|
|
968
|
+
allModules
|
|
969
|
+
);
|
|
970
|
+
let registryModules = allModules;
|
|
971
|
+
if (inlinedEntryModule) {
|
|
972
|
+
const inlinedEntrySource = this.renderModule(
|
|
973
|
+
inlinedEntryModule,
|
|
974
|
+
{ ...chunkRenderContext, factory: false },
|
|
975
|
+
hooks
|
|
976
|
+
);
|
|
977
|
+
if (inlinedEntrySource) {
|
|
978
|
+
registryModules = allModules.filter((m) => m !== inlinedEntryModule);
|
|
979
|
+
chunkRenderContext.inlinedEntryModule = inlinedEntryModule;
|
|
980
|
+
chunkRenderContext.inlinedEntrySource = inlinedEntrySource;
|
|
981
|
+
}
|
|
982
|
+
}
|
|
831
983
|
const moduleSources =
|
|
832
984
|
Template.renderChunkModules(
|
|
833
985
|
chunkRenderContext,
|
|
834
|
-
|
|
986
|
+
registryModules,
|
|
835
987
|
(module, renderInObject) =>
|
|
836
988
|
this.renderModule(
|
|
837
989
|
module,
|
|
@@ -875,6 +1027,93 @@ class JavascriptModulesPlugin {
|
|
|
875
1027
|
}
|
|
876
1028
|
|
|
877
1029
|
/**
|
|
1030
|
+
* Returns the chunk's single entry module when it can be inlined at the top
|
|
1031
|
+
* level of an ESM output chunk (instead of the module registry), which keeps
|
|
1032
|
+
* its exports as live ESM bindings. Only a self-contained ESM entry whose
|
|
1033
|
+
* top-level declarations can be lifted into the chunk scope qualifies;
|
|
1034
|
+
* otherwise `undefined` is returned and the registry path is used.
|
|
1035
|
+
* @param {RenderContext} renderContext render context
|
|
1036
|
+
* @param {Module[]} allModules all javascript modules of the chunk
|
|
1037
|
+
* @returns {Module | undefined} the entry module to inline, if any
|
|
1038
|
+
*/
|
|
1039
|
+
_getEsmEntryModuleToInline(renderContext, allModules) {
|
|
1040
|
+
const {
|
|
1041
|
+
chunk,
|
|
1042
|
+
chunkGraph,
|
|
1043
|
+
moduleGraph,
|
|
1044
|
+
runtimeTemplate,
|
|
1045
|
+
codeGenerationResults
|
|
1046
|
+
} = renderContext;
|
|
1047
|
+
|
|
1048
|
+
// Only a single ESM entry whose runtime lives in a separate chunk.
|
|
1049
|
+
if (
|
|
1050
|
+
!runtimeTemplate.isModule() ||
|
|
1051
|
+
chunk.hasRuntime() ||
|
|
1052
|
+
chunkGraph.getNumberOfEntryModules(chunk) !== 1
|
|
1053
|
+
) {
|
|
1054
|
+
return undefined;
|
|
1055
|
+
}
|
|
1056
|
+
const [entryEntry] =
|
|
1057
|
+
chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk);
|
|
1058
|
+
const [entryModule, entrypoint] = /** @type {[Module, Entrypoint]} */ (
|
|
1059
|
+
entryEntry
|
|
1060
|
+
);
|
|
1061
|
+
|
|
1062
|
+
// Module-local safety: the body is lifted verbatim, so it must use the
|
|
1063
|
+
// standard exports binding (not `module`/`this`) and expose top-level
|
|
1064
|
+
// declarations whose names can't collide with runtime/startup identifiers.
|
|
1065
|
+
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
|
1066
|
+
entryModule,
|
|
1067
|
+
chunk.runtime
|
|
1068
|
+
);
|
|
1069
|
+
if (
|
|
1070
|
+
entryModule.exportsArgument !== RuntimeGlobals.exports ||
|
|
1071
|
+
runtimeRequirements.has(RuntimeGlobals.module) ||
|
|
1072
|
+
runtimeRequirements.has(RuntimeGlobals.thisAsExports)
|
|
1073
|
+
) {
|
|
1074
|
+
return undefined;
|
|
1075
|
+
}
|
|
1076
|
+
const topLevelDeclarations =
|
|
1077
|
+
codeGenerationResults.getData(
|
|
1078
|
+
entryModule,
|
|
1079
|
+
chunk.runtime,
|
|
1080
|
+
"topLevelDeclarations"
|
|
1081
|
+
) ||
|
|
1082
|
+
(entryModule.buildInfo && entryModule.buildInfo.topLevelDeclarations);
|
|
1083
|
+
if (!topLevelDeclarations || topLevelDeclarations.size === 0) {
|
|
1084
|
+
return undefined;
|
|
1085
|
+
}
|
|
1086
|
+
for (const name of topLevelDeclarations) {
|
|
1087
|
+
if (RESERVED_NAMES.has(name) || name.startsWith("__webpack_")) {
|
|
1088
|
+
return undefined;
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
// Self-contained: the entry must not be imported by another module (which
|
|
1093
|
+
// needs it in the registry), and must not require other chunks or
|
|
1094
|
+
// `dependOn` parents to execute first.
|
|
1095
|
+
if (
|
|
1096
|
+
entrypoint.getParents().length > 0 ||
|
|
1097
|
+
getAllChunks(entrypoint, chunk, entrypoint.getRuntimeChunk()).size > 0
|
|
1098
|
+
) {
|
|
1099
|
+
return undefined;
|
|
1100
|
+
}
|
|
1101
|
+
const referenced = someInIterable(
|
|
1102
|
+
moduleGraph.getIncomingConnectionsByOriginModule(entryModule),
|
|
1103
|
+
([originModule, connections]) =>
|
|
1104
|
+
originModule &&
|
|
1105
|
+
originModule !== entryModule &&
|
|
1106
|
+
connections.some((c) => c.isTargetActive(chunk.runtime)) &&
|
|
1107
|
+
someInIterable(
|
|
1108
|
+
chunkGraph.getModuleRuntimes(originModule),
|
|
1109
|
+
(runtime) => intersectRuntime(runtime, chunk.runtime) !== undefined
|
|
1110
|
+
)
|
|
1111
|
+
);
|
|
1112
|
+
return referenced ? undefined : entryModule;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
/**
|
|
1116
|
+
* Renders the newly generated source from rendering.
|
|
878
1117
|
* @param {MainRenderContext} renderContext options object
|
|
879
1118
|
* @param {CompilationHooks} hooks hooks
|
|
880
1119
|
* @param {Compilation} compilation the compilation
|
|
@@ -926,9 +1165,7 @@ class JavascriptModulesPlugin {
|
|
|
926
1165
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
|
927
1166
|
if (strictBailout) {
|
|
928
1167
|
source.add(
|
|
929
|
-
`${
|
|
930
|
-
prefix
|
|
931
|
-
}// runtime can't be in strict mode because ${strictBailout}.\n`
|
|
1168
|
+
`${prefix}// runtime can't be in strict mode because ${strictBailout}.\n`
|
|
932
1169
|
);
|
|
933
1170
|
} else {
|
|
934
1171
|
allStrict = true;
|
|
@@ -1052,10 +1289,8 @@ class JavascriptModulesPlugin {
|
|
|
1052
1289
|
|
|
1053
1290
|
const iife = innerStrict
|
|
1054
1291
|
? "it needs to be in strict mode."
|
|
1055
|
-
: inlinedModules.size > 1
|
|
1056
|
-
?
|
|
1057
|
-
// to make a better decision
|
|
1058
|
-
"it needs to be isolated against other entry modules."
|
|
1292
|
+
: inlinedModules.size > 1 && !renamedInlinedModule
|
|
1293
|
+
? "it needs to be isolated against other entry modules."
|
|
1059
1294
|
: chunkModules && !renamedInlinedModule
|
|
1060
1295
|
? "it needs to be isolated against other modules in the chunk."
|
|
1061
1296
|
: exports && !webpackExports
|
|
@@ -1099,10 +1334,14 @@ class JavascriptModulesPlugin {
|
|
|
1099
1334
|
}
|
|
1100
1335
|
if (exports) {
|
|
1101
1336
|
if (m !== lastInlinedModule) {
|
|
1102
|
-
startupSource.add(
|
|
1337
|
+
startupSource.add(
|
|
1338
|
+
`${runtimeTemplate.renderLet()} ${m.exportsArgument} = {};\n`
|
|
1339
|
+
);
|
|
1103
1340
|
} else if (m.exportsArgument !== RuntimeGlobals.exports) {
|
|
1104
1341
|
startupSource.add(
|
|
1105
|
-
|
|
1342
|
+
`${runtimeTemplate.renderLet()} ${m.exportsArgument} = ${
|
|
1343
|
+
RuntimeGlobals.exports
|
|
1344
|
+
};\n`
|
|
1106
1345
|
);
|
|
1107
1346
|
}
|
|
1108
1347
|
}
|
|
@@ -1145,7 +1384,7 @@ class JavascriptModulesPlugin {
|
|
|
1145
1384
|
}
|
|
1146
1385
|
if (startupRenderContext.needExportsDeclaration) {
|
|
1147
1386
|
renderedStartup = new ConcatSource(
|
|
1148
|
-
|
|
1387
|
+
`${runtimeTemplate.renderLet()} ${RuntimeGlobals.exports} = {};\n`,
|
|
1149
1388
|
renderedStartup
|
|
1150
1389
|
);
|
|
1151
1390
|
}
|
|
@@ -1240,6 +1479,7 @@ class JavascriptModulesPlugin {
|
|
|
1240
1479
|
}
|
|
1241
1480
|
|
|
1242
1481
|
/**
|
|
1482
|
+
* Updates hash with bootstrap.
|
|
1243
1483
|
* @param {Hash} hash the hash to be updated
|
|
1244
1484
|
* @param {RenderBootstrapContext} renderContext options object
|
|
1245
1485
|
* @param {CompilationHooks} hooks hooks
|
|
@@ -1260,6 +1500,7 @@ class JavascriptModulesPlugin {
|
|
|
1260
1500
|
}
|
|
1261
1501
|
|
|
1262
1502
|
/**
|
|
1503
|
+
* Renders the generated source of the bootstrap code.
|
|
1263
1504
|
* @param {RenderBootstrapContext} renderContext options object
|
|
1264
1505
|
* @param {CompilationHooks} hooks hooks
|
|
1265
1506
|
* @returns {Bootstrap} the generated source of the bootstrap code
|
|
@@ -1321,9 +1562,10 @@ class JavascriptModulesPlugin {
|
|
|
1321
1562
|
result.allowInlineStartup = false;
|
|
1322
1563
|
}
|
|
1323
1564
|
|
|
1565
|
+
const bootstrapCst = runtimeTemplate.renderConst();
|
|
1324
1566
|
if (useRequire || moduleCache) {
|
|
1325
1567
|
buf.push("// The module cache");
|
|
1326
|
-
buf.push(
|
|
1568
|
+
buf.push(`${bootstrapCst} __webpack_module_cache__ = {};`);
|
|
1327
1569
|
buf.push("");
|
|
1328
1570
|
}
|
|
1329
1571
|
|
|
@@ -1333,7 +1575,16 @@ class JavascriptModulesPlugin {
|
|
|
1333
1575
|
// This requires all deferred imports to a module can get the module export object before the module
|
|
1334
1576
|
// is evaluated.
|
|
1335
1577
|
buf.push("// The deferred module cache");
|
|
1336
|
-
buf.push(
|
|
1578
|
+
buf.push(`${bootstrapCst} __webpack_module_deferred_exports__ = {};`);
|
|
1579
|
+
// Per the TC39 import-defer spec, every defer-import call site for
|
|
1580
|
+
// the same module must yield the same Deferred Module Namespace
|
|
1581
|
+
// Exotic Object (and a distinct one from any eager namespace).
|
|
1582
|
+
// Cache the deferred namespace proxy here so calls from different
|
|
1583
|
+
// files share identity.
|
|
1584
|
+
buf.push("// The deferred namespace cache");
|
|
1585
|
+
buf.push(
|
|
1586
|
+
`${bootstrapCst} __webpack_module_deferred_namespace_cache__ = {};`
|
|
1587
|
+
);
|
|
1337
1588
|
buf.push("");
|
|
1338
1589
|
}
|
|
1339
1590
|
|
|
@@ -1345,7 +1596,7 @@ class JavascriptModulesPlugin {
|
|
|
1345
1596
|
buf.push("");
|
|
1346
1597
|
} else if (runtimeRequirements.has(RuntimeGlobals.requireScope)) {
|
|
1347
1598
|
buf.push("// The require scope");
|
|
1348
|
-
buf.push(
|
|
1599
|
+
buf.push(`${bootstrapCst} ${RuntimeGlobals.require} = {};`);
|
|
1349
1600
|
buf.push("");
|
|
1350
1601
|
}
|
|
1351
1602
|
|
|
@@ -1481,9 +1732,17 @@ class JavascriptModulesPlugin {
|
|
|
1481
1732
|
result.allowInlineStartup = false;
|
|
1482
1733
|
}
|
|
1483
1734
|
|
|
1735
|
+
// `__webpack_exports__` may be reassigned later — by the
|
|
1736
|
+
// `onChunksLoaded` wrapper below, by an inlined entry
|
|
1737
|
+
// module that uses top-level `await` (the emitted
|
|
1738
|
+
// bridge reassigns `__webpack_exports__` to the awaited
|
|
1739
|
+
// value), or by other downstream codegen. Always declare
|
|
1740
|
+
// with `let` (or `var` if `let` is unsupported) so
|
|
1741
|
+
// reassignment is allowed.
|
|
1742
|
+
const exportsDecl = runtimeTemplate.renderLet();
|
|
1484
1743
|
if (chunks.length > 0) {
|
|
1485
1744
|
buf2.push(
|
|
1486
|
-
`${i === 0 ?
|
|
1745
|
+
`${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
|
|
1487
1746
|
RuntimeGlobals.onChunksLoaded
|
|
1488
1747
|
}(undefined, ${JSON.stringify(
|
|
1489
1748
|
chunks.map((c) => c.id)
|
|
@@ -1493,12 +1752,14 @@ class JavascriptModulesPlugin {
|
|
|
1493
1752
|
);
|
|
1494
1753
|
} else if (useRequire) {
|
|
1495
1754
|
buf2.push(
|
|
1496
|
-
`${i === 0 ?
|
|
1755
|
+
`${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
|
|
1497
1756
|
RuntimeGlobals.require
|
|
1498
1757
|
}(${moduleIdExpr});`
|
|
1499
1758
|
);
|
|
1500
1759
|
} else {
|
|
1501
|
-
if (i === 0)
|
|
1760
|
+
if (i === 0) {
|
|
1761
|
+
buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
|
|
1762
|
+
}
|
|
1502
1763
|
const needThisAsExports = entryRuntimeRequirements.has(
|
|
1503
1764
|
RuntimeGlobals.thisAsExports
|
|
1504
1765
|
);
|
|
@@ -1520,9 +1781,13 @@ class JavascriptModulesPlugin {
|
|
|
1520
1781
|
(() => {
|
|
1521
1782
|
if (needThisAsExports) {
|
|
1522
1783
|
const comma = args.length ? "," : "";
|
|
1523
|
-
return `__webpack_modules__[${moduleIdExpr}].call(${
|
|
1784
|
+
return `__webpack_modules__[${moduleIdExpr}].call(${
|
|
1785
|
+
RuntimeGlobals.exports
|
|
1786
|
+
}${comma}${args.join(",")});`;
|
|
1524
1787
|
}
|
|
1525
|
-
return `__webpack_modules__[${moduleIdExpr}](${args.join(
|
|
1788
|
+
return `__webpack_modules__[${moduleIdExpr}](${args.join(
|
|
1789
|
+
","
|
|
1790
|
+
)});`;
|
|
1526
1791
|
})()
|
|
1527
1792
|
)
|
|
1528
1793
|
);
|
|
@@ -1605,29 +1870,30 @@ class JavascriptModulesPlugin {
|
|
|
1605
1870
|
}
|
|
1606
1871
|
|
|
1607
1872
|
/**
|
|
1873
|
+
* Renders the generated source of the require function.
|
|
1608
1874
|
* @param {RenderBootstrapContext} renderContext options object
|
|
1609
1875
|
* @param {CompilationHooks} hooks hooks
|
|
1610
1876
|
* @returns {string} the generated source of the require function
|
|
1611
1877
|
*/
|
|
1612
1878
|
renderRequire(renderContext, hooks) {
|
|
1613
|
-
const {
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
} = renderContext;
|
|
1879
|
+
const { chunk, chunkGraph, runtimeTemplate } = renderContext;
|
|
1880
|
+
const { outputOptions } = runtimeTemplate;
|
|
1881
|
+
const cst = runtimeTemplate.renderConst();
|
|
1882
|
+
const lt = runtimeTemplate.renderLet();
|
|
1618
1883
|
const runtimeRequirements = chunkGraph.getTreeRuntimeRequirements(chunk);
|
|
1619
1884
|
|
|
1620
1885
|
/**
|
|
1886
|
+
* Renders missing module error.
|
|
1621
1887
|
* @param {string} condition guard expression
|
|
1622
1888
|
* @returns {string[]} source
|
|
1623
1889
|
*/
|
|
1624
1890
|
const renderMissingModuleError = (condition) =>
|
|
1625
|
-
outputOptions.
|
|
1891
|
+
outputOptions.strictModuleResolution
|
|
1626
1892
|
? [
|
|
1627
1893
|
`if (${condition}) {`,
|
|
1628
1894
|
Template.indent([
|
|
1629
1895
|
"delete __webpack_module_cache__[moduleId];",
|
|
1630
|
-
|
|
1896
|
+
`${cst} e = new Error("Cannot find module '" + moduleId + "'");`,
|
|
1631
1897
|
"e.code = 'MODULE_NOT_FOUND';",
|
|
1632
1898
|
"throw e;"
|
|
1633
1899
|
]),
|
|
@@ -1639,7 +1905,7 @@ class JavascriptModulesPlugin {
|
|
|
1639
1905
|
RuntimeGlobals.interceptModuleExecution
|
|
1640
1906
|
)
|
|
1641
1907
|
? Template.asString([
|
|
1642
|
-
|
|
1908
|
+
`${cst} execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: ${RuntimeGlobals.require} };`,
|
|
1643
1909
|
`${RuntimeGlobals.interceptModuleExecution}.forEach(function(handler) { handler(execOptions); });`,
|
|
1644
1910
|
...renderMissingModuleError("!execOptions.factory"),
|
|
1645
1911
|
"module = execOptions.module;",
|
|
@@ -1661,11 +1927,29 @@ class JavascriptModulesPlugin {
|
|
|
1661
1927
|
const needModuleDefer = runtimeRequirements.has(
|
|
1662
1928
|
RuntimeGlobals.makeDeferredNamespaceObject
|
|
1663
1929
|
);
|
|
1930
|
+
// Both deferred-namespace runtimes re-invoke `__webpack_require__` on
|
|
1931
|
+
// access, so a module's evaluation error must be retained and re-thrown
|
|
1932
|
+
// (a Cyclic Module Record's [[EvaluationError]]); the optimized variant
|
|
1933
|
+
// does not use `__webpack_module_deferred_exports__`, so it is tracked
|
|
1934
|
+
// separately from `needModuleDefer`.
|
|
1935
|
+
const needModuleDeferAny =
|
|
1936
|
+
needModuleDefer ||
|
|
1937
|
+
runtimeRequirements.has(
|
|
1938
|
+
RuntimeGlobals.makeOptimizedDeferredNamespaceObject
|
|
1939
|
+
);
|
|
1940
|
+
const needModuleErrorCaching =
|
|
1941
|
+
outputOptions.strictModuleErrorHandling || needModuleDeferAny;
|
|
1942
|
+
// `module` is reassigned by the interceptModuleExecution path; use `let`.
|
|
1943
|
+
const moduleDecl = runtimeRequirements.has(
|
|
1944
|
+
RuntimeGlobals.interceptModuleExecution
|
|
1945
|
+
)
|
|
1946
|
+
? lt
|
|
1947
|
+
: cst;
|
|
1664
1948
|
const content = Template.asString([
|
|
1665
1949
|
"// Check if module is in cache",
|
|
1666
|
-
|
|
1950
|
+
`${cst} cachedModule = __webpack_module_cache__[moduleId];`,
|
|
1667
1951
|
"if (cachedModule !== undefined) {",
|
|
1668
|
-
|
|
1952
|
+
needModuleErrorCaching
|
|
1669
1953
|
? Template.indent([
|
|
1670
1954
|
"if (cachedModule.error !== undefined) throw cachedModule.error;",
|
|
1671
1955
|
"return cachedModule.exports;"
|
|
@@ -1673,7 +1957,7 @@ class JavascriptModulesPlugin {
|
|
|
1673
1957
|
: Template.indent("return cachedModule.exports;"),
|
|
1674
1958
|
"}",
|
|
1675
1959
|
"// Create a new module (and put it into the cache)",
|
|
1676
|
-
|
|
1960
|
+
`${moduleDecl} module = __webpack_module_cache__[moduleId] = {`,
|
|
1677
1961
|
Template.indent([
|
|
1678
1962
|
needModuleId ? "id: moduleId," : "// no module.id needed",
|
|
1679
1963
|
needModuleLoaded ? "loaded: false," : "// no module.loaded needed",
|
|
@@ -1683,10 +1967,10 @@ class JavascriptModulesPlugin {
|
|
|
1683
1967
|
]),
|
|
1684
1968
|
"};",
|
|
1685
1969
|
"",
|
|
1686
|
-
outputOptions.strictModuleExceptionHandling
|
|
1970
|
+
outputOptions.strictModuleExceptionHandling && !needModuleErrorCaching
|
|
1687
1971
|
? Template.asString([
|
|
1688
1972
|
"// Execute the module function",
|
|
1689
|
-
|
|
1973
|
+
`${lt} threw = true;`,
|
|
1690
1974
|
"try {",
|
|
1691
1975
|
Template.indent([
|
|
1692
1976
|
moduleExecution,
|
|
@@ -1701,20 +1985,27 @@ class JavascriptModulesPlugin {
|
|
|
1701
1985
|
]),
|
|
1702
1986
|
"}"
|
|
1703
1987
|
])
|
|
1704
|
-
:
|
|
1988
|
+
: needModuleErrorCaching
|
|
1705
1989
|
? Template.asString([
|
|
1706
1990
|
"// Execute the module function",
|
|
1991
|
+
// Mark the module as evaluating so a deferred namespace that
|
|
1992
|
+
// forces evaluation of an already-evaluating module can throw
|
|
1993
|
+
// instead of exposing its partial exports.
|
|
1994
|
+
...(needModuleDeferAny ? ["module.evaluating = true;"] : []),
|
|
1707
1995
|
"try {",
|
|
1708
|
-
Template.indent(
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
),
|
|
1996
|
+
Template.indent([
|
|
1997
|
+
moduleExecution,
|
|
1998
|
+
...(needModuleDefer
|
|
1999
|
+
? ["delete __webpack_module_deferred_exports__[moduleId];"]
|
|
2000
|
+
: []),
|
|
2001
|
+
...(needModuleDeferAny ? ["module.evaluating = false;"] : [])
|
|
2002
|
+
]),
|
|
1716
2003
|
"} catch(e) {",
|
|
1717
|
-
Template.indent([
|
|
2004
|
+
Template.indent([
|
|
2005
|
+
...(needModuleDeferAny ? ["module.evaluating = false;"] : []),
|
|
2006
|
+
"module.error = e;",
|
|
2007
|
+
"throw e;"
|
|
2008
|
+
]),
|
|
1718
2009
|
"}"
|
|
1719
2010
|
])
|
|
1720
2011
|
: Template.asString([
|
|
@@ -1742,6 +2033,7 @@ class JavascriptModulesPlugin {
|
|
|
1742
2033
|
}
|
|
1743
2034
|
|
|
1744
2035
|
/**
|
|
2036
|
+
* Get renamed inline module.
|
|
1745
2037
|
* @param {Compilation} compilation compilation
|
|
1746
2038
|
* @param {Module[]} allModules allModules
|
|
1747
2039
|
* @param {MainRenderContext} renderContext renderContext
|
|
@@ -1767,11 +2059,11 @@ class JavascriptModulesPlugin {
|
|
|
1767
2059
|
allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
|
|
1768
2060
|
const isMultipleEntries = inlinedModules.size > 1;
|
|
1769
2061
|
const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
|
|
1770
|
-
//
|
|
1771
|
-
//
|
|
1772
|
-
//
|
|
1773
|
-
//
|
|
1774
|
-
if (
|
|
2062
|
+
// This step is before the IIFE reason calculation; it only runs for the
|
|
2063
|
+
// cases whose IIFE reason it can remove: multiple inlined entry modules, or a
|
|
2064
|
+
// single inlined entry alongside other chunk modules. The remaining reason
|
|
2065
|
+
// ('it uses a non-standard name for the exports') is not handled here.
|
|
2066
|
+
if (innerStrict || (!isMultipleEntries && !singleEntryWithModules)) {
|
|
1775
2067
|
return false;
|
|
1776
2068
|
}
|
|
1777
2069
|
|
|
@@ -1784,6 +2076,8 @@ class JavascriptModulesPlugin {
|
|
|
1784
2076
|
const inlinedModulesToInfo = new Map();
|
|
1785
2077
|
/** @type {Set<string>} */
|
|
1786
2078
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
|
2079
|
+
/** @type {Map<Module, Source>} */
|
|
2080
|
+
const inlinedModuleSources = new Map();
|
|
1787
2081
|
|
|
1788
2082
|
for (const m of allModules) {
|
|
1789
2083
|
const isInlinedModule = inlinedModules && inlinedModules.has(m);
|
|
@@ -1798,13 +2092,24 @@ class JavascriptModulesPlugin {
|
|
|
1798
2092
|
);
|
|
1799
2093
|
|
|
1800
2094
|
if (!moduleSource) continue;
|
|
2095
|
+
if (isInlinedModule) {
|
|
2096
|
+
// Parsing the inlined entry (often the whole concatenated app) is
|
|
2097
|
+
// expensive; defer it until we know renaming is actually needed.
|
|
2098
|
+
inlinedModuleSources.set(m, moduleSource);
|
|
2099
|
+
continue;
|
|
2100
|
+
}
|
|
1801
2101
|
const code = /** @type {string} */ (moduleSource.source());
|
|
1802
2102
|
|
|
2103
|
+
const { experiments } = compilation.options;
|
|
1803
2104
|
const { ast } = JavascriptParser._parse(
|
|
1804
2105
|
code,
|
|
1805
2106
|
{
|
|
1806
2107
|
sourceType: "auto",
|
|
1807
|
-
ranges: true
|
|
2108
|
+
ranges: true,
|
|
2109
|
+
// generated code contains phase imports when the experiments are on
|
|
2110
|
+
importPhases: Boolean(
|
|
2111
|
+
experiments.deferImport || experiments.sourceImport
|
|
2112
|
+
)
|
|
1808
2113
|
},
|
|
1809
2114
|
JavascriptParser._getModuleParseFunction(compilation, m)
|
|
1810
2115
|
);
|
|
@@ -1817,22 +2122,93 @@ class JavascriptModulesPlugin {
|
|
|
1817
2122
|
});
|
|
1818
2123
|
|
|
1819
2124
|
const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
}
|
|
1832
|
-
|
|
1833
|
-
|
|
2125
|
+
for (const ref of globalScope.through) {
|
|
2126
|
+
nonInlinedModuleThroughIdentifiers.add(ref.identifier.name);
|
|
2127
|
+
}
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
// Fast path: codegen reports each inlined entry's rendered top-level
|
|
2131
|
+
// declarations and free names (post-concatenation), so when no declaration
|
|
2132
|
+
// collides with a free name of any other module, another entry's
|
|
2133
|
+
// declarations, or a reserved name, no renaming is needed and the entries
|
|
2134
|
+
// don't have to be parsed at all.
|
|
2135
|
+
fastPath: {
|
|
2136
|
+
const { codeGenerationResults, chunk } = renderContext;
|
|
2137
|
+
/** @type {Set<string>} */
|
|
2138
|
+
const usedNames = new Set(nonInlinedModuleThroughIdentifiers);
|
|
2139
|
+
for (const name of RESERVED_NAMES) usedNames.add(name);
|
|
2140
|
+
/** @type {Set<string>[]} */
|
|
2141
|
+
const declarationsList = [];
|
|
2142
|
+
for (const m of inlinedModuleSources.keys()) {
|
|
2143
|
+
if (!codeGenerationResults.has(m, chunk.runtime)) break fastPath;
|
|
2144
|
+
const result = codeGenerationResults.get(m, chunk.runtime);
|
|
2145
|
+
const data = result.data;
|
|
2146
|
+
if (!data) break fastPath;
|
|
2147
|
+
const declarations = data.get("topLevelDeclarations");
|
|
2148
|
+
if (!declarations) break fastPath;
|
|
2149
|
+
declarationsList.push(declarations);
|
|
2150
|
+
if (!isMultipleEntries) continue;
|
|
2151
|
+
// Entries share the startup scope: an entry's free names and runtime
|
|
2152
|
+
// globals must not be shadowed by another entry's declarations.
|
|
2153
|
+
const freeNames = data.get("freeNames");
|
|
2154
|
+
if (!freeNames) break fastPath;
|
|
2155
|
+
for (const name of freeNames) usedNames.add(name);
|
|
2156
|
+
if (result.runtimeRequirements) {
|
|
2157
|
+
for (const req of result.runtimeRequirements) {
|
|
2158
|
+
const dot = req.indexOf(".");
|
|
2159
|
+
usedNames.add(dot === -1 ? req : req.slice(0, dot));
|
|
2160
|
+
}
|
|
1834
2161
|
}
|
|
1835
2162
|
}
|
|
2163
|
+
for (const declarations of declarationsList) {
|
|
2164
|
+
for (const name of declarations) {
|
|
2165
|
+
if (usedNames.has(name)) break fastPath;
|
|
2166
|
+
}
|
|
2167
|
+
// earlier entries' declarations join the used set so later entries
|
|
2168
|
+
// are checked against them
|
|
2169
|
+
for (const name of declarations) usedNames.add(name);
|
|
2170
|
+
}
|
|
2171
|
+
for (const [m, moduleSource] of inlinedModuleSources) {
|
|
2172
|
+
renamedInlinedModules.set(m, moduleSource);
|
|
2173
|
+
}
|
|
2174
|
+
return renamedInlinedModules;
|
|
2175
|
+
}
|
|
2176
|
+
|
|
2177
|
+
for (const [m, moduleSource] of inlinedModuleSources) {
|
|
2178
|
+
const code = /** @type {string} */ (moduleSource.source());
|
|
2179
|
+
|
|
2180
|
+
const { experiments } = compilation.options;
|
|
2181
|
+
const { ast } = JavascriptParser._parse(
|
|
2182
|
+
code,
|
|
2183
|
+
{
|
|
2184
|
+
sourceType: "auto",
|
|
2185
|
+
ranges: true,
|
|
2186
|
+
// generated code contains phase imports when the experiments are on
|
|
2187
|
+
importPhases: Boolean(
|
|
2188
|
+
experiments.deferImport || experiments.sourceImport
|
|
2189
|
+
)
|
|
2190
|
+
},
|
|
2191
|
+
JavascriptParser._getModuleParseFunction(compilation, m)
|
|
2192
|
+
);
|
|
2193
|
+
|
|
2194
|
+
const scopeManager = eslintScope.analyze(ast, {
|
|
2195
|
+
ecmaVersion: 6,
|
|
2196
|
+
sourceType: "module",
|
|
2197
|
+
optimistic: true,
|
|
2198
|
+
ignoreEval: true
|
|
2199
|
+
});
|
|
2200
|
+
|
|
2201
|
+
const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
|
|
2202
|
+
const moduleScope = globalScope.childScopes[0];
|
|
2203
|
+
inlinedModulesToInfo.set(m, {
|
|
2204
|
+
source: moduleSource,
|
|
2205
|
+
ast,
|
|
2206
|
+
module: m,
|
|
2207
|
+
variables: new Set(moduleScope.variables),
|
|
2208
|
+
through: new Set(moduleScope.through),
|
|
2209
|
+
usedInNonInlined: new Set(),
|
|
2210
|
+
moduleScope
|
|
2211
|
+
});
|
|
1836
2212
|
}
|
|
1837
2213
|
|
|
1838
2214
|
for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
|
|
@@ -1846,6 +2222,36 @@ class JavascriptModulesPlugin {
|
|
|
1846
2222
|
}
|
|
1847
2223
|
}
|
|
1848
2224
|
|
|
2225
|
+
// Multiple inlined entry modules share the chunk's startup scope. Rename any
|
|
2226
|
+
// top-level declaration that would collide with another inlined module's
|
|
2227
|
+
// declaration, with any inlined or non-inlined module's free (global)
|
|
2228
|
+
// reference, or with a reserved name, so the modules can be emitted without a
|
|
2229
|
+
// per-entry IIFE.
|
|
2230
|
+
if (isMultipleEntries) {
|
|
2231
|
+
/** @type {Set<string>} */
|
|
2232
|
+
const allUsedNames = new Set(nonInlinedModuleThroughIdentifiers);
|
|
2233
|
+
for (const name of RESERVED_NAMES) allUsedNames.add(name);
|
|
2234
|
+
for (const { through } of inlinedModulesToInfo.values()) {
|
|
2235
|
+
for (const ref of through) allUsedNames.add(ref.identifier.name);
|
|
2236
|
+
}
|
|
2237
|
+
for (const [m, moduleInfo] of inlinedModulesToInfo) {
|
|
2238
|
+
const { ast, source: _source } = moduleInfo;
|
|
2239
|
+
const source = new ReplaceSource(_source);
|
|
2240
|
+
for (const variable of moduleInfo.variables) {
|
|
2241
|
+
renameInlinedModuleVariable(
|
|
2242
|
+
source,
|
|
2243
|
+
ast,
|
|
2244
|
+
variable,
|
|
2245
|
+
moduleInfo.module.identifier(),
|
|
2246
|
+
m.readableIdentifier(runtimeTemplate.requestShortener),
|
|
2247
|
+
allUsedNames
|
|
2248
|
+
);
|
|
2249
|
+
}
|
|
2250
|
+
renamedInlinedModules.set(m, source);
|
|
2251
|
+
}
|
|
2252
|
+
return renamedInlinedModules;
|
|
2253
|
+
}
|
|
2254
|
+
|
|
1849
2255
|
for (const [m, moduleInfo] of inlinedModulesToInfo) {
|
|
1850
2256
|
const { ast, source: _source, usedInNonInlined } = moduleInfo;
|
|
1851
2257
|
const source = new ReplaceSource(_source);
|
|
@@ -1864,60 +2270,14 @@ class JavascriptModulesPlugin {
|
|
|
1864
2270
|
}
|
|
1865
2271
|
|
|
1866
2272
|
for (const variable of info.variables) {
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
const name = variable.name;
|
|
1873
|
-
const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
|
|
1874
|
-
usedNamesInScopeInfo,
|
|
2273
|
+
renameInlinedModuleVariable(
|
|
2274
|
+
source,
|
|
2275
|
+
ast,
|
|
2276
|
+
variable,
|
|
1875
2277
|
info.module.identifier(),
|
|
1876
|
-
|
|
2278
|
+
m.readableIdentifier(runtimeTemplate.requestShortener),
|
|
2279
|
+
allUsedNames
|
|
1877
2280
|
);
|
|
1878
|
-
|
|
1879
|
-
if (allUsedNames.has(name) || usedNames.has(name)) {
|
|
1880
|
-
const references = getAllReferences(variable);
|
|
1881
|
-
const allIdentifiers = new Set([
|
|
1882
|
-
...references.map((r) => r.identifier),
|
|
1883
|
-
...variable.identifiers
|
|
1884
|
-
]);
|
|
1885
|
-
for (const ref of references) {
|
|
1886
|
-
addScopeSymbols(
|
|
1887
|
-
ref.from,
|
|
1888
|
-
usedNames,
|
|
1889
|
-
alreadyCheckedScopes,
|
|
1890
|
-
ignoredScopes
|
|
1891
|
-
);
|
|
1892
|
-
}
|
|
1893
|
-
|
|
1894
|
-
const newName = findNewName(
|
|
1895
|
-
variable.name,
|
|
1896
|
-
allUsedNames,
|
|
1897
|
-
usedNames,
|
|
1898
|
-
m.readableIdentifier(runtimeTemplate.requestShortener)
|
|
1899
|
-
);
|
|
1900
|
-
allUsedNames.add(newName);
|
|
1901
|
-
for (const identifier of allIdentifiers) {
|
|
1902
|
-
const r = /** @type {Range} */ (identifier.range);
|
|
1903
|
-
const path = getPathInAst(ast, identifier);
|
|
1904
|
-
if (path && path.length > 1) {
|
|
1905
|
-
const maybeProperty =
|
|
1906
|
-
path[1].type === "AssignmentPattern" && path[1].left === path[0]
|
|
1907
|
-
? path[2]
|
|
1908
|
-
: path[1];
|
|
1909
|
-
if (
|
|
1910
|
-
maybeProperty.type === "Property" &&
|
|
1911
|
-
maybeProperty.shorthand
|
|
1912
|
-
) {
|
|
1913
|
-
source.insert(r[1], `: ${newName}`);
|
|
1914
|
-
continue;
|
|
1915
|
-
}
|
|
1916
|
-
}
|
|
1917
|
-
source.replace(r[0], r[1] - 1, newName);
|
|
1918
|
-
}
|
|
1919
|
-
}
|
|
1920
|
-
allUsedNames.add(name);
|
|
1921
2281
|
}
|
|
1922
2282
|
|
|
1923
2283
|
renamedInlinedModules.set(m, source);
|
|
@@ -1927,5 +2287,41 @@ class JavascriptModulesPlugin {
|
|
|
1927
2287
|
}
|
|
1928
2288
|
}
|
|
1929
2289
|
|
|
2290
|
+
JavascriptModulesPlugin.getCompilationHooks = createHooksRegistry(
|
|
2291
|
+
() =>
|
|
2292
|
+
/** @type {CompilationHooks} */ ({
|
|
2293
|
+
renderModuleContent: new SyncWaterfallHook([
|
|
2294
|
+
"source",
|
|
2295
|
+
"module",
|
|
2296
|
+
"moduleRenderContext"
|
|
2297
|
+
]),
|
|
2298
|
+
renderModuleContainer: new SyncWaterfallHook([
|
|
2299
|
+
"source",
|
|
2300
|
+
"module",
|
|
2301
|
+
"moduleRenderContext"
|
|
2302
|
+
]),
|
|
2303
|
+
renderModulePackage: new SyncWaterfallHook([
|
|
2304
|
+
"source",
|
|
2305
|
+
"module",
|
|
2306
|
+
"moduleRenderContext"
|
|
2307
|
+
]),
|
|
2308
|
+
render: new SyncWaterfallHook(["source", "renderContext"]),
|
|
2309
|
+
renderContent: new SyncWaterfallHook(["source", "renderContext"]),
|
|
2310
|
+
renderStartup: new SyncWaterfallHook([
|
|
2311
|
+
"source",
|
|
2312
|
+
"module",
|
|
2313
|
+
"startupRenderContext"
|
|
2314
|
+
]),
|
|
2315
|
+
renderChunk: new SyncWaterfallHook(["source", "renderContext"]),
|
|
2316
|
+
renderMain: new SyncWaterfallHook(["source", "renderContext"]),
|
|
2317
|
+
renderRequire: new SyncWaterfallHook(["code", "renderContext"]),
|
|
2318
|
+
inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
|
|
2319
|
+
embedInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
|
|
2320
|
+
strictRuntimeBailout: new SyncBailHook(["renderContext"]),
|
|
2321
|
+
chunkHash: new SyncHook(["chunk", "hash", "context"]),
|
|
2322
|
+
useSourceMap: new SyncBailHook(["chunk", "renderContext"])
|
|
2323
|
+
})
|
|
2324
|
+
);
|
|
2325
|
+
|
|
1930
2326
|
module.exports = JavascriptModulesPlugin;
|
|
1931
2327
|
module.exports.chunkHasJs = chunkHasJs;
|