webpack 5.76.1 → 5.88.2

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -181,6 +181,7 @@ const serialize = async (
181
181
  SerializerMiddleware.setLazySerializedValue(lazy, buf);
182
182
  return buf;
183
183
  });
184
+ /** @type {number[]} */
184
185
  const lengths = [];
185
186
  for (const item of resolvedData) {
186
187
  if (Array.isArray(item)) {
@@ -203,6 +204,7 @@ const serialize = async (
203
204
  for (let i = 0; i < lengths.length; i++) {
204
205
  header.writeInt32LE(lengths[i], 8 + i * 4);
205
206
  }
207
+ /** @type {Buffer[]} */
206
208
  const buf = [header];
207
209
  for (const item of resolvedData) {
208
210
  if (Array.isArray(item)) {
@@ -247,6 +249,9 @@ const deserialize = async (middleware, name, readFile) => {
247
249
  contentItemLength = contentItem.length;
248
250
  contentPosition = 0;
249
251
  };
252
+ /**
253
+ * @param {number} n number of bytes to ensure
254
+ */
250
255
  const ensureData = n => {
251
256
  if (contentPosition === contentItemLength) {
252
257
  nextContent();
@@ -274,18 +279,28 @@ const deserialize = async (middleware, name, readFile) => {
274
279
  contentPosition = 0;
275
280
  }
276
281
  };
282
+ /**
283
+ * @returns {number} value value
284
+ */
277
285
  const readUInt32LE = () => {
278
286
  ensureData(4);
279
287
  const value = contentItem.readUInt32LE(contentPosition);
280
288
  contentPosition += 4;
281
289
  return value;
282
290
  };
291
+ /**
292
+ * @returns {number} value value
293
+ */
283
294
  const readInt32LE = () => {
284
295
  ensureData(4);
285
296
  const value = contentItem.readInt32LE(contentPosition);
286
297
  contentPosition += 4;
287
298
  return value;
288
299
  };
300
+ /**
301
+ * @param {number} l length
302
+ * @returns {Buffer} buffer
303
+ */
289
304
  const readSlice = l => {
290
305
  ensureData(l);
291
306
  if (contentPosition === 0 && contentItemLength === l) {
@@ -556,7 +571,9 @@ class FileMiddleware extends SerializerMiddleware {
556
571
  return;
557
572
  }
558
573
  let remaining = /** @type {number} */ (stats.size);
574
+ /** @type {Buffer | undefined} */
559
575
  let currentBuffer;
576
+ /** @type {number | undefined} */
560
577
  let currentBufferUsed;
561
578
  const buf = [];
562
579
  let decompression;
@@ -4,25 +4,41 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class MapObjectSerializer {
8
- serialize(obj, { write }) {
9
- write(obj.size);
11
+ /**
12
+ * @template K, V
13
+ * @param {Map<K, V>} obj map
14
+ * @param {ObjectSerializerContext} context context
15
+ */
16
+ serialize(obj, context) {
17
+ context.write(obj.size);
10
18
  for (const key of obj.keys()) {
11
- write(key);
19
+ context.write(key);
12
20
  }
13
21
  for (const value of obj.values()) {
14
- write(value);
22
+ context.write(value);
15
23
  }
16
24
  }
17
- deserialize({ read }) {
18
- let size = read();
25
+ /**
26
+ * @template K, V
27
+ * @param {ObjectDeserializerContext} context context
28
+ * @returns {Map<K, V>} map
29
+ */
30
+ deserialize(context) {
31
+ /** @type {number} */
32
+ let size = context.read();
33
+ /** @type {Map<K, V>} */
19
34
  const map = new Map();
35
+ /** @type {K[]} */
20
36
  const keys = [];
21
37
  for (let i = 0; i < size; i++) {
22
- keys.push(read());
38
+ keys.push(context.read());
23
39
  }
24
40
  for (let i = 0; i < size; i++) {
25
- map.set(keys[i], read());
41
+ map.set(keys[i], context.read());
26
42
  }
27
43
  return map;
28
44
  }
@@ -4,27 +4,44 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class NullPrototypeObjectSerializer {
8
- serialize(obj, { write }) {
11
+ /**
12
+ * @template {Object} T
13
+ * @param {T} obj null object
14
+ * @param {ObjectSerializerContext} context context
15
+ */
16
+ serialize(obj, context) {
17
+ /** @type {string[]} */
9
18
  const keys = Object.keys(obj);
10
19
  for (const key of keys) {
11
- write(key);
20
+ context.write(key);
12
21
  }
13
- write(null);
22
+ context.write(null);
14
23
  for (const key of keys) {
15
- write(obj[key]);
24
+ context.write(obj[key]);
16
25
  }
17
26
  }
18
- deserialize({ read }) {
27
+ /**
28
+ * @template {Object} T
29
+ * @param {ObjectDeserializerContext} context context
30
+ * @returns {T} null object
31
+ */
32
+ deserialize(context) {
33
+ /** @type {T} */
19
34
  const obj = Object.create(null);
35
+ /** @type {string[]} */
20
36
  const keys = [];
21
- let key = read();
37
+ /** @type {string | null} */
38
+ let key = context.read();
22
39
  while (key !== null) {
23
40
  keys.push(key);
24
- key = read();
41
+ key = context.read();
25
42
  }
26
43
  for (const key of keys) {
27
- obj[key] = read();
44
+ obj[key] = context.read();
28
45
  }
29
46
  return obj;
30
47
  }
@@ -46,11 +46,13 @@ Technically any value can be used.
46
46
  /**
47
47
  * @typedef {Object} ObjectSerializerContext
48
48
  * @property {function(any): void} write
49
+ * @property {function(any): void} setCircularReference
49
50
  */
50
51
 
51
52
  /**
52
53
  * @typedef {Object} ObjectDeserializerContext
53
54
  * @property {function(): any} read
55
+ * @property {function(any): void} setCircularReference
54
56
  */
55
57
 
56
58
  /**
@@ -59,6 +61,11 @@ Technically any value can be used.
59
61
  * @property {function(ObjectDeserializerContext): any} deserialize
60
62
  */
61
63
 
64
+ /**
65
+ * @template T
66
+ * @param {Set<T>} set set
67
+ * @param {number} size count of items to keep
68
+ */
62
69
  const setSetSize = (set, size) => {
63
70
  let i = 0;
64
71
  for (const item of set) {
@@ -68,6 +75,11 @@ const setSetSize = (set, size) => {
68
75
  }
69
76
  };
70
77
 
78
+ /**
79
+ * @template K, X
80
+ * @param {Map<K, X>} map map
81
+ * @param {number} size count of items to keep
82
+ */
71
83
  const setMapSize = (map, size) => {
72
84
  let i = 0;
73
85
  for (const item of map.keys()) {
@@ -95,9 +107,12 @@ const ESCAPE_UNDEFINED = false;
95
107
 
96
108
  const CURRENT_VERSION = 2;
97
109
 
110
+ /** @type {Map<Constructor, { request?: string, name?: string | number | null, serializer?: ObjectSerializer }>} */
98
111
  const serializers = new Map();
112
+ /** @type {Map<string | number, ObjectSerializer>} */
99
113
  const serializerInversed = new Map();
100
114
 
115
+ /** @type {Set<string>} */
101
116
  const loadedRequests = new Set();
102
117
 
103
118
  const NOT_SERIALIZABLE = {};
@@ -143,7 +158,10 @@ if (exports.constructor !== Object) {
143
158
  }
144
159
 
145
160
  for (const { request, name, serializer } of serializers.values()) {
146
- serializerInversed.set(`${request}/${name}`, serializer);
161
+ serializerInversed.set(
162
+ `${request}/${name}`,
163
+ /** @type {ObjectSerializer} */ (serializer)
164
+ );
147
165
  }
148
166
 
149
167
  /** @type {Map<RegExp, (request: string) => boolean>} */
@@ -176,7 +194,7 @@ class ObjectMiddleware extends SerializerMiddleware {
176
194
  /**
177
195
  * @param {Constructor} Constructor the constructor
178
196
  * @param {string} request the request which will be required when deserializing
179
- * @param {string} name the name to make multiple serializer unique when sharing a request
197
+ * @param {string | null} name the name to make multiple serializer unique when sharing a request
180
198
  * @param {ObjectSerializer} serializer the serializer
181
199
  * @returns {void}
182
200
  */
@@ -240,6 +258,11 @@ class ObjectMiddleware extends SerializerMiddleware {
240
258
  return config;
241
259
  }
242
260
 
261
+ /**
262
+ * @param {string} request request
263
+ * @param {TODO} name name
264
+ * @returns {ObjectSerializer} serializer
265
+ */
243
266
  static getDeserializerFor(request, name) {
244
267
  const key = request + "/" + name;
245
268
  const serializer = serializerInversed.get(key);
@@ -251,6 +274,11 @@ class ObjectMiddleware extends SerializerMiddleware {
251
274
  return serializer;
252
275
  }
253
276
 
277
+ /**
278
+ * @param {string} request request
279
+ * @param {TODO} name name
280
+ * @returns {ObjectSerializer} serializer
281
+ */
254
282
  static _getDeserializerForWithoutError(request, name) {
255
283
  const key = request + "/" + name;
256
284
  const serializer = serializerInversed.get(key);
@@ -372,6 +400,9 @@ class ObjectMiddleware extends SerializerMiddleware {
372
400
  ", "
373
401
  )} }`;
374
402
  }
403
+ if (typeof item === "bigint") {
404
+ return `BigInt ${item}n`;
405
+ }
375
406
  try {
376
407
  return `${item}`;
377
408
  } catch (e) {
@@ -4,6 +4,9 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  const cache = new WeakMap();
8
11
 
9
12
  class ObjectStructure {
@@ -41,37 +44,45 @@ const getCachedKeys = (keys, cacheAssoc) => {
41
44
  };
42
45
 
43
46
  class PlainObjectSerializer {
44
- serialize(obj, { write }) {
47
+ /**
48
+ * @param {Object} obj plain object
49
+ * @param {ObjectSerializerContext} context context
50
+ */
51
+ serialize(obj, context) {
45
52
  const keys = Object.keys(obj);
46
53
  if (keys.length > 128) {
47
54
  // Objects with so many keys are unlikely to share structure
48
55
  // with other objects
49
- write(keys);
56
+ context.write(keys);
50
57
  for (const key of keys) {
51
- write(obj[key]);
58
+ context.write(obj[key]);
52
59
  }
53
60
  } else if (keys.length > 1) {
54
- write(getCachedKeys(keys, write));
61
+ context.write(getCachedKeys(keys, context.write));
55
62
  for (const key of keys) {
56
- write(obj[key]);
63
+ context.write(obj[key]);
57
64
  }
58
65
  } else if (keys.length === 1) {
59
66
  const key = keys[0];
60
- write(key);
61
- write(obj[key]);
67
+ context.write(key);
68
+ context.write(obj[key]);
62
69
  } else {
63
- write(null);
70
+ context.write(null);
64
71
  }
65
72
  }
66
- deserialize({ read }) {
67
- const keys = read();
73
+ /**
74
+ * @param {ObjectDeserializerContext} context context
75
+ * @returns {Object} plain object
76
+ */
77
+ deserialize(context) {
78
+ const keys = context.read();
68
79
  const obj = {};
69
80
  if (Array.isArray(keys)) {
70
81
  for (const key of keys) {
71
- obj[key] = read();
82
+ obj[key] = context.read();
72
83
  }
73
84
  } else if (keys !== null) {
74
- obj[keys] = read();
85
+ obj[keys] = context.read();
75
86
  }
76
87
  return obj;
77
88
  }
@@ -4,13 +4,24 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class RegExpObjectSerializer {
8
- serialize(obj, { write }) {
9
- write(obj.source);
10
- write(obj.flags);
11
+ /**
12
+ * @param {RegExp} obj regexp
13
+ * @param {ObjectSerializerContext} context context
14
+ */
15
+ serialize(obj, context) {
16
+ context.write(obj.source);
17
+ context.write(obj.flags);
11
18
  }
12
- deserialize({ read }) {
13
- return new RegExp(read(), read());
19
+ /**
20
+ * @param {ObjectDeserializerContext} context context
21
+ * @returns {RegExp} regexp
22
+ */
23
+ deserialize(context) {
24
+ return new RegExp(context.read(), context.read());
14
25
  }
15
26
  }
16
27
 
@@ -4,18 +4,33 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class SetObjectSerializer {
8
- serialize(obj, { write }) {
9
- write(obj.size);
11
+ /**
12
+ * @template T
13
+ * @param {Set<T>} obj set
14
+ * @param {ObjectSerializerContext} context context
15
+ */
16
+ serialize(obj, context) {
17
+ context.write(obj.size);
10
18
  for (const value of obj) {
11
- write(value);
19
+ context.write(value);
12
20
  }
13
21
  }
14
- deserialize({ read }) {
15
- let size = read();
22
+ /**
23
+ * @template T
24
+ * @param {ObjectDeserializerContext} context context
25
+ * @returns {Set<T>} date
26
+ */
27
+ deserialize(context) {
28
+ /** @type {number} */
29
+ let size = context.read();
30
+ /** @type {Set<T>} */
16
31
  const set = new Set();
17
32
  for (let i = 0; i < size; i++) {
18
- set.add(read());
33
+ set.add(context.read());
19
34
  }
20
35
  return set;
21
36
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  /** @typedef {undefined|null|number|string|boolean|Buffer|Object|(() => ComplexSerializableType[] | Promise<ComplexSerializableType[]>)} ComplexSerializableType */
8
8
 
9
- /** @typedef {undefined|null|number|string|boolean|Buffer|(() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>)} PrimitiveSerializableType */
9
+ /** @typedef {undefined|null|number|bigint|string|boolean|Buffer|(() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>)} PrimitiveSerializableType */
10
10
 
11
11
  /** @typedef {Buffer|(() => BufferSerializableType[] | Promise<BufferSerializableType[]>)} BufferSerializableType */
12
12
 
@@ -9,6 +9,9 @@ const ModuleDependency = require("../dependencies/ModuleDependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  class ConsumeSharedFallbackDependency extends ModuleDependency {
12
+ /**
13
+ * @param {string} request the request
14
+ */
12
15
  constructor(request) {
13
16
  super(request);
14
17
  }
@@ -8,6 +8,9 @@
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
10
  const Module = require("../Module");
11
+ const {
12
+ WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE
13
+ } = require("../ModuleTypeConstants");
11
14
  const RuntimeGlobals = require("../RuntimeGlobals");
12
15
  const makeSerializable = require("../util/makeSerializable");
13
16
  const { rangeToString, stringifyHoley } = require("../util/semver");
@@ -25,6 +28,8 @@ const ConsumeSharedFallbackDependency = require("./ConsumeSharedFallbackDependen
25
28
  /** @typedef {import("../RequestShortener")} RequestShortener */
26
29
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
27
30
  /** @typedef {import("../WebpackError")} WebpackError */
31
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
32
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
28
33
  /** @typedef {import("../util/Hash")} Hash */
29
34
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
30
35
  /** @typedef {import("../util/semver").SemVerRange} SemVerRange */
@@ -50,7 +55,7 @@ class ConsumeSharedModule extends Module {
50
55
  * @param {ConsumeOptions} options consume options
51
56
  */
52
57
  constructor(context, options) {
53
- super("consume-shared-module", context);
58
+ super(WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE, context);
54
59
  this.options = options;
55
60
  }
56
61
 
@@ -67,7 +72,7 @@ class ConsumeSharedModule extends Module {
67
72
  singleton,
68
73
  eager
69
74
  } = this.options;
70
- return `consume-shared-module|${shareScope}|${shareKey}|${
75
+ return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE}|${shareScope}|${shareKey}|${
71
76
  requiredVersion && rangeToString(requiredVersion)
72
77
  }|${strictVersion}|${importResolved}|${singleton}|${eager}`;
73
78
  }
@@ -230,12 +235,18 @@ class ConsumeSharedModule extends Module {
230
235
  };
231
236
  }
232
237
 
238
+ /**
239
+ * @param {ObjectSerializerContext} context context
240
+ */
233
241
  serialize(context) {
234
242
  const { write } = context;
235
243
  write(this.options);
236
244
  super.serialize(context);
237
245
  }
238
246
 
247
+ /**
248
+ * @param {ObjectDeserializerContext} context context
249
+ */
239
250
  deserialize(context) {
240
251
  const { read } = context;
241
252
  this.options = read();
@@ -224,6 +224,10 @@ class ConsumeSharedPlugin {
224
224
  );
225
225
  return resolve();
226
226
  }
227
+ if (data.name === packageName) {
228
+ // Package self-referencing
229
+ return resolve();
230
+ }
227
231
  const requiredVersion = getRequiredVersionFromDescriptionFile(
228
232
  data,
229
233
  packageName
@@ -17,24 +17,31 @@ const {
17
17
 
18
18
  /** @typedef {import("webpack-sources").Source} Source */
19
19
  /** @typedef {import("../Chunk")} Chunk */
20
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
21
+ /** @typedef {import("../Compilation")} Compilation */
20
22
  /** @typedef {import("../Module")} Module */
21
23
  /** @typedef {import("./ConsumeSharedModule")} ConsumeSharedModule */
22
24
 
23
25
  class ConsumeSharedRuntimeModule extends RuntimeModule {
26
+ /**
27
+ * @param {ReadonlySet<string>} runtimeRequirements runtime requirements
28
+ */
24
29
  constructor(runtimeRequirements) {
25
30
  super("consumes", RuntimeModule.STAGE_ATTACH);
26
31
  this._runtimeRequirements = runtimeRequirements;
27
32
  }
28
33
 
29
34
  /**
30
- * @returns {string} runtime code
35
+ * @returns {string | null} runtime code
31
36
  */
32
37
  generate() {
33
- const { compilation, chunkGraph } = this;
38
+ const compilation = /** @type {Compilation} */ (this.compilation);
39
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
34
40
  const { runtimeTemplate, codeGenerationResults } = compilation;
35
41
  const chunkToModuleMapping = {};
36
42
  /** @type {Map<string | number, Source>} */
37
43
  const moduleIdToSourceMapping = new Map();
44
+ /** @type {(string | number)[]} */
38
45
  const initialConsumes = [];
39
46
  /**
40
47
  *
@@ -57,7 +64,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
57
64
  );
58
65
  }
59
66
  };
60
- for (const chunk of this.chunk.getAllAsyncChunks()) {
67
+ for (const chunk of /** @type {Chunk} */ (this.chunk).getAllAsyncChunks()) {
61
68
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
62
69
  chunk,
63
70
  "consume-shared"
@@ -65,7 +72,9 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
65
72
  if (!modules) continue;
66
73
  addModules(modules, chunk, (chunkToModuleMapping[chunk.id] = []));
67
74
  }
68
- for (const chunk of this.chunk.getAllInitialChunks()) {
75
+ for (const chunk of /** @type {Chunk} */ (
76
+ this.chunk
77
+ ).getAllInitialChunks()) {
69
78
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
70
79
  chunk,
71
80
  "consume-shared"
@@ -119,8 +128,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
119
128
  "scope, scopeName, key, requiredVersion",
120
129
  [
121
130
  "var version = findSingletonVersionKey(scope, key);",
122
- "if (!satisfy(requiredVersion, version)) " +
123
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));',
131
+ "if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));",
124
132
  "return get(scope[key][version]);"
125
133
  ]
126
134
  )};`,
@@ -166,10 +174,17 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
166
174
  "throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
167
175
  ]
168
176
  )};`,
177
+ `var warn = ${
178
+ compilation.outputOptions.ignoreBrowserWarnings
179
+ ? runtimeTemplate.basicFunction("", "")
180
+ : runtimeTemplate.basicFunction("msg", [
181
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
182
+ ])
183
+ };`,
169
184
  `var warnInvalidVersion = ${runtimeTemplate.basicFunction(
170
185
  "scope, scopeName, key, requiredVersion",
171
186
  [
172
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));'
187
+ "warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
173
188
  ]
174
189
  )};`,
175
190
  `var get = ${runtimeTemplate.basicFunction("entry", [
@@ -8,7 +8,17 @@
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 */
13
+
11
14
  class ProvideSharedDependency extends Dependency {
15
+ /**
16
+ * @param {string} shareScope share scope
17
+ * @param {string} name module name
18
+ * @param {string | false} version version
19
+ * @param {string} request request
20
+ * @param {boolean} eager true, if this is an eager dependency
21
+ */
12
22
  constructor(shareScope, name, version, request, eager) {
13
23
  super();
14
24
  this.shareScope = shareScope;
@@ -31,6 +41,9 @@ class ProvideSharedDependency extends Dependency {
31
41
  } @ ${this.version}${this.eager ? " (eager)" : ""}`;
32
42
  }
33
43
 
44
+ /**
45
+ * @param {ObjectSerializerContext} context context
46
+ */
34
47
  serialize(context) {
35
48
  context.write(this.shareScope);
36
49
  context.write(this.name);
@@ -40,6 +53,10 @@ class ProvideSharedDependency extends Dependency {
40
53
  super.serialize(context);
41
54
  }
42
55
 
56
+ /**
57
+ * @param {ObjectDeserializerContext} context context
58
+ * @returns {ProvideSharedDependency} deserialize fallback dependency
59
+ */
43
60
  static deserialize(context) {
44
61
  const { read } = context;
45
62
  const obj = new ProvideSharedDependency(
@@ -7,6 +7,7 @@
7
7
 
8
8
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
9
9
  const Module = require("../Module");
10
+ const { WEBPACK_MODULE_TYPE_PROVIDE } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
  const ProvideForSharedDependency = require("./ProvideForSharedDependency");
@@ -23,6 +24,8 @@ const ProvideForSharedDependency = require("./ProvideForSharedDependency");
23
24
  /** @typedef {import("../RequestShortener")} RequestShortener */
24
25
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
25
26
  /** @typedef {import("../WebpackError")} WebpackError */
27
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
28
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
26
29
  /** @typedef {import("../util/Hash")} Hash */
27
30
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
28
31
 
@@ -37,7 +40,7 @@ class ProvideSharedModule extends Module {
37
40
  * @param {boolean} eager include the module in sync way
38
41
  */
39
42
  constructor(shareScope, name, version, request, eager) {
40
- super("provide-module");
43
+ super(WEBPACK_MODULE_TYPE_PROVIDE);
41
44
  this._shareScope = shareScope;
42
45
  this._name = name;
43
46
  this._version = version;
@@ -158,6 +161,9 @@ class ProvideSharedModule extends Module {
158
161
  return { sources, data, runtimeRequirements };
159
162
  }
160
163
 
164
+ /**
165
+ * @param {ObjectSerializerContext} context context
166
+ */
161
167
  serialize(context) {
162
168
  const { write } = context;
163
169
  write(this._shareScope);
@@ -168,6 +174,10 @@ class ProvideSharedModule extends Module {
168
174
  super.serialize(context);
169
175
  }
170
176
 
177
+ /**
178
+ * @param {ObjectDeserializerContext} context context
179
+ * @returns {ProvideSharedModule} deserialize fallback dependency
180
+ */
171
181
  static deserialize(context) {
172
182
  const { read } = context;
173
183
  const obj = new ProvideSharedModule(read(), read(), read(), read(), read());
@@ -15,7 +15,7 @@ const ProvideSharedModule = require("./ProvideSharedModule");
15
15
  class ProvideSharedModuleFactory extends ModuleFactory {
16
16
  /**
17
17
  * @param {ModuleFactoryCreateData} data data object
18
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
18
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
19
19
  * @returns {void}
20
20
  */
21
21
  create(data, callback) {