webpack 5.107.1 → 5.108.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +8 -4
- package/lib/CacheFacade.js +7 -0
- package/lib/Chunk.js +4 -0
- package/lib/ChunkGraph.js +30 -9
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +2 -1
- package/lib/Compilation.js +396 -65
- package/lib/Compiler.js +52 -14
- package/lib/ConcatenationScope.js +10 -3
- package/lib/ContextExclusionPlugin.js +1 -0
- package/lib/ContextModule.js +92 -47
- package/lib/ContextModuleFactory.js +45 -38
- package/lib/ContextReplacementPlugin.js +4 -0
- package/lib/DefinePlugin.js +89 -15
- package/lib/Dependency.js +111 -7
- package/lib/EntryOptionPlugin.js +39 -2
- package/lib/EntryPlugin.js +2 -0
- package/lib/ExportsInfo.js +314 -73
- package/lib/ExternalModule.js +82 -34
- package/lib/ExternalModuleFactoryPlugin.js +1 -0
- package/lib/ExternalsPlugin.js +1 -0
- package/lib/FileSystemInfo.js +173 -23
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
- package/lib/FlagDependencyExportsPlugin.js +23 -0
- package/lib/FlagDependencyUsagePlugin.js +87 -5
- package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
- package/lib/Generator.js +8 -0
- package/lib/HotModuleReplacementPlugin.js +65 -28
- package/lib/IgnorePlugin.js +1 -0
- package/lib/InitFragment.js +5 -0
- package/lib/JavascriptMetaInfoPlugin.js +7 -5
- package/lib/LazyBarrel.js +361 -0
- package/lib/LoaderTargetPlugin.js +1 -0
- package/lib/Module.js +21 -42
- package/lib/ModuleGraph.js +3 -2
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleTemplate.js +2 -0
- package/lib/MultiCompiler.js +16 -0
- package/lib/MultiStats.js +1 -0
- package/lib/MultiWatching.js +2 -0
- package/lib/NodeStuffPlugin.js +22 -17
- package/lib/NormalModule.js +557 -77
- package/lib/NormalModuleReplacementPlugin.js +2 -0
- package/lib/PrefetchPlugin.js +2 -0
- package/lib/ProgressPlugin.js +9 -1
- package/lib/ProvidePlugin.js +1 -0
- package/lib/RawModule.js +20 -16
- package/lib/RecordIdsPlugin.js +1 -0
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimePlugin.js +58 -26
- package/lib/RuntimeTemplate.js +278 -21
- package/lib/SelfModuleFactory.js +1 -0
- package/lib/SourceMapDevToolPlugin.js +105 -30
- package/lib/Stats.js +1 -0
- package/lib/Template.js +8 -2
- package/lib/TemplatedPathPlugin.js +473 -131
- package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
- package/lib/WarnDeprecatedOptionPlugin.js +4 -0
- package/lib/WarnNoModeSetPlugin.js +1 -0
- package/lib/WatchIgnorePlugin.js +1 -0
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +50 -5
- package/lib/asset/AssetBytesGenerator.js +11 -3
- package/lib/asset/AssetGenerator.js +47 -22
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +14 -14
- package/lib/asset/AssetParser.js +2 -2
- package/lib/asset/AssetSourceGenerator.js +8 -0
- package/lib/asset/RawDataUrlModule.js +12 -13
- package/lib/buildChunkGraph.js +88 -9
- package/lib/bun/BunTargetPlugin.js +48 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
- package/lib/cache/AddManagedPathsPlugin.js +3 -0
- package/lib/cache/IdleFileCachePlugin.js +4 -0
- package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
- package/lib/cache/PackFileCacheStrategy.js +1 -0
- package/lib/cache/ResolverCachePlugin.js +2 -0
- package/lib/cache/getLazyHashedEtag.js +9 -2
- package/lib/cache/mergeEtags.js +2 -0
- package/lib/cli.js +109 -19
- package/lib/config/browserslistTargetHandler.js +99 -0
- package/lib/config/defaults.js +147 -7
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +5 -0
- package/lib/config/target.js +181 -2
- package/lib/container/ContainerEntryModule.js +15 -14
- package/lib/container/ContainerExposedDependency.js +2 -2
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +5 -7
- package/lib/container/FallbackModule.js +10 -9
- package/lib/container/RemoteModule.js +20 -10
- package/lib/container/RemoteRuntimeModule.js +14 -12
- package/lib/css/CssGenerator.js +353 -327
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
- package/lib/css/CssLoadingRuntimeModule.js +118 -47
- package/lib/css/CssModule.js +52 -23
- package/lib/css/CssModulesPlugin.js +107 -124
- package/lib/css/CssParser.js +2759 -2205
- package/lib/css/syntax.js +2859 -0
- package/lib/debug/ProfilingPlugin.js +2 -0
- package/lib/deno/DenoTargetPlugin.js +47 -0
- package/lib/dependencies/AMDDefineDependency.js +22 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
- package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
- package/lib/dependencies/AMDRequireContextDependency.js +7 -11
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
- package/lib/dependencies/AMDRequireDependency.js +24 -20
- package/lib/dependencies/CachedConstDependency.js +3 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
- package/lib/dependencies/CommonJsExportsDependency.js +21 -16
- package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
- package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
- package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
- package/lib/dependencies/CommonJsPlugin.js +1 -1
- package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
- package/lib/dependencies/CommonJsRequireDependency.js +42 -11
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
- package/lib/dependencies/ConstDependency.js +16 -11
- package/lib/dependencies/ContextDependency.js +4 -0
- package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
- package/lib/dependencies/ContextElementDependency.js +23 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
- package/lib/dependencies/CriticalDependencyWarning.js +1 -0
- package/lib/dependencies/CssIcssExportDependency.js +512 -574
- package/lib/dependencies/CssIcssImportDependency.js +9 -9
- package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
- package/lib/dependencies/CssImportDependency.js +25 -1
- package/lib/dependencies/CssUrlDependency.js +23 -14
- package/lib/dependencies/DllEntryDependency.js +9 -13
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +12 -12
- package/lib/dependencies/ExternalModuleDependency.js +8 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
- package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
- package/lib/dependencies/HarmonyExportInitFragment.js +22 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
- package/lib/dependencies/HarmonyExports.js +4 -1
- package/lib/dependencies/HarmonyImportDependency.js +24 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
- package/lib/dependencies/HarmonyImportGuard.js +254 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
- package/lib/dependencies/HarmonyLinkingError.js +1 -0
- package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
- package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +267 -154
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +20 -27
- package/lib/dependencies/HtmlInlineStyleDependency.js +62 -11
- package/lib/dependencies/HtmlSourceDependency.js +18 -0
- package/lib/dependencies/ImportContextDependency.js +5 -9
- package/lib/dependencies/ImportDependency.js +44 -2
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
- package/lib/dependencies/ImportMetaPlugin.js +74 -30
- package/lib/dependencies/ImportParserPlugin.js +19 -0
- package/lib/dependencies/ImportWeakDependency.js +1 -0
- package/lib/dependencies/JsonExportsDependency.js +9 -9
- package/lib/dependencies/LoaderImportDependency.js +1 -0
- package/lib/dependencies/LocalModule.js +11 -12
- package/lib/dependencies/LocalModuleDependency.js +11 -13
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
- package/lib/dependencies/ModuleDependency.js +7 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
- package/lib/dependencies/ProvidedDependency.js +31 -27
- package/lib/dependencies/PureExpressionDependency.js +7 -9
- package/lib/dependencies/RequireEnsureDependency.js +12 -13
- package/lib/dependencies/RequireHeaderDependency.js +3 -4
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
- package/lib/dependencies/RequireResolveContextDependency.js +7 -11
- package/lib/dependencies/RequireResolveDependency.js +1 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
- package/lib/dependencies/StaticExportsDependency.js +10 -10
- package/lib/dependencies/SystemPlugin.js +2 -0
- package/lib/dependencies/URLContextDependency.js +5 -7
- package/lib/dependencies/URLDependency.js +14 -16
- package/lib/dependencies/UnsupportedDependency.js +8 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
- package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
- package/lib/dependencies/WorkerDependency.js +19 -8
- package/lib/dependencies/WorkerPlugin.js +40 -10
- package/lib/dependencies/processExportInfo.js +13 -11
- package/lib/dll/DelegatedModule.js +29 -15
- package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
- package/lib/dll/DelegatedPlugin.js +1 -0
- package/lib/dll/DllEntryPlugin.js +3 -0
- package/lib/dll/DllModule.js +3 -2
- package/lib/dll/DllPlugin.js +16 -0
- package/lib/dll/DllReferencePlugin.js +3 -0
- package/lib/dll/LibManifestPlugin.js +1 -0
- package/lib/electron/ElectronTargetPlugin.js +22 -4
- package/lib/errors/ConcurrentCompilationError.js +1 -0
- package/lib/errors/HookWebpackError.js +11 -13
- package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
- package/lib/errors/JSONParseError.js +9 -8
- package/lib/errors/ModuleBuildError.js +16 -13
- package/lib/errors/ModuleDependencyError.js +8 -1
- package/lib/errors/ModuleDependencyWarning.js +8 -1
- package/lib/errors/ModuleError.js +5 -11
- package/lib/errors/ModuleHashingError.js +4 -0
- package/lib/errors/ModuleNotFoundError.js +3 -0
- package/lib/errors/ModuleParseError.js +5 -11
- package/lib/errors/ModuleRestoreError.js +2 -0
- package/lib/errors/ModuleStoreError.js +3 -0
- package/lib/errors/ModuleWarning.js +7 -11
- package/lib/errors/NodeStuffInWebError.js +1 -0
- package/lib/errors/NonErrorEmittedError.js +2 -0
- package/lib/errors/UnhandledSchemeError.js +1 -0
- package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/LazyCompilationPlugin.js +134 -6
- package/lib/html/HtmlGenerator.js +292 -50
- package/lib/html/HtmlModule.js +40 -0
- package/lib/html/HtmlModulesPlugin.js +287 -60
- package/lib/html/HtmlParser.js +1108 -1099
- package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
- package/lib/ids/IdHelpers.js +4 -2
- package/lib/index.js +19 -0
- package/lib/javascript/BasicEvaluatedExpression.js +1 -0
- package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
- package/lib/javascript/JavascriptGenerator.js +6 -2
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +257 -102
- package/lib/javascript/JavascriptParser.js +286 -159
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +7 -0
- package/lib/json/JsonParser.js +4 -2
- package/lib/library/AssignLibraryPlugin.js +5 -3
- package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
- package/lib/library/FalseIIFEUmdWarning.js +1 -0
- package/lib/library/ModuleLibraryPlugin.js +54 -29
- package/lib/library/SystemLibraryPlugin.js +3 -3
- package/lib/node/NodeTargetPlugin.js +1 -0
- package/lib/node/NodeWatchFileSystem.js +38 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
- package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
- package/lib/optimize/ConcatenatedModule.js +397 -78
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +372 -275
- package/lib/optimize/InnerGraphPlugin.js +196 -99
- package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
- package/lib/optimize/RealContentHashPlugin.js +14 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
- package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
- package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/HttpUriPlugin.js +3 -2
- package/lib/serialization/AggregateErrorSerializer.js +7 -6
- package/lib/serialization/ArraySerializer.js +4 -8
- package/lib/serialization/BinaryMiddleware.js +538 -468
- package/lib/serialization/DateObjectSerializer.js +2 -2
- package/lib/serialization/ErrorObjectSerializer.js +7 -6
- package/lib/serialization/MapObjectSerializer.js +5 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
- package/lib/serialization/ObjectMiddleware.js +50 -13
- package/lib/serialization/PlainObjectSerializer.js +9 -8
- package/lib/serialization/RegExpObjectSerializer.js +2 -2
- package/lib/serialization/Serializer.js +1 -0
- package/lib/serialization/SetObjectSerializer.js +4 -8
- package/lib/sharing/ConsumeSharedModule.js +6 -7
- package/lib/sharing/ConsumeSharedPlugin.js +1 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
- package/lib/sharing/ProvideSharedDependency.js +30 -15
- package/lib/sharing/ProvideSharedModule.js +30 -11
- package/lib/sharing/ProvideSharedPlugin.js +4 -2
- package/lib/sharing/SharePlugin.js +3 -0
- package/lib/sharing/ShareRuntimeModule.js +18 -16
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +1 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
- package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
- package/lib/stats/StatsFactory.js +11 -9
- package/lib/stats/StatsPrinter.js +9 -2
- package/lib/url/URLParserPlugin.js +5 -2
- package/lib/util/AsyncQueue.js +10 -0
- package/lib/util/LazyBucketSortedSet.js +5 -0
- package/lib/util/LazySet.js +6 -4
- package/lib/util/LocConverter.js +11 -1
- package/lib/util/Semaphore.js +1 -0
- package/lib/util/SourceProcessor.js +106 -0
- package/lib/util/TupleSet.js +1 -0
- package/lib/util/WeakTupleMap.js +27 -1
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/comparators.js +2 -2
- package/lib/util/concatenate.js +31 -7
- package/lib/util/createHash.js +0 -1
- package/lib/util/deterministicGrouping.js +19 -12
- package/lib/util/extractSourceMap.js +1 -1
- package/lib/util/findGraphRoots.js +2 -0
- package/lib/util/fs.js +16 -6
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +24 -15
- package/lib/util/identifier.js +7 -0
- package/lib/util/internalSerializables.js +11 -2
- package/lib/util/magicComment.js +42 -0
- package/lib/util/makeSerializable.js +1 -0
- package/lib/util/nonNumericOnlyHash.js +30 -1
- package/lib/util/property.js +7 -1
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +4 -4
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
- package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
- package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
- package/lib/wasm-sync/WebAssemblyParser.js +7 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
- package/package.json +36 -28
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +212 -3
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
- package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +1592 -314
- package/lib/css/walkCssTokens.js +0 -2020
- package/lib/util/AppendOnlyStackedSet.js +0 -93
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
/*
|
|
3
2
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
4
3
|
Author Tobias Koppers @sokra
|
|
@@ -6,29 +5,127 @@
|
|
|
6
5
|
|
|
7
6
|
"use strict";
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
/** @typedef {string | number} ModuleId */
|
|
9
|
+
/** @typedef {Record<string, unknown>} HotData */
|
|
10
|
+
/** @typedef {(data: HotData) => void} DisposeHandler */
|
|
11
|
+
/** @typedef {(outdatedDependencies: ModuleId[]) => void} AcceptCallback */
|
|
12
|
+
/** @typedef {(err: unknown, context: { moduleId: ModuleId, dependencyId: ModuleId }) => void} AcceptErrorHandler */
|
|
13
|
+
/** @typedef {{ type: string, moduleId: ModuleId, dependencyId?: ModuleId, error: unknown, originalError?: unknown }} HotErrorEvent */
|
|
14
|
+
/** @typedef {(reportError: (err: unknown) => void) => Promise<ModuleId[]>} ApplyFn */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {object} ApplyOptions
|
|
18
|
+
* @property {boolean=} ignoreUnaccepted ignore unaccepted modules
|
|
19
|
+
* @property {boolean=} ignoreDeclined ignore declined modules
|
|
20
|
+
* @property {boolean=} ignoreErrored ignore errors thrown while applying
|
|
21
|
+
* @property {((event: ModuleEffect) => void)=} onDeclined called for declined modules
|
|
22
|
+
* @property {((event: ModuleEffect) => void)=} onUnaccepted called for unaccepted modules
|
|
23
|
+
* @property {((event: ModuleEffect) => void)=} onAccepted called for accepted modules
|
|
24
|
+
* @property {((event: ModuleEffect) => void)=} onDisposed called for disposed modules
|
|
25
|
+
* @property {((event: HotErrorEvent) => void)=} onErrored called on apply errors
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {object} ApplyResult
|
|
30
|
+
* @property {Error=} error fatal error that aborts the update
|
|
31
|
+
* @property {(() => void)=} dispose dispose phase of the update
|
|
32
|
+
* @property {ApplyFn=} apply apply phase of the update
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/** @typedef {(options: ApplyOptions) => ApplyResult} ApplyHandler */
|
|
36
|
+
/** @typedef {(moduleId: ModuleId, applyHandlers: ApplyHandler[]) => void} InvalidateModuleHandler */
|
|
37
|
+
/** @typedef {(chunkIds: ModuleId[], removedChunks: ModuleId[], removedModules: ModuleId[], promises: Promise<unknown>[], applyHandlers: ApplyHandler[], updatedModulesList: ModuleId[], css: ModuleId[] | undefined, forceLoadChunks: ModuleId[] | undefined) => void} DownloadUpdateHandler */
|
|
38
|
+
/** @typedef {(chunkId: ModuleId, promises: Promise<unknown>[]) => void} EnsureChunkHandler */
|
|
39
|
+
/** @typedef {(webpackRequire: (id: ModuleId) => unknown) => void} RuntimeModuleFn */
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @typedef {object} Hot
|
|
43
|
+
* @property {Record<ModuleId, AcceptCallback>} _acceptedDependencies accept callbacks by dependency id
|
|
44
|
+
* @property {Record<ModuleId, AcceptErrorHandler | undefined>} _acceptedErrorHandlers error handlers by dependency id
|
|
45
|
+
* @property {Record<ModuleId, boolean>} _declinedDependencies declined dependency ids
|
|
46
|
+
* @property {boolean | EXPECTED_FUNCTION} _selfAccepted true or the self-accept error handler
|
|
47
|
+
* @property {boolean} _selfDeclined module declined itself
|
|
48
|
+
* @property {boolean} _selfInvalidated module invalidated itself
|
|
49
|
+
* @property {DisposeHandler[]} _disposeHandlers registered dispose handlers
|
|
50
|
+
* @property {boolean} _main module is the entry of the update
|
|
51
|
+
* @property {() => void} _requireSelf re-require the module on apply
|
|
52
|
+
* @property {boolean} active module is not disposed
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @typedef {object} HotModule
|
|
57
|
+
* @property {ModuleId} id module id
|
|
58
|
+
* @property {Hot} hot hot API of the module
|
|
59
|
+
* @property {ModuleId[]} parents ids of modules requiring this module
|
|
60
|
+
* @property {ModuleId[]} children ids of modules required by this module
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @typedef {object} ModuleEffect
|
|
65
|
+
* @property {string} type effect type
|
|
66
|
+
* @property {ModuleId} moduleId affected module id
|
|
67
|
+
* @property {ModuleId[]=} chain update propagation chain
|
|
68
|
+
* @property {ModuleId=} parentId declining parent id
|
|
69
|
+
* @property {ModuleId[]=} outdatedModules outdated module ids
|
|
70
|
+
* @property {Record<ModuleId, ModuleId[]>=} outdatedDependencies outdated dependencies by module id
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/** @typedef {{ chain: ModuleId[], id: ModuleId }} QueueItem */
|
|
74
|
+
/** @typedef {{ module: ModuleId, require: (id?: ModuleId) => void, errorHandler: boolean | EXPECTED_FUNCTION }} SelfAcceptedModule */
|
|
75
|
+
|
|
76
|
+
// Globals injected by code generation; declared here only to type the template.
|
|
77
|
+
/* eslint-disable no-unassigned-vars */
|
|
78
|
+
/** @type {Record<ModuleId, unknown>} */
|
|
79
|
+
var $installedChunks$;
|
|
80
|
+
/** @type {(chunkId: ModuleId, updatedModulesList?: ModuleId[]) => Promise<unknown>} */
|
|
81
|
+
var $loadUpdateChunk$;
|
|
82
|
+
/** @type {Record<ModuleId, HotModule>} */
|
|
83
|
+
var $moduleCache$;
|
|
84
|
+
/** @type {Record<ModuleId, EXPECTED_FUNCTION>} */
|
|
85
|
+
var $moduleFactories$;
|
|
86
|
+
/** @type {Record<string, EnsureChunkHandler>} */
|
|
87
|
+
var $ensureChunkHandlers$;
|
|
88
|
+
/** @type {(obj: object, key: ModuleId) => boolean} */
|
|
89
|
+
var $hasOwnProperty$;
|
|
90
|
+
/** @type {Record<ModuleId, HotData>} */
|
|
91
|
+
var $hmrModuleData$;
|
|
92
|
+
/** @type {Record<string, DownloadUpdateHandler>} */
|
|
93
|
+
var $hmrDownloadUpdateHandlers$;
|
|
94
|
+
/** @type {Record<string, InvalidateModuleHandler>} */
|
|
95
|
+
var $hmrInvalidateModuleHandlers$;
|
|
96
|
+
/** @type {(id: ModuleId) => unknown} */
|
|
97
|
+
var __webpack_require__;
|
|
98
|
+
/* eslint-enable no-unassigned-vars */
|
|
19
99
|
|
|
20
100
|
module.exports = function () {
|
|
101
|
+
/** @type {Record<ModuleId, boolean>} */
|
|
21
102
|
var currentUpdateChunks;
|
|
103
|
+
/** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */
|
|
22
104
|
var currentUpdate;
|
|
105
|
+
/** @type {ModuleId[]} */
|
|
23
106
|
var currentUpdateRemovedChunks;
|
|
107
|
+
/** @type {RuntimeModuleFn[]} */
|
|
24
108
|
var currentUpdateRuntime;
|
|
109
|
+
/**
|
|
110
|
+
* @param {ApplyOptions} options apply options
|
|
111
|
+
* @returns {ApplyResult} dispose/apply handlers or a fatal error
|
|
112
|
+
*/
|
|
25
113
|
function applyHandler(options) {
|
|
26
114
|
if ($ensureChunkHandlers$) delete $ensureChunkHandlers$.$key$Hmr;
|
|
27
|
-
currentUpdateChunks =
|
|
115
|
+
currentUpdateChunks = /** @type {Record<ModuleId, boolean>} */ (
|
|
116
|
+
/** @type {unknown} */ (undefined)
|
|
117
|
+
);
|
|
118
|
+
/**
|
|
119
|
+
* @param {ModuleId} updateModuleId updated module id
|
|
120
|
+
* @returns {ModuleEffect} effect of updating the module
|
|
121
|
+
*/
|
|
28
122
|
function getAffectedModuleEffects(updateModuleId) {
|
|
123
|
+
/** @type {ModuleId[]} */
|
|
29
124
|
var outdatedModules = [updateModuleId];
|
|
125
|
+
/** @type {Record<ModuleId, ModuleId[]>} */
|
|
30
126
|
var outdatedDependencies = {};
|
|
31
127
|
|
|
128
|
+
/** @type {QueueItem[]} */
|
|
32
129
|
var queue = outdatedModules.map(function (id) {
|
|
33
130
|
return {
|
|
34
131
|
chain: [id],
|
|
@@ -36,7 +133,7 @@ module.exports = function () {
|
|
|
36
133
|
};
|
|
37
134
|
});
|
|
38
135
|
while (queue.length > 0) {
|
|
39
|
-
var queueItem = queue.pop();
|
|
136
|
+
var queueItem = /** @type {QueueItem} */ (queue.pop());
|
|
40
137
|
var moduleId = queueItem.id;
|
|
41
138
|
var chain = queueItem.chain;
|
|
42
139
|
var module = $moduleCache$[moduleId];
|
|
@@ -95,6 +192,11 @@ module.exports = function () {
|
|
|
95
192
|
};
|
|
96
193
|
}
|
|
97
194
|
|
|
195
|
+
/**
|
|
196
|
+
* @param {ModuleId[]} a target set
|
|
197
|
+
* @param {ModuleId[]} b items to add
|
|
198
|
+
* @returns {void}
|
|
199
|
+
*/
|
|
98
200
|
function addAllToSet(a, b) {
|
|
99
201
|
for (var i = 0; i < b.length; i++) {
|
|
100
202
|
var item = b[i];
|
|
@@ -104,10 +206,17 @@ module.exports = function () {
|
|
|
104
206
|
|
|
105
207
|
// at begin all updates modules are outdated
|
|
106
208
|
// the "outdated" status can propagate to parents if they don't accept the children
|
|
209
|
+
/** @type {Record<ModuleId, ModuleId[]>} */
|
|
107
210
|
var outdatedDependencies = {};
|
|
211
|
+
/** @type {ModuleId[]} */
|
|
108
212
|
var outdatedModules = [];
|
|
213
|
+
/** @type {Record<ModuleId, EXPECTED_FUNCTION>} */
|
|
109
214
|
var appliedUpdate = {};
|
|
110
215
|
|
|
216
|
+
/**
|
|
217
|
+
* @param {HotModule} module disposed module
|
|
218
|
+
* @returns {void}
|
|
219
|
+
*/
|
|
111
220
|
var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
|
|
112
221
|
console.warn(
|
|
113
222
|
"[HMR] unexpected require(" + module.id + ") to disposed module"
|
|
@@ -117,6 +226,7 @@ module.exports = function () {
|
|
|
117
226
|
for (var moduleId in currentUpdate) {
|
|
118
227
|
if ($hasOwnProperty$(currentUpdate, moduleId)) {
|
|
119
228
|
var newModuleFactory = currentUpdate[moduleId];
|
|
229
|
+
/** @type {ModuleEffect} */
|
|
120
230
|
var result = newModuleFactory
|
|
121
231
|
? getAffectedModuleEffects(moduleId)
|
|
122
232
|
: {
|
|
@@ -176,15 +286,24 @@ module.exports = function () {
|
|
|
176
286
|
};
|
|
177
287
|
}
|
|
178
288
|
if (doApply) {
|
|
179
|
-
appliedUpdate[moduleId] =
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
289
|
+
appliedUpdate[moduleId] = /** @type {EXPECTED_FUNCTION} */ (
|
|
290
|
+
newModuleFactory
|
|
291
|
+
);
|
|
292
|
+
addAllToSet(
|
|
293
|
+
outdatedModules,
|
|
294
|
+
/** @type {ModuleId[]} */ (result.outdatedModules)
|
|
295
|
+
);
|
|
296
|
+
var resultOutdatedDependencies =
|
|
297
|
+
/** @type {Record<ModuleId, ModuleId[]>} */ (
|
|
298
|
+
result.outdatedDependencies
|
|
299
|
+
);
|
|
300
|
+
for (moduleId in resultOutdatedDependencies) {
|
|
301
|
+
if ($hasOwnProperty$(resultOutdatedDependencies, moduleId)) {
|
|
183
302
|
if (!outdatedDependencies[moduleId])
|
|
184
303
|
outdatedDependencies[moduleId] = [];
|
|
185
304
|
addAllToSet(
|
|
186
305
|
outdatedDependencies[moduleId],
|
|
187
|
-
|
|
306
|
+
resultOutdatedDependencies[moduleId]
|
|
188
307
|
);
|
|
189
308
|
}
|
|
190
309
|
}
|
|
@@ -195,9 +314,12 @@ module.exports = function () {
|
|
|
195
314
|
}
|
|
196
315
|
}
|
|
197
316
|
}
|
|
198
|
-
currentUpdate =
|
|
317
|
+
currentUpdate = /** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */ (
|
|
318
|
+
/** @type {unknown} */ (undefined)
|
|
319
|
+
);
|
|
199
320
|
|
|
200
321
|
// Store self accepted outdated modules to require them later by the module system
|
|
322
|
+
/** @type {SelfAcceptedModule[]} */
|
|
201
323
|
var outdatedSelfAcceptedModules = [];
|
|
202
324
|
for (var j = 0; j < outdatedModules.length; j++) {
|
|
203
325
|
var outdatedModuleId = outdatedModules[j];
|
|
@@ -218,6 +340,7 @@ module.exports = function () {
|
|
|
218
340
|
}
|
|
219
341
|
}
|
|
220
342
|
|
|
343
|
+
/** @type {ModuleId[]} */
|
|
221
344
|
var moduleOutdatedDependencies;
|
|
222
345
|
|
|
223
346
|
return {
|
|
@@ -225,15 +348,18 @@ module.exports = function () {
|
|
|
225
348
|
currentUpdateRemovedChunks.forEach(function (chunkId) {
|
|
226
349
|
delete $installedChunks$[chunkId];
|
|
227
350
|
});
|
|
228
|
-
currentUpdateRemovedChunks =
|
|
351
|
+
currentUpdateRemovedChunks = /** @type {ModuleId[]} */ (
|
|
352
|
+
/** @type {unknown} */ (undefined)
|
|
353
|
+
);
|
|
229
354
|
|
|
230
355
|
var idx;
|
|
231
356
|
var queue = outdatedModules.slice();
|
|
232
357
|
while (queue.length > 0) {
|
|
233
|
-
var moduleId = queue.pop();
|
|
358
|
+
var moduleId = /** @type {ModuleId} */ (queue.pop());
|
|
234
359
|
var module = $moduleCache$[moduleId];
|
|
235
360
|
if (!module) continue;
|
|
236
361
|
|
|
362
|
+
/** @type {HotData} */
|
|
237
363
|
var data = {};
|
|
238
364
|
|
|
239
365
|
// Call dispose handlers
|
|
@@ -281,6 +407,7 @@ module.exports = function () {
|
|
|
281
407
|
}
|
|
282
408
|
},
|
|
283
409
|
apply: function (reportError) {
|
|
410
|
+
/** @type {Promise<unknown>[]} */
|
|
284
411
|
var acceptPromises = [];
|
|
285
412
|
// insert new code
|
|
286
413
|
for (var updateModuleId in appliedUpdate) {
|
|
@@ -301,8 +428,11 @@ module.exports = function () {
|
|
|
301
428
|
if (module) {
|
|
302
429
|
moduleOutdatedDependencies =
|
|
303
430
|
outdatedDependencies[outdatedModuleId];
|
|
431
|
+
/** @type {AcceptCallback[]} */
|
|
304
432
|
var callbacks = [];
|
|
433
|
+
/** @type {(AcceptErrorHandler | undefined)[]} */
|
|
305
434
|
var errorHandlers = [];
|
|
435
|
+
/** @type {ModuleId[]} */
|
|
306
436
|
var dependenciesForCallbacks = [];
|
|
307
437
|
for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
|
|
308
438
|
var dependency = moduleOutdatedDependencies[j];
|
|
@@ -318,13 +448,15 @@ module.exports = function () {
|
|
|
318
448
|
}
|
|
319
449
|
}
|
|
320
450
|
for (var k = 0; k < callbacks.length; k++) {
|
|
451
|
+
/** @type {unknown} */
|
|
321
452
|
var result;
|
|
322
453
|
try {
|
|
323
454
|
result = callbacks[k].call(null, moduleOutdatedDependencies);
|
|
324
455
|
} catch (err) {
|
|
325
456
|
if (typeof errorHandlers[k] === "function") {
|
|
326
457
|
try {
|
|
327
|
-
|
|
458
|
+
/** @type {AcceptErrorHandler} */
|
|
459
|
+
(errorHandlers[k])(err, {
|
|
328
460
|
moduleId: outdatedModuleId,
|
|
329
461
|
dependencyId: dependenciesForCallbacks[k]
|
|
330
462
|
});
|
|
@@ -357,8 +489,12 @@ module.exports = function () {
|
|
|
357
489
|
}
|
|
358
490
|
}
|
|
359
491
|
}
|
|
360
|
-
if (
|
|
361
|
-
|
|
492
|
+
if (
|
|
493
|
+
result &&
|
|
494
|
+
typeof (/** @type {{ then?: unknown }} */ (result).then) ===
|
|
495
|
+
"function"
|
|
496
|
+
) {
|
|
497
|
+
acceptPromises.push(/** @type {Promise<unknown>} */ (result));
|
|
362
498
|
}
|
|
363
499
|
}
|
|
364
500
|
}
|
|
@@ -434,7 +570,9 @@ module.exports = function () {
|
|
|
434
570
|
removedModules,
|
|
435
571
|
promises,
|
|
436
572
|
applyHandlers,
|
|
437
|
-
updatedModulesList
|
|
573
|
+
updatedModulesList,
|
|
574
|
+
css,
|
|
575
|
+
forceLoadChunks
|
|
438
576
|
) {
|
|
439
577
|
applyHandlers.push(applyHandler);
|
|
440
578
|
currentUpdateChunks = {};
|
|
@@ -442,7 +580,7 @@ module.exports = function () {
|
|
|
442
580
|
currentUpdate = removedModules.reduce(function (obj, key) {
|
|
443
581
|
obj[key] = false;
|
|
444
582
|
return obj;
|
|
445
|
-
}, {});
|
|
583
|
+
}, /** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */ ({}));
|
|
446
584
|
currentUpdateRuntime = [];
|
|
447
585
|
chunkIds.forEach(function (chunkId) {
|
|
448
586
|
if (
|
|
@@ -466,6 +604,15 @@ module.exports = function () {
|
|
|
466
604
|
currentUpdateChunks[chunkId] = true;
|
|
467
605
|
}
|
|
468
606
|
};
|
|
607
|
+
// Force-load chunks that now own modules orphaned by a removed chunk;
|
|
608
|
+
// ensure handlers skip already-installed chunks, so no guard is needed.
|
|
609
|
+
if (forceLoadChunks) {
|
|
610
|
+
forceLoadChunks.forEach(function (chunkId) {
|
|
611
|
+
Object.keys($ensureChunkHandlers$).forEach(function (key) {
|
|
612
|
+
$ensureChunkHandlers$[key](chunkId, promises);
|
|
613
|
+
});
|
|
614
|
+
});
|
|
615
|
+
}
|
|
469
616
|
}
|
|
470
617
|
};
|
|
471
618
|
};
|
|
@@ -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 */
|
|
@@ -45,6 +47,96 @@ const { registerNotSerializable } = require("../util/serialization");
|
|
|
45
47
|
|
|
46
48
|
/** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
|
|
47
49
|
|
|
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
|
+
|
|
48
140
|
/**
|
|
49
141
|
* Defines the backend api type used by this module.
|
|
50
142
|
* @typedef {object} BackendApi
|
|
@@ -88,6 +180,7 @@ class LazyCompilationDependency extends Dependency {
|
|
|
88
180
|
*/
|
|
89
181
|
constructor(proxyModule) {
|
|
90
182
|
super();
|
|
183
|
+
/** @type {LazyCompilationProxyModule} */
|
|
91
184
|
this.proxyModule = proxyModule;
|
|
92
185
|
}
|
|
93
186
|
|
|
@@ -110,6 +203,14 @@ class LazyCompilationDependency extends Dependency {
|
|
|
110
203
|
|
|
111
204
|
registerNotSerializable(LazyCompilationDependency);
|
|
112
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
|
+
|
|
113
214
|
class LazyCompilationProxyModule extends Module {
|
|
114
215
|
/**
|
|
115
216
|
* Creates an instance of LazyCompilationProxyModule.
|
|
@@ -126,10 +227,18 @@ class LazyCompilationProxyModule extends Module {
|
|
|
126
227
|
context,
|
|
127
228
|
originalModule.layer
|
|
128
229
|
);
|
|
230
|
+
// Redeclared with the lazy compilation proxy specific shape
|
|
231
|
+
/** @type {LazyCompilationProxyModuleBuildInfo | undefined} */
|
|
232
|
+
this.buildInfo = undefined;
|
|
233
|
+
/** @type {Module} */
|
|
129
234
|
this.originalModule = originalModule;
|
|
235
|
+
/** @type {string} */
|
|
130
236
|
this.request = request;
|
|
237
|
+
/** @type {string} */
|
|
131
238
|
this.client = client;
|
|
239
|
+
/** @type {string} */
|
|
132
240
|
this.data = data;
|
|
241
|
+
/** @type {boolean} */
|
|
133
242
|
this.active = active;
|
|
134
243
|
}
|
|
135
244
|
|
|
@@ -213,6 +322,19 @@ class LazyCompilationProxyModule extends Module {
|
|
|
213
322
|
const block = new AsyncDependenciesBlock({});
|
|
214
323
|
block.addDependency(dep);
|
|
215
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
|
+
}
|
|
216
338
|
}
|
|
217
339
|
callback();
|
|
218
340
|
}
|
|
@@ -250,17 +372,19 @@ class LazyCompilationProxyModule extends Module {
|
|
|
250
372
|
);
|
|
251
373
|
const clientModule = moduleGraph.getModule(clientDep);
|
|
252
374
|
const block = this.blocks[0];
|
|
375
|
+
const cst = runtimeTemplate.renderConst();
|
|
376
|
+
const lt = runtimeTemplate.renderLet();
|
|
253
377
|
const client = Template.asString([
|
|
254
|
-
|
|
378
|
+
`${cst} client = ${runtimeTemplate.moduleExports({
|
|
255
379
|
module: clientModule,
|
|
256
380
|
chunkGraph,
|
|
257
381
|
request: clientDep.userRequest,
|
|
258
382
|
runtimeRequirements
|
|
259
383
|
})}`,
|
|
260
|
-
|
|
384
|
+
`${cst} data = ${JSON.stringify(this.data)};`
|
|
261
385
|
]);
|
|
262
386
|
const keepActive = Template.asString([
|
|
263
|
-
|
|
387
|
+
`${cst} dispose = client.keepAlive({ data: data, active: ${JSON.stringify(
|
|
264
388
|
Boolean(block)
|
|
265
389
|
)}, module: module, onError: onError });`
|
|
266
390
|
]);
|
|
@@ -288,7 +412,7 @@ class LazyCompilationProxyModule extends Module {
|
|
|
288
412
|
chunkGraph.getModuleId(module)
|
|
289
413
|
)}, function() { module.hot.invalidate(); });`,
|
|
290
414
|
"module.hot.dispose(function(data) { delete data.resolveSelf; dispose(data); });",
|
|
291
|
-
|
|
415
|
+
`if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`
|
|
292
416
|
]),
|
|
293
417
|
"}",
|
|
294
418
|
"function onError() { /* ignore */ }",
|
|
@@ -297,12 +421,12 @@ class LazyCompilationProxyModule extends Module {
|
|
|
297
421
|
} else {
|
|
298
422
|
source = Template.asString([
|
|
299
423
|
client,
|
|
300
|
-
|
|
424
|
+
`${lt} resolveSelf, onError;`,
|
|
301
425
|
"module.exports = new Promise(function(resolve, reject) { resolveSelf = resolve; onError = reject; });",
|
|
302
426
|
"if (module.hot) {",
|
|
303
427
|
Template.indent([
|
|
304
428
|
"module.hot.accept();",
|
|
305
|
-
|
|
429
|
+
`if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`,
|
|
306
430
|
"module.hot.dispose(function(data) { data.resolveSelf = resolveSelf; dispose(data); });"
|
|
307
431
|
]),
|
|
308
432
|
"}",
|
|
@@ -388,9 +512,13 @@ class LazyCompilationPlugin {
|
|
|
388
512
|
* @param {Options} options options
|
|
389
513
|
*/
|
|
390
514
|
constructor({ backend, entries, imports, test }) {
|
|
515
|
+
/** @type {BackEnd} */
|
|
391
516
|
this.backend = backend;
|
|
517
|
+
/** @type {boolean | undefined} */
|
|
392
518
|
this.entries = entries;
|
|
519
|
+
/** @type {boolean | undefined} */
|
|
393
520
|
this.imports = imports;
|
|
521
|
+
/** @type {string | RegExp | TestFn | undefined} */
|
|
394
522
|
this.test = test;
|
|
395
523
|
}
|
|
396
524
|
|