webpack 5.92.1 → 5.94.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.
Files changed (350) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +5 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +104 -64
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +132 -70
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
@@ -27,7 +27,9 @@ const {
27
27
  /** @typedef {import("../../declarations/plugins/sharing/ConsumeSharedPlugin").ConsumesConfig} ConsumesConfig */
28
28
  /** @typedef {import("../Compiler")} Compiler */
29
29
  /** @typedef {import("../ResolverFactory").ResolveOptionsWithDependencyType} ResolveOptionsWithDependencyType */
30
+ /** @typedef {import("../util/semver").SemVerRange} SemVerRange */
30
31
  /** @typedef {import("./ConsumeSharedModule").ConsumeOptions} ConsumeOptions */
32
+ /** @typedef {import("./utils").DescriptionFile} DescriptionFile */
31
33
 
32
34
  const validate = createSchemaValidation(
33
35
  require("../../schemas/plugins/sharing/ConsumeSharedPlugin.check.js"),
@@ -57,7 +59,7 @@ class ConsumeSharedPlugin {
57
59
  (item, key) => {
58
60
  if (Array.isArray(item)) throw new Error("Unexpected array in options");
59
61
  /** @type {ConsumeOptions} */
60
- let result =
62
+ const result =
61
63
  item === key || !isRequiredVersion(item)
62
64
  ? // item is a request/key
63
65
  {
@@ -97,8 +99,8 @@ class ConsumeSharedPlugin {
97
99
  ? item.strictVersion
98
100
  : item.import !== false && !item.singleton,
99
101
  packageName: item.packageName,
100
- singleton: !!item.singleton,
101
- eager: !!item.eager
102
+ singleton: Boolean(item.singleton),
103
+ eager: Boolean(item.eager)
102
104
  })
103
105
  );
104
106
  }
@@ -157,110 +159,127 @@ class ConsumeSharedPlugin {
157
159
  config.import &&
158
160
  /^(\.\.?(\/|$)|\/|[A-Za-z]:|\\\\)/.test(config.import);
159
161
  return Promise.all([
160
- new Promise(resolve => {
161
- if (!config.import) return resolve();
162
- const resolveContext = {
163
- /** @type {LazySet<string>} */
164
- fileDependencies: new LazySet(),
165
- /** @type {LazySet<string>} */
166
- contextDependencies: new LazySet(),
167
- /** @type {LazySet<string>} */
168
- missingDependencies: new LazySet()
169
- };
170
- resolver.resolve(
171
- {},
172
- directFallback ? compiler.context : context,
173
- config.import,
174
- resolveContext,
175
- (err, result) => {
176
- compilation.contextDependencies.addAll(
177
- resolveContext.contextDependencies
178
- );
179
- compilation.fileDependencies.addAll(
180
- resolveContext.fileDependencies
181
- );
182
- compilation.missingDependencies.addAll(
183
- resolveContext.missingDependencies
184
- );
185
- if (err) {
186
- compilation.errors.push(
187
- new ModuleNotFoundError(null, err, {
188
- name: `resolving fallback for shared module ${request}`
189
- })
190
- );
191
- return resolve();
192
- }
193
- resolve(result);
194
- }
195
- );
196
- }),
197
- new Promise(resolve => {
198
- if (config.requiredVersion !== undefined)
199
- return resolve(config.requiredVersion);
200
- let packageName = config.packageName;
201
- if (packageName === undefined) {
202
- if (/^(\/|[A-Za-z]:|\\\\)/.test(request)) {
203
- // For relative or absolute requests we don't automatically use a packageName.
204
- // If wished one can specify one with the packageName option.
205
- return resolve();
162
+ new Promise(
163
+ /**
164
+ * @param {(value?: string) => void} resolve resolve
165
+ */
166
+ resolve => {
167
+ if (!config.import) {
168
+ resolve();
169
+ return;
206
170
  }
207
- const match = /^((?:@[^\\/]+[\\/])?[^\\/]+)/.exec(request);
208
- if (!match) {
209
- requiredVersionWarning(
210
- "Unable to extract the package name from request."
211
- );
212
- return resolve();
213
- }
214
- packageName = match[0];
215
- }
216
-
217
- getDescriptionFile(
218
- compilation.inputFileSystem,
219
- context,
220
- ["package.json"],
221
- (err, result) => {
222
- if (err) {
223
- requiredVersionWarning(
224
- `Unable to read description file: ${err}`
171
+ const resolveContext = {
172
+ /** @type {LazySet<string>} */
173
+ fileDependencies: new LazySet(),
174
+ /** @type {LazySet<string>} */
175
+ contextDependencies: new LazySet(),
176
+ /** @type {LazySet<string>} */
177
+ missingDependencies: new LazySet()
178
+ };
179
+ resolver.resolve(
180
+ {},
181
+ directFallback ? compiler.context : context,
182
+ config.import,
183
+ resolveContext,
184
+ (err, result) => {
185
+ compilation.contextDependencies.addAll(
186
+ resolveContext.contextDependencies
225
187
  );
226
- return resolve();
227
- }
228
- const { data, path: descriptionPath } = result;
229
- if (!data) {
230
- requiredVersionWarning(
231
- `Unable to find description file in ${context}.`
188
+ compilation.fileDependencies.addAll(
189
+ resolveContext.fileDependencies
190
+ );
191
+ compilation.missingDependencies.addAll(
192
+ resolveContext.missingDependencies
232
193
  );
233
- return resolve();
194
+ if (err) {
195
+ compilation.errors.push(
196
+ new ModuleNotFoundError(null, err, {
197
+ name: `resolving fallback for shared module ${request}`
198
+ })
199
+ );
200
+ return resolve();
201
+ }
202
+ resolve(/** @type {string} */ (result));
234
203
  }
235
- if (data.name === packageName) {
236
- // Package self-referencing
237
- return resolve();
204
+ );
205
+ }
206
+ ),
207
+ new Promise(
208
+ /**
209
+ * @param {(value?: SemVerRange) => void} resolve resolve
210
+ */
211
+ resolve => {
212
+ if (config.requiredVersion !== undefined) {
213
+ resolve(/** @type {SemVerRange} */ (config.requiredVersion));
214
+ return;
215
+ }
216
+ let packageName = config.packageName;
217
+ if (packageName === undefined) {
218
+ if (/^(\/|[A-Za-z]:|\\\\)/.test(request)) {
219
+ // For relative or absolute requests we don't automatically use a packageName.
220
+ // If wished one can specify one with the packageName option.
221
+ resolve();
222
+ return;
238
223
  }
239
- const requiredVersion = getRequiredVersionFromDescriptionFile(
240
- data,
241
- packageName
242
- );
243
- if (typeof requiredVersion !== "string") {
224
+ const match = /^((?:@[^\\/]+[\\/])?[^\\/]+)/.exec(request);
225
+ if (!match) {
244
226
  requiredVersionWarning(
245
- `Unable to find required version for "${packageName}" in description file (${descriptionPath}). It need to be in dependencies, devDependencies or peerDependencies.`
227
+ "Unable to extract the package name from request."
246
228
  );
247
- return resolve();
229
+ resolve();
230
+ return;
248
231
  }
249
- resolve(parseRange(requiredVersion));
232
+ packageName = match[0];
250
233
  }
251
- );
252
- })
253
- ]).then(([importResolved, requiredVersion]) => {
254
- return new ConsumeSharedModule(
255
- directFallback ? compiler.context : context,
256
- {
257
- ...config,
258
- importResolved,
259
- import: importResolved ? config.import : undefined,
260
- requiredVersion
234
+
235
+ getDescriptionFile(
236
+ compilation.inputFileSystem,
237
+ context,
238
+ ["package.json"],
239
+ (err, result) => {
240
+ if (err) {
241
+ requiredVersionWarning(
242
+ `Unable to read description file: ${err}`
243
+ );
244
+ return resolve();
245
+ }
246
+ const { data, path: descriptionPath } =
247
+ /** @type {DescriptionFile} */ (result);
248
+ if (!data) {
249
+ requiredVersionWarning(
250
+ `Unable to find description file in ${context}.`
251
+ );
252
+ return resolve();
253
+ }
254
+ if (data.name === packageName) {
255
+ // Package self-referencing
256
+ return resolve();
257
+ }
258
+ const requiredVersion =
259
+ getRequiredVersionFromDescriptionFile(data, packageName);
260
+ if (typeof requiredVersion !== "string") {
261
+ requiredVersionWarning(
262
+ `Unable to find required version for "${packageName}" in description file (${descriptionPath}). It need to be in dependencies, devDependencies or peerDependencies.`
263
+ );
264
+ return resolve();
265
+ }
266
+ resolve(parseRange(requiredVersion));
267
+ }
268
+ );
261
269
  }
262
- );
263
- });
270
+ )
271
+ ]).then(
272
+ ([importResolved, requiredVersion]) =>
273
+ new ConsumeSharedModule(
274
+ directFallback ? compiler.context : context,
275
+ {
276
+ ...config,
277
+ importResolved,
278
+ import: importResolved ? config.import : undefined,
279
+ requiredVersion
280
+ }
281
+ )
282
+ );
264
283
  };
265
284
 
266
285
  normalModuleFactory.hooks.factorize.tapPromise(
@@ -19,6 +19,7 @@ const {
19
19
  /** @typedef {import("../Chunk")} Chunk */
20
20
  /** @typedef {import("../Chunk").ChunkId} ChunkId */
21
21
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
22
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
22
23
  /** @typedef {import("../Compilation")} Compilation */
23
24
  /** @typedef {import("../Module")} Module */
24
25
  /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
@@ -47,15 +48,14 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
47
48
  /** @type {(string | number)[]} */
48
49
  const initialConsumes = [];
49
50
  /**
50
- *
51
51
  * @param {Iterable<Module>} modules modules
52
52
  * @param {Chunk} chunk the chunk
53
53
  * @param {(string | number)[]} list list of ids
54
54
  */
55
55
  const addModules = (modules, chunk, list) => {
56
56
  for (const m of modules) {
57
- const module = /** @type {ConsumeSharedModule} */ (m);
58
- const id = chunkGraph.getModuleId(module);
57
+ const module = m;
58
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
59
59
  list.push(id);
60
60
  moduleIdToSourceMapping.set(
61
61
  id,
@@ -95,63 +95,39 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
95
95
  versionLtRuntimeCode(runtimeTemplate),
96
96
  rangeToStringRuntimeCode(runtimeTemplate),
97
97
  satisfyRuntimeCode(runtimeTemplate),
98
- `var ensureExistence = ${runtimeTemplate.basicFunction("scopeName, key", [
99
- `var scope = ${RuntimeGlobals.shareScopeMap}[scopeName];`,
100
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) throw new Error("Shared module " + key + " doesn't exist in shared scope " + scopeName);`,
101
- "return scope;"
98
+ `var exists = ${runtimeTemplate.basicFunction("scope, key", [
99
+ `return scope && ${RuntimeGlobals.hasOwnProperty}(scope, key);`
100
+ ])}`,
101
+ `var get = ${runtimeTemplate.basicFunction("entry", [
102
+ "entry.loaded = 1;",
103
+ "return entry.get()"
102
104
  ])};`,
103
- `var findVersion = ${runtimeTemplate.basicFunction("scope, key", [
104
- "var versions = scope[key];",
105
- `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
106
- "a, b",
107
- ["return !a || versionLt(a, b) ? b : a;"]
108
- )}, 0);`,
109
- "return key && versions[key]"
105
+ `var eagerOnly = ${runtimeTemplate.basicFunction("versions", [
106
+ `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
107
+ "filtered, version",
108
+ Template.indent([
109
+ "if (versions[version].eager) {",
110
+ Template.indent(["filtered[version] = versions[version];"]),
111
+ "}",
112
+ "return filtered;"
113
+ ])
114
+ )}, {});`
110
115
  ])};`,
111
- `var findSingletonVersionKey = ${runtimeTemplate.basicFunction(
112
- "scope, key",
116
+ `var findLatestVersion = ${runtimeTemplate.basicFunction(
117
+ "scope, key, eager",
113
118
  [
114
- "var versions = scope[key];",
115
- `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
119
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
120
+ `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
116
121
  "a, b",
117
- ["return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;"]
118
- )}, 0);`
119
- ]
120
- )};`,
121
- `var getInvalidSingletonVersionMessage = ${runtimeTemplate.basicFunction(
122
- "scope, key, version, requiredVersion",
123
- [
124
- `return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"`
125
- ]
126
- )};`,
127
- `var getSingleton = ${runtimeTemplate.basicFunction(
128
- "scope, scopeName, key, requiredVersion",
129
- [
130
- "var version = findSingletonVersionKey(scope, key);",
131
- "return get(scope[key][version]);"
132
- ]
133
- )};`,
134
- `var getSingletonVersion = ${runtimeTemplate.basicFunction(
135
- "scope, scopeName, key, requiredVersion",
136
- [
137
- "var version = findSingletonVersionKey(scope, key);",
138
- "if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));",
139
- "return get(scope[key][version]);"
140
- ]
141
- )};`,
142
- `var getStrictSingletonVersion = ${runtimeTemplate.basicFunction(
143
- "scope, scopeName, key, requiredVersion",
144
- [
145
- "var version = findSingletonVersionKey(scope, key);",
146
- "if (!satisfy(requiredVersion, version)) " +
147
- "throw new Error(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));",
148
- "return get(scope[key][version]);"
122
+ ["return !a || versionLt(a, b) ? b : a;"]
123
+ )}, 0);`,
124
+ "return key && versions[key];"
149
125
  ]
150
126
  )};`,
151
- `var findValidVersion = ${runtimeTemplate.basicFunction(
152
- "scope, key, requiredVersion",
127
+ `var findSatisfyingVersion = ${runtimeTemplate.basicFunction(
128
+ "scope, key, requiredVersion, eager",
153
129
  [
154
- "var versions = scope[key];",
130
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
155
131
  `var key = Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
156
132
  "a, b",
157
133
  [
@@ -162,136 +138,127 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
162
138
  "return key && versions[key]"
163
139
  ]
164
140
  )};`,
141
+ `var findSingletonVersionKey = ${runtimeTemplate.basicFunction(
142
+ "scope, key, eager",
143
+ [
144
+ "var versions = eager ? eagerOnly(scope[key]) : scope[key];",
145
+ `return Object.keys(versions).reduce(${runtimeTemplate.basicFunction(
146
+ "a, b",
147
+ ["return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;"]
148
+ )}, 0);`
149
+ ]
150
+ )};`,
151
+ `var getInvalidSingletonVersionMessage = ${runtimeTemplate.basicFunction(
152
+ "scope, key, version, requiredVersion",
153
+ [
154
+ 'return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"'
155
+ ]
156
+ )};`,
165
157
  `var getInvalidVersionMessage = ${runtimeTemplate.basicFunction(
166
- "scope, scopeName, key, requiredVersion",
158
+ "scope, scopeName, key, requiredVersion, eager",
167
159
  [
168
160
  "var versions = scope[key];",
169
- 'return "No satisfying version (" + rangeToString(requiredVersion) + ") of shared module " + key + " found in shared scope " + scopeName + ".\\n" +',
161
+ 'return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\\n" +',
170
162
  `\t"Available versions: " + Object.keys(versions).map(${runtimeTemplate.basicFunction(
171
163
  "key",
172
164
  ['return key + " from " + versions[key].from;']
173
165
  )}).join(", ");`
174
166
  ]
175
167
  )};`,
176
- `var getValidVersion = ${runtimeTemplate.basicFunction(
177
- "scope, scopeName, key, requiredVersion",
178
- [
179
- "var entry = findValidVersion(scope, key, requiredVersion);",
180
- "if(entry) return get(entry);",
181
- "throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
182
- ]
183
- )};`,
184
- `var warn = ${
168
+ `var fail = ${runtimeTemplate.basicFunction("msg", [
169
+ "throw new Error(msg);"
170
+ ])}`,
171
+ `var failAsNotExist = ${runtimeTemplate.basicFunction("scopeName, key", [
172
+ 'return fail("Shared module " + key + " doesn\'t exist in shared scope " + scopeName);'
173
+ ])}`,
174
+ `var warn = /*#__PURE__*/ ${
185
175
  compilation.outputOptions.ignoreBrowserWarnings
186
176
  ? runtimeTemplate.basicFunction("", "")
187
177
  : runtimeTemplate.basicFunction("msg", [
188
178
  'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
189
179
  ])
190
180
  };`,
191
- `var warnInvalidVersion = ${runtimeTemplate.basicFunction(
192
- "scope, scopeName, key, requiredVersion",
193
- [
194
- "warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
195
- ]
196
- )};`,
197
- `var get = ${runtimeTemplate.basicFunction("entry", [
198
- "entry.loaded = 1;",
199
- "return entry.get()"
200
- ])};`,
201
181
  `var init = ${runtimeTemplate.returningFunction(
202
182
  Template.asString([
203
- "function(scopeName, a, b, c) {",
183
+ "function(scopeName, key, eager, c, d) {",
204
184
  Template.indent([
205
185
  `var promise = ${RuntimeGlobals.initializeSharing}(scopeName);`,
206
- `if (promise && promise.then) return promise.then(fn.bind(fn, scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], a, b, c));`,
207
- `return fn(scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], a, b, c);`
186
+ // if we require eager shared, we expect it to be already loaded before it requested, no need to wait the whole scope loaded.
187
+ "if (promise && promise.then && !eager) { ",
188
+ Template.indent([
189
+ `return promise.then(fn.bind(fn, scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], key, false, c, d));`
190
+ ]),
191
+ "}",
192
+ `return fn(scopeName, ${RuntimeGlobals.shareScopeMap}[scopeName], key, eager, c, d);`
208
193
  ]),
209
194
  "}"
210
195
  ]),
211
196
  "fn"
212
197
  )};`,
213
198
  "",
199
+ `var useFallback = ${runtimeTemplate.basicFunction(
200
+ "scopeName, key, fallback",
201
+ ["return fallback ? fallback() : failAsNotExist(scopeName, key);"]
202
+ )}`,
214
203
  `var load = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
215
- "scopeName, scope, key",
204
+ "scopeName, scope, key, eager, fallback",
216
205
  [
217
- "ensureExistence(scopeName, key);",
218
- "return get(findVersion(scope, key));"
206
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
207
+ "return get(findLatestVersion(scope, key, eager));"
219
208
  ]
220
209
  )});`,
221
- `var loadFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
222
- "scopeName, scope, key, fallback",
210
+ `var loadVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
211
+ "scopeName, scope, key, eager, requiredVersion, fallback",
223
212
  [
224
- `return scope && ${RuntimeGlobals.hasOwnProperty}(scope, key) ? get(findVersion(scope, key)) : fallback();`
213
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
214
+ "var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);",
215
+ "if (satisfyingVersion) return get(satisfyingVersion);",
216
+ "warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))",
217
+ "return get(findLatestVersion(scope, key, eager));"
225
218
  ]
226
219
  )});`,
227
- `var loadVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
228
- "scopeName, scope, key, version",
220
+ `var loadStrictVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
221
+ "scopeName, scope, key, eager, requiredVersion, fallback",
229
222
  [
230
- "ensureExistence(scopeName, key);",
231
- "return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key));"
223
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
224
+ "var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);",
225
+ "if (satisfyingVersion) return get(satisfyingVersion);",
226
+ "if (fallback) return fallback();",
227
+ "fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));"
232
228
  ]
233
229
  )});`,
234
230
  `var loadSingleton = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
235
- "scopeName, scope, key",
236
- [
237
- "ensureExistence(scopeName, key);",
238
- "return getSingleton(scope, scopeName, key);"
239
- ]
240
- )});`,
241
- `var loadSingletonVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
242
- "scopeName, scope, key, version",
243
- [
244
- "ensureExistence(scopeName, key);",
245
- "return getSingletonVersion(scope, scopeName, key, version);"
246
- ]
247
- )});`,
248
- `var loadStrictVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
249
- "scopeName, scope, key, version",
231
+ "scopeName, scope, key, eager, fallback",
250
232
  [
251
- "ensureExistence(scopeName, key);",
252
- "return getValidVersion(scope, scopeName, key, version);"
253
- ]
254
- )});`,
255
- `var loadStrictSingletonVersionCheck = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
256
- "scopeName, scope, key, version",
257
- [
258
- "ensureExistence(scopeName, key);",
259
- "return getStrictSingletonVersion(scope, scopeName, key, version);"
260
- ]
261
- )});`,
262
- `var loadVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
263
- "scopeName, scope, key, version, fallback",
264
- [
265
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
266
- "return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key));"
267
- ]
268
- )});`,
269
- `var loadSingletonFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
270
- "scopeName, scope, key, fallback",
271
- [
272
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
273
- "return getSingleton(scope, scopeName, key);"
274
- ]
275
- )});`,
276
- `var loadSingletonVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
277
- "scopeName, scope, key, version, fallback",
278
- [
279
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
280
- "return getSingletonVersion(scope, scopeName, key, version);"
233
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
234
+ "var version = findSingletonVersionKey(scope, key, eager);",
235
+ "return get(scope[key][version]);"
281
236
  ]
