webpack 5.107.2 → 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 +25 -11
- package/lib/ConcatenationScope.js +10 -3
- package/lib/ContextExclusionPlugin.js +1 -0
- package/lib/ContextModule.js +92 -47
- 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 +2 -0
- package/lib/MultiStats.js +1 -0
- package/lib/MultiWatching.js +2 -0
- package/lib/NodeStuffPlugin.js +22 -17
- package/lib/NormalModule.js +142 -80
- package/lib/NormalModuleReplacementPlugin.js +2 -0
- package/lib/PrefetchPlugin.js +2 -0
- package/lib/ProgressPlugin.js +8 -0
- 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 +3 -5
- 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 +64 -7
- 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/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 +18 -15
- 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} +261 -109
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +17 -13
- package/lib/dependencies/HtmlInlineStyleDependency.js +45 -11
- 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 +22 -6
- 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 +30 -6
- package/lib/html/HtmlGenerator.js +217 -23
- package/lib/html/HtmlModule.js +40 -0
- package/lib/html/HtmlModulesPlugin.js +219 -55
- 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 +285 -158
- 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 +24 -5
- package/lib/library/SystemLibraryPlugin.js +3 -3
- package/lib/node/NodeTargetPlugin.js +1 -0
- package/lib/node/NodeWatchFileSystem.js +1 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
- package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
- package/lib/optimize/ConcatenatedModule.js +395 -77
- 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 +10 -5
- 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 +35 -27
- 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 +1456 -290
- package/lib/css/walkCssTokens.js +0 -2020
- package/lib/util/AppendOnlyStackedSet.js +0 -93
|
@@ -32,6 +32,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
32
32
|
*/
|
|
33
33
|
constructor(runtimeRequirements) {
|
|
34
34
|
super("consumes", RuntimeModule.STAGE_ATTACH);
|
|
35
|
+
/** @type {ReadOnlyRuntimeRequirements} */
|
|
35
36
|
this._runtimeRequirements = runtimeRequirements;
|
|
36
37
|
}
|
|
37
38
|
|
|
@@ -100,19 +101,20 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
100
101
|
addModules(modules, chunk, initialConsumes);
|
|
101
102
|
}
|
|
102
103
|
if (moduleIdToSourceMapping.size === 0) return null;
|
|
104
|
+
const cst = runtimeTemplate.renderConst();
|
|
103
105
|
return Template.asString([
|
|
104
106
|
parseVersionRuntimeCode(runtimeTemplate),
|
|
105
107
|
versionLtRuntimeCode(runtimeTemplate),
|
|
106
108
|
rangeToStringRuntimeCode(runtimeTemplate),
|
|
107
109
|
satisfyRuntimeCode(runtimeTemplate),
|
|
108
|
-
|
|
110
|
+
`${cst} exists = ${runtimeTemplate.basicFunction("scope, key", [
|
|
109
111
|
`return scope && ${RuntimeGlobals.hasOwnProperty}(scope, key);`
|
|
110
112
|
])}`,
|
|
111
|
-
|
|
113
|
+
`${cst} get = ${runtimeTemplate.basicFunction("entry", [
|
|
112
114
|
"entry.loaded = 1;",
|
|
113
115
|
"return entry.get()"
|
|
114
116
|
])};`,
|
|
115
|
-
|
|
117
|
+
`${cst} eagerOnly = ${runtimeTemplate.basicFunction("versions", [
|
|
116
118
|
`return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
|
|
117
119
|
"filtered, version",
|
|
118
120
|
Template.indent([
|
|
@@ -123,10 +125,10 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
123
125
|
])
|
|
124
126
|
)}, {});`
|
|
125
127
|
])};`,
|
|
126
|
-
|
|
128
|
+
`${cst} findLatestVersion = ${runtimeTemplate.basicFunction(
|
|
127
129
|
"scope, key, eager",
|
|
128
130
|
[
|
|
129
|
-
|
|
131
|
+
`${cst} versions = eager ? eagerOnly(scope[key]) : scope[key];`,
|
|
130
132
|
`var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
|
|
131
133
|
"a, b",
|
|
132
134
|
["return !a || versionLt(a, b) ? b : a;"]
|
|
@@ -134,10 +136,10 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
134
136
|
"return key && versions[key];"
|
|
135
137
|
]
|
|
136
138
|
)};`,
|
|
137
|
-
|
|
139
|
+
`${cst} findSatisfyingVersion = ${runtimeTemplate.basicFunction(
|
|
138
140
|
"scope, key, requiredVersion, eager",
|
|
139
141
|
[
|
|
140
|
-
|
|
142
|
+
`${cst} versions = eager ? eagerOnly(scope[key]) : scope[key];`,
|
|
141
143
|
`var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
|
|
142
144
|
"a, b",
|
|
143
145
|
[
|
|
@@ -148,26 +150,26 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
148
150
|
"return key && versions[key]"
|
|
149
151
|
]
|
|
150
152
|
)};`,
|
|
151
|
-
|
|
153
|
+
`${cst} findSingletonVersionKey = ${runtimeTemplate.basicFunction(
|
|
152
154
|
"scope, key, eager",
|
|
153
155
|
[
|
|
154
|
-
|
|
156
|
+
`${cst} versions = eager ? eagerOnly(scope[key]) : scope[key];`,
|
|
155
157
|
`return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
|
|
156
158
|
"a, b",
|
|
157
159
|
["return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;"]
|
|
158
160
|
)}, 0);`
|
|
159
161
|
]
|
|
160
162
|
)};`,
|
|
161
|
-
|
|
163
|
+
`${cst} getInvalidSingletonVersionMessage = ${runtimeTemplate.basicFunction(
|
|
162
164
|
"scope, key, version, requiredVersion",
|
|
163
165
|
[
|
|
164
166
|
'return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"'
|
|
165
167
|
]
|
|
166
168
|
)};`,
|
|
167
|
-
|
|
169
|
+
`${cst} getInvalidVersionMessage = ${runtimeTemplate.basicFunction(
|
|
168
170
|
"scope, scopeName, key, requiredVersion, eager",
|
|
169
171
|
[
|
|
170
|
-
|
|
172
|
+
`${cst} versions = scope[key];`,
|
|
171
173
|
'return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\\n" +',
|
|
172
174
|
`\t"Available versions: " + Object.keys(versions).map(${runtimeTemplate.basicFunction(
|
|
173
175
|
"key",
|
|
@@ -175,26 +177,29 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
175
177
|
)}).join(", ");`
|
|
176
178
|
]
|
|
177
179
|
)};`,
|
|
178
|
-
|
|
180
|
+
`${cst} fail = ${runtimeTemplate.basicFunction("msg", [
|
|
179
181
|
"throw new Error(msg);"
|
|
180
182
|
])}`,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
`${cst} failAsNotExist = ${runtimeTemplate.basicFunction(
|
|
184
|
+
"scopeName, key",
|
|
185
|
+
[
|
|
186
|
+
'return fail("Shared module " + key + " doesn\'t exist in shared scope " + scopeName);'
|
|
187
|
+
]
|
|
188
|
+
)}`,
|
|
189
|
+
`${cst} warn = /*#__PURE__*/ ${
|
|
185
190
|
compilation.outputOptions.ignoreBrowserWarnings
|
|
186
191
|
? runtimeTemplate.basicFunction("", "")
|
|
187
192
|
: runtimeTemplate.basicFunction("msg", [
|
|
188
193
|
'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
|
|
189
194
|
])
|
|
190
195
|
};`,
|
|
191
|
-
|
|
196
|
+
`${cst} init = ${runtimeTemplate.returningFunction(
|
|
192
197
|
Template.asString([
|
|
193
198
|
"function(scopeName, key, eager, c, d) {",
|
|
194
199
|
Template.indent([
|
|
195
|
-
|
|
200
|
+
`${cst} promise = ${RuntimeGlobals.initializeSharing}(scopeName);`,
|
|
196
201
|
// if we require eager shared, we expect it to be already loaded before it requested, no need to wait the whole scope loaded.
|
|
197
|
-
|
|
202
|
+
`if (${runtimeTemplate.optionalChaining("promise", "then")} && !eager) { `,
|
|
198
203
|
Template.indent([
|
|
199
204
|
`return promise.then(fn.bind(fn, scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], key, false, c, d));`
|
|
200
205
|
]),
|
|
@@ -206,50 +211,50 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
206
211
|
"fn"
|
|
207
212
|
)};`,
|
|
208
213
|
"",
|
|
209
|
-
|
|
214
|
+
`${cst} useFallback = ${runtimeTemplate.basicFunction(
|
|
210
215
|
"scopeName, key, fallback",
|
|
211
216
|
["return fallback ? fallback() : failAsNotExist(scopeName, key);"]
|
|
212
217
|
)}`,
|
|
213
|
-
|
|
218
|
+
`${cst} load = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
214
219
|
"scopeName, scope, key, eager, fallback",
|
|
215
220
|
[
|
|
216
221
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
217
222
|
"return get(findLatestVersion(scope, key, eager));"
|
|
218
223
|
]
|
|
219
224
|
)});`,
|
|
220
|
-
|
|
225
|
+
`${cst} loadVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
221
226
|
"scopeName, scope, key, eager, requiredVersion, fallback",
|
|
222
227
|
[
|
|
223
228
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
224
|
-
|
|
229
|
+
`${cst} satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);`,
|
|
225
230
|
"if (satisfyingVersion) return get(satisfyingVersion);",
|
|
226
231
|
"warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))",
|
|
227
232
|
"return get(findLatestVersion(scope, key, eager));"
|
|
228
233
|
]
|
|
229
234
|
)});`,
|
|
230
|
-
|
|
235
|
+
`${cst} loadStrictVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
231
236
|
"scopeName, scope, key, eager, requiredVersion, fallback",
|
|
232
237
|
[
|
|
233
238
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
234
|
-
|
|
239
|
+
`${cst} satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);`,
|
|
235
240
|
"if (satisfyingVersion) return get(satisfyingVersion);",
|
|
236
241
|
"if (fallback) return fallback();",
|
|
237
242
|
"fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));"
|
|
238
243
|
]
|
|
239
244
|
)});`,
|
|
240
|
-
|
|
245
|
+
`${cst} loadSingleton = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
241
246
|
"scopeName, scope, key, eager, fallback",
|
|
242
247
|
[
|
|
243
248
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
244
|
-
|
|
249
|
+
`${cst} version = findSingletonVersionKey(scope, key, eager);`,
|
|
245
250
|
"return get(scope[key][version]);"
|
|
246
251
|
]
|
|
247
252
|
)});`,
|
|
248
|
-
|
|
253
|
+
`${cst} loadSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
249
254
|
"scopeName, scope, key, eager, requiredVersion, fallback",
|
|
250
255
|
[
|
|
251
256
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
252
|
-
|
|
257
|
+
`${cst} version = findSingletonVersionKey(scope, key, eager);`,
|
|
253
258
|
"if (!satisfy(requiredVersion, version)) {",
|
|
254
259
|
Template.indent([
|
|
255
260
|
"warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
|
|
@@ -258,11 +263,11 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
258
263
|
"return get(scope[key][version]);"
|
|
259
264
|
]
|
|
260
265
|
)});`,
|
|
261
|
-
|
|
266
|
+
`${cst} loadStrictSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
|
|
262
267
|
"scopeName, scope, key, eager, requiredVersion, fallback",
|
|
263
268
|
[
|
|
264
269
|
"if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
|
|
265
|
-
|
|
270
|
+
`${cst} version = findSingletonVersionKey(scope, key, eager);`,
|
|
266
271
|
"if (!satisfy(requiredVersion, version)) {",
|
|
267
272
|
Template.indent([
|
|
268
273
|
"fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
|
|
@@ -271,8 +276,8 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
271
276
|
"return get(scope[key][version]);"
|
|
272
277
|
]
|
|
273
278
|
)});`,
|
|
274
|
-
|
|
275
|
-
|
|
279
|
+
`${cst} installedModules = {};`,
|
|
280
|
+
`${cst} moduleToHandlerMapping = {`,
|
|
276
281
|
Template.indent(
|
|
277
282
|
Array.from(
|
|
278
283
|
moduleIdToSourceMapping,
|
|
@@ -283,7 +288,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
283
288
|
|
|
284
289
|
initialConsumes.length > 0
|
|
285
290
|
? Template.asString([
|
|
286
|
-
|
|
291
|
+
`${cst} initialConsumes = ${JSON.stringify(initialConsumes)};`,
|
|
287
292
|
`initialConsumes.forEach(${runtimeTemplate.basicFunction("id", [
|
|
288
293
|
`${
|
|
289
294
|
RuntimeGlobals.moduleFactories
|
|
@@ -291,7 +296,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
291
296
|
"// Handle case when module is used sync",
|
|
292
297
|
"installedModules[id] = 0;",
|
|
293
298
|
`delete ${RuntimeGlobals.moduleCache}[id];`,
|
|
294
|
-
|
|
299
|
+
`${cst} factory = moduleToHandlerMapping[id]();`,
|
|
295
300
|
'if(typeof factory !== "function") throw new Error("Shared module is not available for eager consumption: " + id);',
|
|
296
301
|
"module.exports = factory();"
|
|
297
302
|
])}`
|
|
@@ -300,12 +305,12 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
300
305
|
: "// no consumes in initial chunks",
|
|
301
306
|
this._runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers)
|
|
302
307
|
? Template.asString([
|
|
303
|
-
|
|
308
|
+
`${cst} chunkMapping = ${JSON.stringify(
|
|
304
309
|
chunkToModuleMapping,
|
|
305
310
|
null,
|
|
306
311
|
"\t"
|
|
307
312
|
)};`,
|
|
308
|
-
|
|
313
|
+
`${cst} startedInstallModules = {};`,
|
|
309
314
|
`${
|
|
310
315
|
RuntimeGlobals.ensureChunkHandlers
|
|
311
316
|
}.consumes = ${runtimeTemplate.basicFunction("chunkId, promises", [
|
|
@@ -316,7 +321,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
316
321
|
[
|
|
317
322
|
`if(${RuntimeGlobals.hasOwnProperty}(installedModules, id)) return promises.push(installedModules[id]);`,
|
|
318
323
|
"if(!startedInstallModules[id]) {",
|
|
319
|
-
|
|
324
|
+
`${cst} onFactory = ${runtimeTemplate.basicFunction(
|
|
320
325
|
"factory",
|
|
321
326
|
[
|
|
322
327
|
"installedModules[id] = 0;",
|
|
@@ -329,7 +334,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
329
334
|
]
|
|
330
335
|
)};`,
|
|
331
336
|
"startedInstallModules[id] = true;",
|
|
332
|
-
|
|
337
|
+
`${cst} onError = ${runtimeTemplate.basicFunction("error", [
|
|
333
338
|
"delete installedModules[id];",
|
|
334
339
|
`${
|
|
335
340
|
RuntimeGlobals.moduleFactories
|
|
@@ -340,7 +345,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|
|
340
345
|
])};`,
|
|
341
346
|
"try {",
|
|
342
347
|
Template.indent([
|
|
343
|
-
|
|
348
|
+
`${cst} promise = moduleToHandlerMapping[id]();`,
|
|
344
349
|
"if(promise.then) {",
|
|
345
350
|
Template.indent(
|
|
346
351
|
"promises.push(installedModules[id] = promise.then(onFactory)['catch'](onError));"
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
const Dependency = require("../Dependency");
|
|
9
9
|
const makeSerializable = require("../util/makeSerializable");
|
|
10
10
|
|
|
11
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
12
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
11
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, string, string | false, boolean]>} ObjectDeserializerContext */
|
|
12
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, string, string, string | false, boolean]>} ObjectSerializerContext */
|
|
13
13
|
|
|
14
14
|
class ProvideSharedDependency extends Dependency {
|
|
15
15
|
/**
|
|
@@ -22,10 +22,15 @@ class ProvideSharedDependency extends Dependency {
|
|
|
22
22
|
*/
|
|
23
23
|
constructor(shareScope, name, version, request, eager) {
|
|
24
24
|
super();
|
|
25
|
+
/** @type {string} */
|
|
25
26
|
this.shareScope = shareScope;
|
|
27
|
+
/** @type {string} */
|
|
26
28
|
this.name = name;
|
|
29
|
+
/** @type {string | false} */
|
|
27
30
|
this.version = version;
|
|
31
|
+
/** @type {string} */
|
|
28
32
|
this.request = request;
|
|
33
|
+
/** @type {boolean} */
|
|
29
34
|
this.eager = eager;
|
|
30
35
|
}
|
|
31
36
|
|
|
@@ -48,11 +53,12 @@ class ProvideSharedDependency extends Dependency {
|
|
|
48
53
|
* @param {ObjectSerializerContext} context context
|
|
49
54
|
*/
|
|
50
55
|
serialize(context) {
|
|
51
|
-
context
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
context
|
|
57
|
+
.write(this.shareScope)
|
|
58
|
+
.write(this.name)
|
|
59
|
+
.write(this.request)
|
|
60
|
+
.write(this.version)
|
|
61
|
+
.write(this.eager);
|
|
56
62
|
super.serialize(context);
|
|
57
63
|
}
|
|
58
64
|
|
|
@@ -62,16 +68,25 @@ class ProvideSharedDependency extends Dependency {
|
|
|
62
68
|
* @returns {ProvideSharedDependency} deserialize fallback dependency
|
|
63
69
|
*/
|
|
64
70
|
static deserialize(context) {
|
|
65
|
-
|
|
71
|
+
// wire order is shareScope, name, request, version, eager;
|
|
72
|
+
// reorder into the constructor's (…, version, request, …) signature
|
|
73
|
+
const shareScope = context.read();
|
|
74
|
+
const c1 = context.rest;
|
|
75
|
+
const name = c1.read();
|
|
76
|
+
const c2 = c1.rest;
|
|
77
|
+
const request = c2.read();
|
|
78
|
+
const c3 = c2.rest;
|
|
79
|
+
const version = c3.read();
|
|
80
|
+
const c4 = c3.rest;
|
|
81
|
+
const eager = c4.read();
|
|
66
82
|
const obj = new ProvideSharedDependency(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
83
|
+
shareScope,
|
|
84
|
+
name,
|
|
85
|
+
version,
|
|
86
|
+
request,
|
|
87
|
+
eager
|
|
72
88
|
);
|
|
73
|
-
|
|
74
|
-
obj.deserialize(context);
|
|
89
|
+
obj.deserialize(c4.rest);
|
|
75
90
|
return obj;
|
|
76
91
|
}
|
|
77
92
|
}
|
|
@@ -27,8 +27,8 @@ const ProvideForSharedDependency = require("./ProvideForSharedDependency");
|
|
|
27
27
|
/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
|
|
28
28
|
/** @typedef {import("../RequestShortener")} RequestShortener */
|
|
29
29
|
/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
|
|
30
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
31
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
30
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, string | false, string, boolean]>} ObjectDeserializerContext */
|
|
31
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, string, string | false, string, boolean]>} ObjectSerializerContext */
|
|
32
32
|
/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
|
|
33
33
|
|
|
34
34
|
class ProvideSharedModule extends Module {
|
|
@@ -42,10 +42,15 @@ class ProvideSharedModule extends Module {
|
|
|
42
42
|
*/
|
|
43
43
|
constructor(shareScope, name, version, request, eager) {
|
|
44
44
|
super(WEBPACK_MODULE_TYPE_PROVIDE);
|
|
45
|
+
/** @type {string} */
|
|
45
46
|
this._shareScope = shareScope;
|
|
47
|
+
/** @type {string} */
|
|
46
48
|
this._name = name;
|
|
49
|
+
/** @type {string | false} */
|
|
47
50
|
this._version = version;
|
|
51
|
+
/** @type {string} */
|
|
48
52
|
this._request = request;
|
|
53
|
+
/** @type {boolean} */
|
|
49
54
|
this._eager = eager;
|
|
50
55
|
}
|
|
51
56
|
|
|
@@ -177,12 +182,12 @@ class ProvideSharedModule extends Module {
|
|
|
177
182
|
* @param {ObjectSerializerContext} context context
|
|
178
183
|
*/
|
|
179
184
|
serialize(context) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
context
|
|
186
|
+
.write(this._shareScope)
|
|
187
|
+
.write(this._name)
|
|
188
|
+
.write(this._version)
|
|
189
|
+
.write(this._request)
|
|
190
|
+
.write(this._eager);
|
|
186
191
|
super.serialize(context);
|
|
187
192
|
}
|
|
188
193
|
|
|
@@ -192,9 +197,23 @@ class ProvideSharedModule extends Module {
|
|
|
192
197
|
* @returns {ProvideSharedModule} deserialize fallback dependency
|
|
193
198
|
*/
|
|
194
199
|
static deserialize(context) {
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
|
|
200
|
+
const shareScope = context.read();
|
|
201
|
+
const c1 = context.rest;
|
|
202
|
+
const name = c1.read();
|
|
203
|
+
const c2 = c1.rest;
|
|
204
|
+
const version = c2.read();
|
|
205
|
+
const c3 = c2.rest;
|
|
206
|
+
const request = c3.read();
|
|
207
|
+
const c4 = c3.rest;
|
|
208
|
+
const eager = c4.read();
|
|
209
|
+
const obj = new ProvideSharedModule(
|
|
210
|
+
shareScope,
|
|
211
|
+
name,
|
|
212
|
+
version,
|
|
213
|
+
request,
|
|
214
|
+
eager
|
|
215
|
+
);
|
|
216
|
+
obj.deserialize(c4.rest);
|
|
198
217
|
return obj;
|
|
199
218
|
}
|
|
200
219
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const { parseOptions } = require("../container/options");
|
|
9
9
|
const WebpackError = require("../errors/WebpackError");
|
|
10
|
+
const { ABSOLUTE_PATH_REGEXP } = require("../util/identifier");
|
|
10
11
|
const ProvideForSharedDependency = require("./ProvideForSharedDependency");
|
|
11
12
|
const ProvideSharedDependency = require("./ProvideSharedDependency");
|
|
12
13
|
const ProvideSharedModuleFactory = require("./ProvideSharedModuleFactory");
|
|
@@ -35,6 +36,7 @@ class ProvideSharedPlugin {
|
|
|
35
36
|
* @param {ProvideSharedPluginOptions} options options
|
|
36
37
|
*/
|
|
37
38
|
constructor(options) {
|
|
39
|
+
/** @type {ProvideSharedPluginOptions} */
|
|
38
40
|
this.options = options;
|
|
39
41
|
}
|
|
40
42
|
|
|
@@ -100,13 +102,13 @@ class ProvideSharedPlugin {
|
|
|
100
102
|
/** @type {Map<string, ProvideOptions>} */
|
|
101
103
|
const prefixMatchProvides = new Map();
|
|
102
104
|
for (const [request, config] of provides) {
|
|
103
|
-
if (
|
|
105
|
+
if (/^\.\.?(?:\/|$)/.test(request)) {
|
|
104
106
|
// relative request
|
|
105
107
|
resolvedProvideMap.set(request, {
|
|
106
108
|
config,
|
|
107
109
|
version: config.version
|
|
108
110
|
});
|
|
109
|
-
} else if (
|
|
111
|
+
} else if (ABSOLUTE_PATH_REGEXP.test(request)) {
|
|
110
112
|
// absolute path
|
|
111
113
|
resolvedProvideMap.set(request, {
|
|
112
114
|
config,
|
|
@@ -67,8 +67,11 @@ class SharePlugin {
|
|
|
67
67
|
eager: options.eager
|
|
68
68
|
}
|
|
69
69
|
}));
|
|
70
|
+
/** @type {string | undefined} */
|
|
70
71
|
this._shareScope = options.shareScope;
|
|
72
|
+
/** @type {Record<string, ConsumesConfig>[]} */
|
|
71
73
|
this._consumes = consumes;
|
|
74
|
+
/** @type {Record<string, ProvidesConfig>[]} */
|
|
72
75
|
this._provides = provides;
|
|
73
76
|
}
|
|
74
77
|
|
|
@@ -69,16 +69,18 @@ class ShareRuntimeModule extends RuntimeModule {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
+
const cst = runtimeTemplate.renderConst();
|
|
73
|
+
const lt = runtimeTemplate.renderLet();
|
|
72
74
|
return Template.asString([
|
|
73
75
|
`${RuntimeGlobals.shareScopeMap} = {};`,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
`${cst} initPromises = {};`,
|
|
77
|
+
`${cst} initTokens = {};`,
|
|
76
78
|
`${RuntimeGlobals.initializeSharing} = ${runtimeTemplate.basicFunction(
|
|
77
79
|
"name, initScope",
|
|
78
80
|
[
|
|
79
81
|
"if(!initScope) initScope = [];",
|
|
80
82
|
"// handling circular init calls",
|
|
81
|
-
|
|
83
|
+
`${lt} initToken = initTokens[name];`,
|
|
82
84
|
"if(!initToken) initToken = initTokens[name] = {};",
|
|
83
85
|
"if(initScope.indexOf(initToken) >= 0) return;",
|
|
84
86
|
"initScope.push(initToken);",
|
|
@@ -87,43 +89,43 @@ class ShareRuntimeModule extends RuntimeModule {
|
|
|
87
89
|
"// creates a new share scope if needed",
|
|
88
90
|
`if(!${RuntimeGlobals.hasOwnProperty}(${RuntimeGlobals.shareScopeMap}, name)) ${RuntimeGlobals.shareScopeMap}[name] = {};`,
|
|
89
91
|
"// runs all init snippets from all modules reachable",
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
`${cst} scope = ${RuntimeGlobals.shareScopeMap}[name];`,
|
|
93
|
+
`${cst} warn = ${
|
|
92
94
|
ignoreBrowserWarnings
|
|
93
95
|
? runtimeTemplate.basicFunction("", "")
|
|
94
96
|
: runtimeTemplate.basicFunction("msg", [
|
|
95
97
|
'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
|
|
96
98
|
])
|
|
97
99
|
};`,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
`${cst} uniqueName = ${JSON.stringify(uniqueName || undefined)};`,
|
|
101
|
+
`${cst} register = ${runtimeTemplate.basicFunction(
|
|
100
102
|
"name, version, factory, eager",
|
|
101
103
|
[
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
`${cst} versions = ${runtimeTemplate.assignOr("scope[name]", "{}")};`,
|
|
105
|
+
`${cst} activeVersion = versions[version];`,
|
|
104
106
|
"if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };"
|
|
105
107
|
]
|
|
106
108
|
)};`,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
`${cst} initExternal = ${runtimeTemplate.basicFunction("id", [
|
|
110
|
+
`${cst} handleError = ${runtimeTemplate.expressionFunction(
|
|
109
111
|
'warn("Initialization of sharing external failed: " + err)',
|
|
110
112
|
"err"
|
|
111
113
|
)};`,
|
|
112
114
|
"try {",
|
|
113
115
|
Template.indent([
|
|
114
|
-
|
|
116
|
+
`${cst} module = ${RuntimeGlobals.require}(id);`,
|
|
115
117
|
"if(!module) return;",
|
|
116
|
-
|
|
118
|
+
`${cst} initFn = ${runtimeTemplate.returningFunction(
|
|
117
119
|
`module && module.init && module.init(${RuntimeGlobals.shareScopeMap}[name], initScope)`,
|
|
118
120
|
"module"
|
|
119
121
|
)}`,
|
|
120
122
|
"if(module.then) return promises.push(module.then(initFn, handleError));",
|
|
121
|
-
|
|
122
|
-
|
|
123
|
+
`${cst} initResult = initFn(module);`,
|
|
124
|
+
`if(${runtimeTemplate.optionalChaining("initResult", "then")}) return promises.push(initResult['catch'](handleError));`
|
|
123
125
|
]),
|
|
124
126
|
"} catch(err) { handleError(err); }"
|
|
125
127
|
])}`,
|
|
126
|
-
|
|
128
|
+
`${cst} promises = [];`,
|
|
127
129
|
"switch(name) {",
|
|
128
130
|
...[...initCodePerScope]
|
|
129
131
|
.sort(([a], [b]) => compareStrings(a, b))
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const ModuleNotFoundError = require("../errors/ModuleNotFoundError");
|
|
9
9
|
const LazySet = require("../util/LazySet");
|
|
10
|
+
const { ABSOLUTE_PATH_REGEXP } = require("../util/identifier");
|
|
10
11
|
|
|
11
12
|
/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
|
|
12
13
|
/** @typedef {import("../Compilation")} Compilation */
|
|
@@ -80,7 +81,7 @@ module.exports.resolveMatchedConfigs = (compilation, configs) => {
|
|
|
80
81
|
}
|
|
81
82
|
);
|
|
82
83
|
});
|
|
83
|
-
} else if (
|
|
84
|
+
} else if (ABSOLUTE_PATH_REGEXP.test(request)) {
|
|
84
85
|
// absolute path
|
|
85
86
|
resolved.set(request, config);
|
|
86
87
|
} else if (request.endsWith("/")) {
|
package/lib/sharing/utils.js
CHANGED
|
@@ -28,7 +28,7 @@ const RE_CUSTOM_PROTOCOL = /^(?:(?:git\+)?(?:ssh|https?|file)|git):\/\//i;
|
|
|
28
28
|
const RE_URL_HASH_VERSION = /#(?:semver:)?(.+)/;
|
|
29
29
|
|
|
30
30
|
// Simple hostname validate
|
|
31
|
-
const RE_HOSTNAME = /^(?:[^/.]+(?:\.[
|
|
31
|
+
const RE_HOSTNAME = /^(?:[^/.]+(?:\.[^/.]+)+|localhost)$/;
|
|
32
32
|
|
|
33
33
|
// For hostname with colon. eg: ssh://user@github.com:foo/bar
|
|
34
34
|
const RE_HOSTNAME_WITH_COLON =
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const util = require("util");
|
|
9
|
+
const { version: WEBPACK_VERSION } = require("../../package.json");
|
|
9
10
|
const { WEBPACK_MODULE_TYPE_RUNTIME } = require("../ModuleTypeConstants");
|
|
10
11
|
const ModuleDependency = require("../dependencies/ModuleDependency");
|
|
11
12
|
const { LogType } = require("../logging/Logger");
|
|
@@ -418,9 +419,8 @@ const mapObject = (obj, fn) => {
|
|
|
418
419
|
|
|
419
420
|
/**
|
|
420
421
|
* Count with children.
|
|
421
|
-
* @template T
|
|
422
422
|
* @param {Compilation} compilation the compilation
|
|
423
|
-
* @param {(compilation: Compilation, name: string) =>
|
|
423
|
+
* @param {(compilation: Compilation, name: string) => { length: number }} getItems get items
|
|
424
424
|
* @returns {number} total number
|
|
425
425
|
*/
|
|
426
426
|
const countWithChildren = (compilation, getItems) => {
|
|
@@ -753,7 +753,7 @@ const SIMPLE_EXTRACTORS = {
|
|
|
753
753
|
object.hash = compilation.hash;
|
|
754
754
|
},
|
|
755
755
|
version: (object) => {
|
|
756
|
-
object.version =
|
|
756
|
+
object.version = WEBPACK_VERSION;
|
|
757
757
|
},
|
|
758
758
|
env: (object, compilation, context, { _env }) => {
|
|
759
759
|
object.env = _env;
|
|
@@ -1010,12 +1010,10 @@ const SIMPLE_EXTRACTORS = {
|
|
|
1010
1010
|
const { type, cachedGetWarnings } = context;
|
|
1011
1011
|
object.warningsCount = countWithChildren(compilation, (c, childType) => {
|
|
1012
1012
|
if (
|
|
1013
|
-
!warningsFilter &&
|
|
1014
1013
|
/** @type {KnownNormalizedStatsOptions["warningsFilter"]} */
|
|
1015
1014
|
(warningsFilter).length === 0
|
|
1016
1015
|
) {
|
|
1017
|
-
|
|
1018
|
-
return /** @type {EXPECTED_ANY[]} */ (cachedGetWarnings(c));
|
|
1016
|
+
return cachedGetWarnings(c);
|
|
1019
1017
|
}
|
|
1020
1018
|
return factory
|
|
1021
1019
|
.create(`${type}${childType}.warnings`, cachedGetWarnings(c), context)
|