@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
|
@@ -18,6 +18,7 @@ const {
|
|
|
18
18
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
19
19
|
const Template = require("../Template");
|
|
20
20
|
const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDependency");
|
|
21
|
+
const { resolveByProperty } = require("../util/cleverMerge");
|
|
21
22
|
const { registerNotSerializable } = require("../util/serialization");
|
|
22
23
|
|
|
23
24
|
/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
|
|
@@ -25,6 +26,7 @@ const { registerNotSerializable } = require("../util/serialization");
|
|
|
25
26
|
/** @typedef {import("../Compiler")} Compiler */
|
|
26
27
|
/** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
|
|
27
28
|
/** @typedef {import("../Module").BuildCallback} BuildCallback */
|
|
29
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
|
28
30
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
29
31
|
/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
|
|
30
32
|
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
|
|
@@ -46,6 +48,97 @@ const { registerNotSerializable } = require("../util/serialization");
|
|
|
46
48
|
/** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
|
|
47
49
|
|
|
48
50
|
/**
|
|
51
|
+
* Library wrappers of these types pass external modules as closure arguments
|
|
52
|
+
* (e.g. `__WEBPACK_EXTERNAL_MODULE_react__`) baked into the entry chunk at
|
|
53
|
+
* render time. When `lazyCompilation` activates a proxy for the first time,
|
|
54
|
+
* any external dependency the lazily-built module pulls in lands in a hot
|
|
55
|
+
* update chunk that lives outside the original wrapper closure, so the
|
|
56
|
+
* factory body can't resolve its closure identifier and throws at runtime.
|
|
57
|
+
* Reserving the externals up front (during the inactive build) folds them
|
|
58
|
+
* into the initial wrapper, so the closure identifiers are already defined
|
|
59
|
+
* when the activation update arrives.
|
|
60
|
+
*/
|
|
61
|
+
const CLOSURE_LIBRARY_TYPES = new Set([
|
|
62
|
+
"umd",
|
|
63
|
+
"umd2",
|
|
64
|
+
"amd",
|
|
65
|
+
"amd-require",
|
|
66
|
+
"system"
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* `enabledLibraryTypes` covers both the global `output.library.type` and any
|
|
71
|
+
* per-entry `entry.<name>.library.type`, so a UMD/AMD/System wrapper attached
|
|
72
|
+
* to an individual entry is still detected.
|
|
73
|
+
* @param {import("../../declarations/WebpackOptions").OutputNormalized} output normalized output option
|
|
74
|
+
* @returns {boolean} true when at least one library wrapper passes externals as closure arguments
|
|
75
|
+
*/
|
|
76
|
+
const hasClosureLibrary = (output) => {
|
|
77
|
+
const enabled = output.enabledLibraryTypes;
|
|
78
|
+
if (enabled) {
|
|
79
|
+
for (const type of enabled) {
|
|
80
|
+
if (CLOSURE_LIBRARY_TYPES.has(type)) return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (output.library && output.library.type) {
|
|
84
|
+
return CLOSURE_LIBRARY_TYPES.has(output.library.type);
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Collects request strings from statically-enumerable externals (string,
|
|
91
|
+
* object, and arrays of those). Function and RegExp forms are skipped because
|
|
92
|
+
* their effective request set isn't knowable until something asks for it.
|
|
93
|
+
*
|
|
94
|
+
* Layer resolution mirrors `ExternalModuleFactoryPlugin.resolveLayer`: the
|
|
95
|
+
* effective map for the proxy's layer is computed via the same
|
|
96
|
+
* `resolveByProperty(..., "byLayer", layer)` helper that the externals system
|
|
97
|
+
* uses, so `byLayer.default` fallback and function-form `byLayer` entries are
|
|
98
|
+
* honored the same way.
|
|
99
|
+
*
|
|
100
|
+
* Entries whose effective value is `false` are skipped — `false` explicitly
|
|
101
|
+
* disables externalization for that request, and reserving it would force the
|
|
102
|
+
* real module into the entry chunk.
|
|
103
|
+
* @param {import("../../declarations/WebpackOptions").Externals | undefined} externals normalized externals option
|
|
104
|
+
* @param {string | null} layer issuer layer for which to resolve `byLayer`
|
|
105
|
+
* @returns {Set<string>} requests to reserve in the entry chunk
|
|
106
|
+
*/
|
|
107
|
+
const collectStaticExternalRequests = (externals, layer) => {
|
|
108
|
+
/** @type {Set<string>} */
|
|
109
|
+
const requests = new Set();
|
|
110
|
+
if (!externals) return requests;
|
|
111
|
+
/** @param {import("../../declarations/WebpackOptions").ExternalItem} item one item */
|
|
112
|
+
const visit = (item) => {
|
|
113
|
+
if (typeof item === "string") {
|
|
114
|
+
requests.add(item);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!item || typeof item !== "object" || item instanceof RegExp) return;
|
|
118
|
+
const resolved = /** @type {Record<string, unknown>} */ (
|
|
119
|
+
resolveByProperty(
|
|
120
|
+
/** @type {Record<string, unknown>} */ (item),
|
|
121
|
+
"byLayer",
|
|
122
|
+
layer
|
|
123
|
+
)
|
|
124
|
+
);
|
|
125
|
+
for (const [request, value] of Object.entries(resolved)) {
|
|
126
|
+
// `false` explicitly opts the request out of externalization; reserving
|
|
127
|
+
// it would pull the actual module into the entry chunk.
|
|
128
|
+
if (value === false) continue;
|
|
129
|
+
requests.add(request);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
if (Array.isArray(externals)) {
|
|
133
|
+
for (const item of externals) visit(item);
|
|
134
|
+
} else {
|
|
135
|
+
visit(externals);
|
|
136
|
+
}
|
|
137
|
+
return requests;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Defines the backend api type used by this module.
|
|
49
142
|
* @typedef {object} BackendApi
|
|
50
143
|
* @property {(callback: (err?: (Error | null)) => void) => void} dispose
|
|
51
144
|
* @property {(module: Module) => ModuleResult} module
|
|
@@ -59,6 +152,7 @@ const HMR_DEPENDENCY_TYPES = new Set([
|
|
|
59
152
|
]);
|
|
60
153
|
|
|
61
154
|
/**
|
|
155
|
+
* Checks true, if the module should be selected.
|
|
62
156
|
* @param {Options["test"]} test test option
|
|
63
157
|
* @param {Module} module the module
|
|
64
158
|
* @returns {boolean | null | string} true, if the module should be selected
|
|
@@ -81,10 +175,12 @@ const checkTest = (test, module) => {
|
|
|
81
175
|
|
|
82
176
|
class LazyCompilationDependency extends Dependency {
|
|
83
177
|
/**
|
|
178
|
+
* Creates an instance of LazyCompilationDependency.
|
|
84
179
|
* @param {LazyCompilationProxyModule} proxyModule proxy module
|
|
85
180
|
*/
|
|
86
181
|
constructor(proxyModule) {
|
|
87
182
|
super();
|
|
183
|
+
/** @type {LazyCompilationProxyModule} */
|
|
88
184
|
this.proxyModule = proxyModule;
|
|
89
185
|
}
|
|
90
186
|
|
|
@@ -97,6 +193,7 @@ class LazyCompilationDependency extends Dependency {
|
|
|
97
193
|
}
|
|
98
194
|
|
|
99
195
|
/**
|
|
196
|
+
* Returns an identifier to merge equal requests.
|
|
100
197
|
* @returns {string | null} an identifier to merge equal requests
|
|
101
198
|
*/
|
|
102
199
|
getResourceIdentifier() {
|
|
@@ -106,8 +203,17 @@ class LazyCompilationDependency extends Dependency {
|
|
|
106
203
|
|
|
107
204
|
registerNotSerializable(LazyCompilationDependency);
|
|
108
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Defines the build info properties specific to lazy compilation proxy modules.
|
|
208
|
+
* @typedef {object} KnownLazyCompilationProxyModuleBuildInfo
|
|
209
|
+
* @property {boolean=} active whether the proxied module was active when built
|
|
210
|
+
*/
|
|
211
|
+
|
|
212
|
+
/** @typedef {BuildInfo & KnownLazyCompilationProxyModuleBuildInfo} LazyCompilationProxyModuleBuildInfo */
|
|
213
|
+
|
|
109
214
|
class LazyCompilationProxyModule extends Module {
|
|
110
215
|
/**
|
|
216
|
+
* Creates an instance of LazyCompilationProxyModule.
|
|
111
217
|
* @param {string} context context
|
|
112
218
|
* @param {Module} originalModule an original module
|
|
113
219
|
* @param {string} request request
|
|
@@ -121,14 +227,23 @@ class LazyCompilationProxyModule extends Module {
|
|
|
121
227
|
context,
|
|
122
228
|
originalModule.layer
|
|
123
229
|
);
|
|
230
|
+
// Redeclared with the lazy compilation proxy specific shape
|
|
231
|
+
/** @type {LazyCompilationProxyModuleBuildInfo | undefined} */
|
|
232
|
+
this.buildInfo = undefined;
|
|
233
|
+
/** @type {Module} */
|
|
124
234
|
this.originalModule = originalModule;
|
|
235
|
+
/** @type {string} */
|
|
125
236
|
this.request = request;
|
|
237
|
+
/** @type {string} */
|
|
126
238
|
this.client = client;
|
|
239
|
+
/** @type {string} */
|
|
127
240
|
this.data = data;
|
|
241
|
+
/** @type {boolean} */
|
|
128
242
|
this.active = active;
|
|
129
243
|
}
|
|
130
244
|
|
|
131
245
|
/**
|
|
246
|
+
* Returns the unique identifier used to reference this module.
|
|
132
247
|
* @returns {string} a unique identifier of the module
|
|
133
248
|
*/
|
|
134
249
|
identifier() {
|
|
@@ -136,6 +251,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
136
251
|
}
|
|
137
252
|
|
|
138
253
|
/**
|
|
254
|
+
* Returns a human-readable identifier for this module.
|
|
139
255
|
* @param {RequestShortener} requestShortener the request shortener
|
|
140
256
|
* @returns {string} a user readable identifier of the module
|
|
141
257
|
*/
|
|
@@ -163,6 +279,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
163
279
|
}
|
|
164
280
|
|
|
165
281
|
/**
|
|
282
|
+
* Gets the library identifier.
|
|
166
283
|
* @param {LibIdentOptions} options options
|
|
167
284
|
* @returns {LibIdent | null} an identifier for library inclusion
|
|
168
285
|
*/
|
|
@@ -173,6 +290,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
173
290
|
}
|
|
174
291
|
|
|
175
292
|
/**
|
|
293
|
+
* Checks whether the module needs to be rebuilt for the current build state.
|
|
176
294
|
* @param {NeedBuildContext} context context info
|
|
177
295
|
* @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
|
|
178
296
|
* @returns {void}
|
|
@@ -182,6 +300,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
182
300
|
}
|
|
183
301
|
|
|
184
302
|
/**
|
|
303
|
+
* Builds the module using the provided compilation context.
|
|
185
304
|
* @param {WebpackOptions} options webpack options
|
|
186
305
|
* @param {Compilation} compilation the compilation
|
|
187
306
|
* @param {ResolverWithOptions} resolver the resolver
|
|
@@ -203,11 +322,25 @@ class LazyCompilationProxyModule extends Module {
|
|
|
203
322
|
const block = new AsyncDependenciesBlock({});
|
|
204
323
|
block.addDependency(dep);
|
|
205
324
|
this.addBlock(block);
|
|
325
|
+
} else if (hasClosureLibrary(compilation.options.output)) {
|
|
326
|
+
// Reserve statically-declared externals as dependencies of the inactive
|
|
327
|
+
// proxy so the initial entry chunk's library wrapper already exposes
|
|
328
|
+
// their closure identifiers (e.g. `__WEBPACK_EXTERNAL_MODULE_react__`).
|
|
329
|
+
// Once the proxy activates and the lazily-built module references those
|
|
330
|
+
// externals, the identifiers resolve normally instead of throwing.
|
|
331
|
+
const requests = collectStaticExternalRequests(
|
|
332
|
+
options.externals,
|
|
333
|
+
this.layer
|
|
334
|
+
);
|
|
335
|
+
for (const request of requests) {
|
|
336
|
+
this.addDependency(new CommonJsRequireDependency(request));
|
|
337
|
+
}
|
|
206
338
|
}
|
|
207
339
|
callback();
|
|
208
340
|
}
|
|
209
341
|
|
|
210
342
|
/**
|
|
343
|
+
* Returns the source types this module can generate.
|
|
211
344
|
* @returns {SourceTypes} types available (do not mutate)
|
|
212
345
|
*/
|
|
213
346
|
getSourceTypes() {
|
|
@@ -215,6 +348,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
215
348
|
}
|
|
216
349
|
|
|
217
350
|
/**
|
|
351
|
+
* Returns the estimated size for the requested source type.
|
|
218
352
|
* @param {string=} type the source type for which the size should be estimated
|
|
219
353
|
* @returns {number} the estimated size of the module (must be non-zero)
|
|
220
354
|
*/
|
|
@@ -223,6 +357,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
223
357
|
}
|
|
224
358
|
|
|
225
359
|
/**
|
|
360
|
+
* Generates code and runtime requirements for this module.
|
|
226
361
|
* @param {CodeGenerationContext} context context for code generation
|
|
227
362
|
* @returns {CodeGenerationResult} result
|
|
228
363
|
*/
|
|
@@ -237,17 +372,19 @@ class LazyCompilationProxyModule extends Module {
|
|
|
237
372
|
);
|
|
238
373
|
const clientModule = moduleGraph.getModule(clientDep);
|
|
239
374
|
const block = this.blocks[0];
|
|
375
|
+
const cst = runtimeTemplate.renderConst();
|
|
376
|
+
const lt = runtimeTemplate.renderLet();
|
|
240
377
|
const client = Template.asString([
|
|
241
|
-
|
|
378
|
+
`${cst} client = ${runtimeTemplate.moduleExports({
|
|
242
379
|
module: clientModule,
|
|
243
380
|
chunkGraph,
|
|
244
381
|
request: clientDep.userRequest,
|
|
245
382
|
runtimeRequirements
|
|
246
383
|
})}`,
|
|
247
|
-
|
|
384
|
+
`${cst} data = ${JSON.stringify(this.data)};`
|
|
248
385
|
]);
|
|
249
386
|
const keepActive = Template.asString([
|
|
250
|
-
|
|
387
|
+
`${cst} dispose = client.keepAlive({ data: data, active: ${JSON.stringify(
|
|
251
388
|
Boolean(block)
|
|
252
389
|
)}, module: module, onError: onError });`
|
|
253
390
|
]);
|
|
@@ -275,7 +412,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
275
412
|
chunkGraph.getModuleId(module)
|
|
276
413
|
)}, function() { module.hot.invalidate(); });`,
|
|
277
414
|
"module.hot.dispose(function(data) { delete data.resolveSelf; dispose(data); });",
|
|
278
|
-
|
|
415
|
+
`if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`
|
|
279
416
|
]),
|
|
280
417
|
"}",
|
|
281
418
|
"function onError() { /* ignore */ }",
|
|
@@ -284,12 +421,12 @@ class LazyCompilationProxyModule extends Module {
|
|
|
284
421
|
} else {
|
|
285
422
|
source = Template.asString([
|
|
286
423
|
client,
|
|
287
|
-
|
|
424
|
+
`${lt} resolveSelf, onError;`,
|
|
288
425
|
"module.exports = new Promise(function(resolve, reject) { resolveSelf = resolve; onError = reject; });",
|
|
289
426
|
"if (module.hot) {",
|
|
290
427
|
Template.indent([
|
|
291
428
|
"module.hot.accept();",
|
|
292
|
-
|
|
429
|
+
`if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`,
|
|
293
430
|
"module.hot.dispose(function(data) { data.resolveSelf = resolveSelf; dispose(data); });"
|
|
294
431
|
]),
|
|
295
432
|
"}",
|
|
@@ -304,6 +441,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
304
441
|
}
|
|
305
442
|
|
|
306
443
|
/**
|
|
444
|
+
* Updates the hash with the data contributed by this instance.
|
|
307
445
|
* @param {Hash} hash the hash used to track dependencies
|
|
308
446
|
* @param {UpdateHashContext} context context
|
|
309
447
|
* @returns {void}
|
|
@@ -323,6 +461,7 @@ class LazyCompilationDependencyFactory extends ModuleFactory {
|
|
|
323
461
|
}
|
|
324
462
|
|
|
325
463
|
/**
|
|
464
|
+
* Processes the provided data.
|
|
326
465
|
* @param {ModuleFactoryCreateData} data data object
|
|
327
466
|
* @param {ModuleFactoryCallback} callback callback
|
|
328
467
|
* @returns {void}
|
|
@@ -338,6 +477,7 @@ class LazyCompilationDependencyFactory extends ModuleFactory {
|
|
|
338
477
|
}
|
|
339
478
|
|
|
340
479
|
/**
|
|
480
|
+
* Defines the backend handler callback.
|
|
341
481
|
* @callback BackendHandler
|
|
342
482
|
* @param {Compiler} compiler compiler
|
|
343
483
|
* @param {(err: Error | null, backendApi?: BackendApi) => void} callback callback
|
|
@@ -345,6 +485,7 @@ class LazyCompilationDependencyFactory extends ModuleFactory {
|
|
|
345
485
|
*/
|
|
346
486
|
|
|
347
487
|
/**
|
|
488
|
+
* Defines the promise backend handler callback.
|
|
348
489
|
* @callback PromiseBackendHandler
|
|
349
490
|
* @param {Compiler} compiler compiler
|
|
350
491
|
* @returns {Promise<BackendApi>} backend
|
|
@@ -355,6 +496,7 @@ class LazyCompilationDependencyFactory extends ModuleFactory {
|
|
|
355
496
|
/** @typedef {(module: Module) => boolean} TestFn */
|
|
356
497
|
|
|
357
498
|
/**
|
|
499
|
+
* Defines the options type used by this module.
|
|
358
500
|
* @typedef {object} Options options
|
|
359
501
|
* @property {BackEnd} backend the backend
|
|
360
502
|
* @property {boolean=} entries
|
|
@@ -366,17 +508,22 @@ const PLUGIN_NAME = "LazyCompilationPlugin";
|
|
|
366
508
|
|
|
367
509
|
class LazyCompilationPlugin {
|
|
368
510
|
/**
|
|
511
|
+
* Creates an instance of LazyCompilationPlugin.
|
|
369
512
|
* @param {Options} options options
|
|
370
513
|
*/
|
|
371
514
|
constructor({ backend, entries, imports, test }) {
|
|
515
|
+
/** @type {BackEnd} */
|
|
372
516
|
this.backend = backend;
|
|
517
|
+
/** @type {boolean | undefined} */
|
|
373
518
|
this.entries = entries;
|
|
519
|
+
/** @type {boolean | undefined} */
|
|
374
520
|
this.imports = imports;
|
|
521
|
+
/** @type {string | RegExp | TestFn | undefined} */
|
|
375
522
|
this.test = test;
|
|
376
523
|
}
|
|
377
524
|
|
|
378
525
|
/**
|
|
379
|
-
*
|
|
526
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
380
527
|
* @param {Compiler} compiler the compiler instance
|
|
381
528
|
* @returns {void}
|
|
382
529
|
*/
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
/** @typedef {() => Server} CreateServerFunction */
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
+
* Returns backend.
|
|
22
23
|
* @param {Omit<LazyCompilationDefaultBackendOptions, "client"> & { client: NonNullable<LazyCompilationDefaultBackendOptions["client"]> }} options additional options for the backend
|
|
23
24
|
* @returns {BackendHandler} backend
|
|
24
25
|
*/
|
|
@@ -26,6 +27,9 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
26
27
|
const logger = compiler.getInfrastructureLogger("LazyCompilationBackend");
|
|
27
28
|
/** @type {Map<string, number>} */
|
|
28
29
|
const activeModules = new Map();
|
|
30
|
+
/** @type {Set<NodeJS.Timeout>} */
|
|
31
|
+
const idleTimers = new Set();
|
|
32
|
+
let isClosing = false;
|
|
29
33
|
const prefix = "/lazy-compilation-using-";
|
|
30
34
|
|
|
31
35
|
const isHttps =
|
|
@@ -66,19 +70,33 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
66
70
|
if (req.url === undefined) return;
|
|
67
71
|
const keys = req.url.slice(prefix.length).split("@");
|
|
68
72
|
req.socket.on("close", () => {
|
|
69
|
-
|
|
73
|
+
// Shutting down: skip the idle-decrement timer entirely.
|
|
74
|
+
if (isClosing) return;
|
|
75
|
+
const timer = setTimeout(() => {
|
|
76
|
+
idleTimers.delete(timer);
|
|
70
77
|
for (const key of keys) {
|
|
71
78
|
const oldValue = activeModules.get(key) || 0;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
)
|
|
79
|
+
// Drop the entry at zero so the map doesn't retain idle modules
|
|
80
|
+
// and the count can't drift negative.
|
|
81
|
+
if (oldValue <= 1) {
|
|
82
|
+
activeModules.delete(key);
|
|
83
|
+
if (oldValue === 1) {
|
|
84
|
+
logger.log(
|
|
85
|
+
`${key} is no longer in use. Next compilation will skip this module.`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
89
|
+
activeModules.set(key, oldValue - 1);
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
92
|
}, 120000);
|
|
93
|
+
// Don't keep the process alive just to decrement idle counters.
|
|
94
|
+
if (timer.unref) timer.unref();
|
|
95
|
+
idleTimers.add(timer);
|
|
80
96
|
});
|
|
81
|
-
|
|
97
|
+
// Not all runtimes expose `setNoDelay` on the request socket (e.g. Deno's
|
|
98
|
+
// HTTP server); it's only a latency optimization, so skip it when absent.
|
|
99
|
+
if (req.socket.setNoDelay) req.socket.setNoDelay(true);
|
|
82
100
|
res.writeHead(200, {
|
|
83
101
|
"content-type": "text/event-stream",
|
|
84
102
|
"Access-Control-Allow-Origin": "*",
|
|
@@ -101,7 +119,6 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
101
119
|
const server = createServer();
|
|
102
120
|
server.on("request", requestListener);
|
|
103
121
|
|
|
104
|
-
let isClosing = false;
|
|
105
122
|
/** @type {Set<import("net").Socket>} */
|
|
106
123
|
const sockets = new Set();
|
|
107
124
|
server.on("connection", (socket) => {
|
|
@@ -112,12 +129,21 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
112
129
|
if (isClosing) socket.destroy();
|
|
113
130
|
});
|
|
114
131
|
server.on("clientError", (e) => {
|
|
115
|
-
|
|
132
|
+
// A closing browser tab or a test tearing down aborts the request and
|
|
133
|
+
// resets the socket; that surfaces here as ECONNRESET and is benign.
|
|
134
|
+
if (
|
|
135
|
+
e.message === "Server is disposing" ||
|
|
136
|
+
/** @type {NodeJS.ErrnoException} */ (e).code === "ECONNRESET"
|
|
137
|
+
) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
logger.warn(e);
|
|
116
141
|
});
|
|
117
142
|
|
|
118
143
|
server.on(
|
|
119
144
|
"listening",
|
|
120
145
|
/**
|
|
146
|
+
* Handles the callback logic for this hook.
|
|
121
147
|
* @param {Error} err error
|
|
122
148
|
* @returns {void}
|
|
123
149
|
*/
|
|
@@ -140,14 +166,29 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
140
166
|
callback(null, {
|
|
141
167
|
dispose(callback) {
|
|
142
168
|
isClosing = true;
|
|
169
|
+
for (const timer of idleTimers) clearTimeout(timer);
|
|
170
|
+
idleTimers.clear();
|
|
143
171
|
// Removing the listener is a workaround for a memory leak in node.js
|
|
144
172
|
server.off("request", requestListener);
|
|
145
|
-
server.close((err) => {
|
|
146
|
-
callback(err);
|
|
147
|
-
});
|
|
148
173
|
for (const socket of sockets) {
|
|
149
174
|
socket.destroy(new Error("Server is disposing"));
|
|
150
175
|
}
|
|
176
|
+
// Some runtimes (e.g. Deno) don't emit "connection", so `sockets`
|
|
177
|
+
// misses the open SSE connections and `server.close` would hang;
|
|
178
|
+
// force-close everything before waiting for it.
|
|
179
|
+
if (server.closeAllConnections) server.closeAllConnections();
|
|
180
|
+
server.close((err) => {
|
|
181
|
+
// `closeAllConnections()` already stops the server on some runtimes
|
|
182
|
+
// (e.g. Bun), so `close` then reports ERR_SERVER_NOT_RUNNING; the
|
|
183
|
+
// server is closed either way, so that's not a dispose failure.
|
|
184
|
+
callback(
|
|
185
|
+
err &&
|
|
186
|
+
/** @type {NodeJS.ErrnoException} */ (err).code !==
|
|
187
|
+
"ERR_SERVER_NOT_RUNNING"
|
|
188
|
+
? err
|
|
189
|
+
: null
|
|
190
|
+
);
|
|
191
|
+
});
|
|
151
192
|
},
|
|
152
193
|
module(originalModule) {
|
|
153
194
|
const key = `${encodeURIComponent(
|