282
237
  )});`,
283
- `var loadStrictVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
284
- "scopeName, scope, key, version, fallback",
238
+ `var loadSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
239
+ "scopeName, scope, key, eager, requiredVersion, fallback",
285
240
  [
286
- `var entry = scope && ${RuntimeGlobals.hasOwnProperty}(scope, key) && findValidVersion(scope, key, version);`,
287
- `return entry ? get(entry) : fallback();`
241
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
242
+ "var version = findSingletonVersionKey(scope, key, eager);",
243
+ "if (!satisfy(requiredVersion, version)) {",
244
+ Template.indent([
245
+ "warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
246
+ ]),
247
+ "}",
248
+ "return get(scope[key][version]);"
288
249
  ]
289
250
  )});`,
290
- `var loadStrictSingletonVersionCheckFallback = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
291
- "scopeName, scope, key, version, fallback",
251
+ `var loadStrictSingletonVersion = /*#__PURE__*/ init(${runtimeTemplate.basicFunction(
252
+ "scopeName, scope, key, eager, requiredVersion, fallback",
292
253
  [
293
- `if(!scope || !${RuntimeGlobals.hasOwnProperty}(scope, key)) return fallback();`,
294
- "return getStrictSingletonVersion(scope, scopeName, key, version);"
254
+ "if (!exists(scope, key)) return useFallback(scopeName, key, fallback);",
255
+ "var version = findSingletonVersionKey(scope, key, eager);",
256
+ "if (!satisfy(requiredVersion, version)) {",
257
+ Template.indent([
258
+ "fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));"
259
+ ]),
260
+ "}",
261
+ "return get(scope[key][version]);"
295
262
  ]
296
263
  )});`,
297
264
  "var installedModules = {};",
@@ -316,7 +283,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
316
283
  `delete ${RuntimeGlobals.moduleCache}[id];`,
317
284
  "var factory = moduleToHandlerMapping[id]();",
318
285
  'if(typeof factory !== "function") throw new Error("Shared module is not available for eager consumption: " + id);',
319
- `module.exports = factory();`
286
+ "module.exports = factory();"
320
287
  ])}`
321
288
  ])});`
322
289
  ])
@@ -10,7 +10,6 @@ const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  class ProvideForSharedDependency extends ModuleDependency {
12
12
  /**
13
- *
14
13
  * @param {string} request request string
15
14
  */
16
15
  constructor(request) {
@@ -62,7 +62,7 @@ class ProvideSharedPlugin {
62
62
  shareKey: item.shareKey,
63
63
  version: item.version,
64
64
  shareScope: item.shareScope || options.shareScope || "default",
65
- eager: !!item.eager
65
+ eager: Boolean(item.eager)
66
66
  })
67
67
  )
68
68
  );
@@ -129,7 +129,7 @@ class ProvideSharedPlugin {
129
129
  if (version === undefined) {
130
130
  let details = "";
131
131
  if (!resourceResolveData) {
132
- details = `No resolve data provided from resolver.`;
132
+ details = "No resolve data provided from resolver.";
133
133
  } else {
134
134
  const descriptionFileData =
135
135
  resourceResolveData.descriptionFileData;
@@ -28,7 +28,7 @@ const RESOLVE_OPTIONS = { dependencyType: "esm" };
28
28
  * @param {[string, T][]} configs to be processed configs
29
29
  * @returns {Promise<MatchedConfigs<T>>} resolved matchers
30
30
  */
31
- exports.resolveMatchedConfigs = (compilation, configs) => {
31
+ module.exports.resolveMatchedConfigs = (compilation, configs) => {
32
32
  /** @type {Map<string, T>} */
33
33
  const resolved = new Map();
34
34
  /** @type {Map<string, T>} */
@@ -47,6 +47,7 @@ exports.resolveMatchedConfigs = (compilation, configs) => {
47
47
  const context = compilation.compiler.context;
48
48
 
49
49
  return Promise.all(
50
+ // eslint-disable-next-line array-callback-return
50
51
  configs.map(([request, config]) => {
51
52
  if (/^\.\.?(\/|$)/.test(request)) {
52
53
  // relative request