webpack 5.59.0 → 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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -44,21 +44,30 @@ Technically any value can be used.
44
44
  */
45
45
 
46
46
  /**
47
- * @typedef {Object} ObjectSerializerContext
47
+ * @typedef {object} ObjectSerializerContext
48
48
  * @property {function(any): void} write
49
+ * @property {(function(any): void)=} writeLazy
50
+ * @property {(function(any, object=): (() => Promise<any> | any))=} writeSeparate
51
+ * @property {function(any): void} setCircularReference
49
52
  */
50
53
 
51
54
  /**
52
- * @typedef {Object} ObjectDeserializerContext
55
+ * @typedef {object} ObjectDeserializerContext
53
56
  * @property {function(): any} read
57
+ * @property {function(any): void} setCircularReference
54
58
  */
55
59
 
56
60
  /**
57
- * @typedef {Object} ObjectSerializer
61
+ * @typedef {object} ObjectSerializer
58
62
  * @property {function(any, ObjectSerializerContext): void} serialize
59
63
  * @property {function(ObjectDeserializerContext): any} deserialize
60
64
  */
61
65
 
66
+ /**
67
+ * @template T
68
+ * @param {Set<T>} set set
69
+ * @param {number} size count of items to keep
70
+ */
62
71
  const setSetSize = (set, size) => {
63
72
  let i = 0;
64
73
  for (const item of set) {
@@ -68,6 +77,11 @@ const setSetSize = (set, size) => {
68
77
  }
69
78
  };
70
79
 
80
+ /**
81
+ * @template K, X
82
+ * @param {Map<K, X>} map map
83
+ * @param {number} size count of items to keep
84
+ */
71
85
  const setMapSize = (map, size) => {
72
86
  let i = 0;
73
87
  for (const item of map.keys()) {
@@ -95,9 +109,12 @@ const ESCAPE_UNDEFINED = false;
95
109
 
96
110
  const CURRENT_VERSION = 2;
97
111
 
112
+ /** @type {Map<Constructor, { request?: string, name?: string | number | null, serializer?: ObjectSerializer }>} */
98
113
  const serializers = new Map();
114
+ /** @type {Map<string | number, ObjectSerializer>} */
99
115
  const serializerInversed = new Map();
100
116
 
117
+ /** @type {Set<string>} */
101
118
  const loadedRequests = new Set();
102
119
 
103
120
  const NOT_SERIALIZABLE = {};
@@ -120,7 +137,9 @@ jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
120
137
  // If in a sandboxed environment (e. g. jest), this escapes the sandbox and registers
121
138
  // real Object and Array types to. These types may occur in the wild too, e. g. when
122
139
  // using Structured Clone in postMessage.
140
+ // eslint-disable-next-line n/exports-style
123
141
  if (exports.constructor !== Object) {
142
+ // eslint-disable-next-line jsdoc/check-types, n/exports-style
124
143
  const Obj = /** @type {typeof Object} */ (exports.constructor);
125
144
  const Fn = /** @type {typeof Function} */ (Obj.constructor);
126
145
  for (const [type, config] of Array.from(jsTypes)) {
@@ -143,7 +162,10 @@ if (exports.constructor !== Object) {
143
162
  }
144
163
 
145
164
  for (const { request, name, serializer } of serializers.values()) {
146
- serializerInversed.set(`${request}/${name}`, serializer);
165
+ serializerInversed.set(
166
+ `${request}/${name}`,
167
+ /** @type {ObjectSerializer} */ (serializer)
168
+ );
147
169
  }
148
170
 
149
171
  /** @type {Map<RegExp, (request: string) => boolean>} */
@@ -164,6 +186,7 @@ class ObjectMiddleware extends SerializerMiddleware {
164
186
  this.extendContext = extendContext;
165
187
  this._hashFunction = hashFunction;
166
188
  }
189
+
167
190
  /**
168
191
  * @param {RegExp} regExp RegExp for which the request is tested
169
192
  * @param {function(string): boolean} loader loader to load the request, returns true when successful
@@ -176,12 +199,12 @@ class ObjectMiddleware extends SerializerMiddleware {
176
199
  /**
177
200
  * @param {Constructor} Constructor the constructor
178
201
  * @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
202
+ * @param {string | null} name the name to make multiple serializer unique when sharing a request
180
203
  * @param {ObjectSerializer} serializer the serializer
181
204
  * @returns {void}
182
205
  */
183
206
  static register(Constructor, request, name, serializer) {
184
- const key = request + "/" + name;
207
+ const key = `${request}/${name}`;
185
208
 
186
209
  if (serializers.has(Constructor)) {
187
210
  throw new Error(
@@ -240,8 +263,13 @@ class ObjectMiddleware extends SerializerMiddleware {
240
263
  return config;
241
264
  }
242
265
 
266
+ /**
267
+ * @param {string} request request
268
+ * @param {TODO} name name
269
+ * @returns {ObjectSerializer} serializer
270
+ */
243
271
  static getDeserializerFor(request, name) {
244
- const key = request + "/" + name;
272
+ const key = `${request}/${name}`;
245
273
  const serializer = serializerInversed.get(key);
246
274
 
247
275
  if (serializer === undefined) {
@@ -251,15 +279,20 @@ class ObjectMiddleware extends SerializerMiddleware {
251
279
  return serializer;
252
280
  }
253
281
 
282
+ /**
283
+ * @param {string} request request
284
+ * @param {TODO} name name
285
+ * @returns {ObjectSerializer} serializer
286
+ */
254
287
  static _getDeserializerForWithoutError(request, name) {
255
- const key = request + "/" + name;
288
+ const key = `${request}/${name}`;
256
289
  const serializer = serializerInversed.get(key);
257
290
  return serializer;
258
291
  }
259
292
 
260
293
  /**
261
294
  * @param {DeserializedType} data data
262
- * @param {Object} context context object
295
+ * @param {object} context context object
263
296
  * @returns {SerializedType|Promise<SerializedType>} serialized data
264
297
  */
265
298
  serialize(data, context) {
@@ -285,17 +318,16 @@ class ObjectMiddleware extends SerializerMiddleware {
285
318
  }
286
319
  bufferDedupeMap.set(len, [entry, buf]);
287
320
  return buf;
288
- } else {
289
- const hash = toHash(entry, this._hashFunction);
290
- const newMap = new Map();
291
- newMap.set(hash, entry);
292
- bufferDedupeMap.set(len, newMap);
293
- const hashBuf = toHash(buf, this._hashFunction);
294
- if (hash === hashBuf) {
295
- return entry;
296
- }
297
- return buf;
298
321
  }
322
+ const hash = toHash(entry, this._hashFunction);
323
+ const newMap = new Map();
324
+ newMap.set(hash, entry);
325
+ bufferDedupeMap.set(len, newMap);
326
+ const hashBuf = toHash(buf, this._hashFunction);
327
+ if (hash === hashBuf) {
328
+ return entry;
329
+ }
330
+ return buf;
299
331
  } else if (Array.isArray(entry)) {
300
332
  if (entry.length < 16) {
301
333
  for (const item of entry) {
@@ -305,32 +337,29 @@ class ObjectMiddleware extends SerializerMiddleware {
305
337
  }
306
338
  entry.push(buf);
307
339
  return buf;
308
- } else {
309
- const newMap = new Map();
310
- const hash = toHash(buf, this._hashFunction);
311
- let found;
312
- for (const item of entry) {
313
- const itemHash = toHash(item, this._hashFunction);
314
- newMap.set(itemHash, item);
315
- if (found === undefined && itemHash === hash) found = item;
316
- }
317
- bufferDedupeMap.set(len, newMap);
318
- if (found === undefined) {
319
- newMap.set(hash, buf);
320
- return buf;
321
- } else {
322
- return found;
323
- }
324
340
  }
325
- } else {
341
+ const newMap = new Map();
326
342
  const hash = toHash(buf, this._hashFunction);
327
- const item = entry.get(hash);
328
- if (item !== undefined) {
329
- return item;
343
+ let found;
344
+ for (const item of entry) {
345
+ const itemHash = toHash(item, this._hashFunction);
346
+ newMap.set(itemHash, item);
347
+ if (found === undefined && itemHash === hash) found = item;
330
348
  }
331
- entry.set(hash, buf);
332
- return buf;
349
+ bufferDedupeMap.set(len, newMap);
350
+ if (found === undefined) {
351
+ newMap.set(hash, buf);
352
+ return buf;
353
+ }
354
+ return found;
333
355
  }
356
+ const hash = toHash(buf, this._hashFunction);
357
+ const item = entry.get(hash);
358
+ if (item !== undefined) {
359
+ return item;
360
+ }
361
+ entry.set(hash, buf);
362
+ return buf;
334
363
  };
335
364
  let currentPosTypeLookup = 0;
336
365
  let objectTypeLookup = new Map();
@@ -354,7 +383,7 @@ class ObjectMiddleware extends SerializerMiddleware {
354
383
  if (request) {
355
384
  return `${request}${name ? `.${name}` : ""}`;
356
385
  }
357
- } catch (e) {
386
+ } catch (_err) {
358
387
  // ignore -> fallback
359
388
  }
360
389
  if (typeof item === "object" && item !== null) {
@@ -372,10 +401,13 @@ class ObjectMiddleware extends SerializerMiddleware {
372
401
  ", "
373
402
  )} }`;
374
403
  }
404
+ if (typeof item === "bigint") {
405
+ return `BigInt ${item}n`;
406
+ }
375
407
  try {
376
408
  return `${item}`;
377
- } catch (e) {
378
- return `(${e.message})`;
409
+ } catch (err) {
410
+ return `(${err.message})`;
379
411
  }
380
412
  })
381
413
  .join(" -> ");
@@ -385,16 +417,16 @@ class ObjectMiddleware extends SerializerMiddleware {
385
417
  write(value, key) {
386
418
  try {
387
419
  process(value);
388
- } catch (e) {
389
- if (e !== NOT_SERIALIZABLE) {
420
+ } catch (err) {
421
+ if (err !== NOT_SERIALIZABLE) {
390
422
  if (hasDebugInfoAttached === undefined)
391
423
  hasDebugInfoAttached = new WeakSet();
392
- if (!hasDebugInfoAttached.has(e)) {
393
- e.message += `\nwhile serializing ${stackToString(value)}`;
394
- hasDebugInfoAttached.add(e);
424
+ if (!hasDebugInfoAttached.has(err)) {
425
+ err.message += `\nwhile serializing ${stackToString(value)}`;
426
+ hasDebugInfoAttached.add(err);
395
427
  }
396
428
  }
397
- throw e;
429
+ throw err;
398
430
  }
399
431
  },
400
432
  setCircularReference(ref) {
@@ -457,7 +489,7 @@ class ObjectMiddleware extends SerializerMiddleware {
457
489
 
458
490
  if (cycleStack.has(item)) {
459
491
  throw new Error(
460
- `This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize.`
492
+ "This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
461
493
  );
462
494
  }
463
495
 
@@ -508,7 +540,7 @@ class ObjectMiddleware extends SerializerMiddleware {
508
540
  result.push(item);
509
541
  } else if (typeof item === "function") {
510
542
  if (!SerializerMiddleware.isLazy(item))
511
- throw new Error("Unexpected function " + item);
543
+ throw new Error(`Unexpected function ${item}`);
512
544
  /** @type {SerializedType} */
513
545
  const serializedData =
514
546
  SerializerMiddleware.getLazySerializedValue(item);
@@ -539,10 +571,10 @@ class ObjectMiddleware extends SerializerMiddleware {
539
571
  process(item);
540
572
  }
541
573
  return result;
542
- } catch (e) {
543
- if (e === NOT_SERIALIZABLE) return null;
574
+ } catch (err) {
575
+ if (err === NOT_SERIALIZABLE) return null;
544
576
 
545
- throw e;
577
+ throw err;
546
578
  } finally {
547
579
  // Get rid of these references to avoid leaking memory
548
580
  // This happens because the optimized code v8 generates
@@ -560,7 +592,7 @@ class ObjectMiddleware extends SerializerMiddleware {
560
592
 
561
593
  /**
562
594
  * @param {SerializedType} data data
563
- * @param {Object} context context object
595
+ * @param {object} context context object
564
596
  * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
565
597
  */
566
598
  deserialize(data, context) {
@@ -603,7 +635,7 @@ class ObjectMiddleware extends SerializerMiddleware {
603
635
  if (nextItem === ESCAPE_ESCAPE_VALUE) {
604
636
  return ESCAPE;
605
637
  } else if (nextItem === ESCAPE_UNDEFINED) {
606
- return undefined;
638
+ // Nothing
607
639
  } else if (nextItem === ESCAPE_END_OBJECT) {
608
640
  throw new Error(
609
641
  `Unexpected end of object at position ${currentDataPos - 1}`
@@ -636,11 +668,9 @@ class ObjectMiddleware extends SerializerMiddleware {
636
668
  if (request && !loadedRequests.has(request)) {
637
669
  let loaded = false;
638
670
  for (const [regExp, loader] of loaders) {
639
- if (regExp.test(request)) {
640
- if (loader(request)) {
641
- loaded = true;
642
- break;
643
- }
671
+ if (regExp.test(request) && loader(request)) {
672
+ loaded = true;
673
+ break;
644
674
  }
645
675
  }
646
676
  if (!loaded) {
@@ -687,10 +717,10 @@ class ObjectMiddleware extends SerializerMiddleware {
687
717
  const name = !serializerEntry
688
718
  ? "unknown"
689
719
  : !serializerEntry[1].request
690
- ? serializerEntry[0].name
691
- : serializerEntry[1].name
692
- ? `${serializerEntry[1].request} ${serializerEntry[1].name}`
693
- : serializerEntry[1].request;
720
+ ? serializerEntry[0].name
721
+ : serializerEntry[1].name
722
+ ? `${serializerEntry[1].request} ${serializerEntry[1].name}`
723
+ : serializerEntry[1].request;
694
724
  err.message += `\n(during deserialization of ${name})`;
695
725
  throw err;
696
726
  }
@@ -4,19 +4,39 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
10
+ /** @typedef {(arg0?: any) => void} CacheAssoc */
11
+
12
+ /**
13
+ * @template T
14
+ * @typedef {WeakMap<CacheAssoc, ObjectStructure<T>>}
15
+ */
7
16
  const cache = new WeakMap();
8
17
 
18
+ /**
19
+ * @template T
20
+ */
9
21
  class ObjectStructure {
10
22
  constructor() {
11
23
  this.keys = undefined;
12
24
  this.children = undefined;
13
25
  }
14
26
 
27
+ /**
28
+ * @param {keyof T[]} keys keys
29
+ * @returns {keyof T[]} keys
30
+ */
15
31
  getKeys(keys) {
16
32
  if (this.keys === undefined) this.keys = keys;
17
33
  return this.keys;
18
34
  }
19
35
 
36
+ /**
37
+ * @param {keyof T} key key
38
+ * @returns {ObjectStructure<T>} object structure
39
+ */
20
40
  key(key) {
21
41
  if (this.children === undefined) this.children = new Map();
22
42
  const child = this.children.get(key);
@@ -27,6 +47,12 @@ class ObjectStructure {
27
47
  }
28
48
  }
29
49
 
50
+ /**
51
+ * @template T
52
+ * @param {(keyof T)[]} keys keys
53
+ * @param {CacheAssoc} cacheAssoc cache assoc fn
54
+ * @returns {(keyof T)[]} keys
55
+ */
30
56
  const getCachedKeys = (keys, cacheAssoc) => {
31
57
  let root = cache.get(cacheAssoc);
32
58
  if (root === undefined) {
@@ -41,37 +67,48 @@ const getCachedKeys = (keys, cacheAssoc) => {
41
67
  };
42
68
 
43
69
  class PlainObjectSerializer {
44
- serialize(obj, { write }) {
45
- const keys = Object.keys(obj);
70
+ /**
71
+ * @template {object} T
72
+ * @param {T} obj plain object
73
+ * @param {ObjectSerializerContext} context context
74
+ */
75
+ serialize(obj, context) {
76
+ const keys = /** @type {(keyof T)[]} */ (Object.keys(obj));
46
77
  if (keys.length > 128) {
47
78
  // Objects with so many keys are unlikely to share structure
48
79
  // with other objects
49
- write(keys);
80
+ context.write(keys);
50
81
  for (const key of keys) {
51
- write(obj[key]);
82
+ context.write(obj[key]);
52
83
  }
53
84
  } else if (keys.length > 1) {
54
- write(getCachedKeys(keys, write));
85
+ context.write(getCachedKeys(keys, context.write));
55
86
  for (const key of keys) {
56
- write(obj[key]);
87
+ context.write(obj[key]);
57
88
  }
58
89
  } else if (keys.length === 1) {
59
90
  const key = keys[0];
60
- write(key);
61
- write(obj[key]);
91
+ context.write(key);
92
+ context.write(obj[key]);
62
93
  } else {
63
- write(null);
94
+ context.write(null);
64
95
  }
65
96
  }
66
- deserialize({ read }) {
67
- const keys = read();
68
- const obj = {};
97
+
98
+ /**
99
+ * @template {object} T
100
+ * @param {ObjectDeserializerContext} context context
101
+ * @returns {T} plain object
102
+ */
103
+ deserialize(context) {
104
+ const keys = context.read();
105
+ const obj = /** @type {T} */ ({});
69
106
  if (Array.isArray(keys)) {
70
107
  for (const key of keys) {
71
- obj[key] = read();
108
+ obj[/** @type {keyof T} */ (key)] = context.read();
72
109
  }
73
110
  } else if (keys !== null) {
74
- obj[keys] = read();
111
+ obj[/** @type {keyof T} */ (keys)] = context.read();
75
112
  }
76
113
  return obj;
77
114
  }
@@ -4,13 +4,25 @@
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
+ /**
21
+ * @param {ObjectDeserializerContext} context context
22
+ * @returns {RegExp} regexp
23
+ */
24
+ deserialize(context) {
25
+ return new RegExp(context.read(), context.read());
14
26
  }
15
27
  }
16
28
 
@@ -4,13 +4,27 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /**
8
+ * @template T, K
9
+ * @typedef {import("./SerializerMiddleware")<T, K>} SerializerMiddleware
10
+ */
11
+
7
12
  class Serializer {
13
+ /**
14
+ * @param {SerializerMiddleware<any, any>[]} middlewares serializer middlewares
15
+ * @param {TODO=} context context
16
+ */
8
17
  constructor(middlewares, context) {
9
18
  this.serializeMiddlewares = middlewares.slice();
10
19
  this.deserializeMiddlewares = middlewares.slice().reverse();
11
20
  this.context = context;
12
21
  }
13
22
 
23
+ /**
24
+ * @param {any} obj object
25
+ * @param {TODO} context content
26
+ * @returns {Promise<any>} result
27
+ */
14
28
  serialize(obj, context) {
15
29
  const ctx = { ...context, ...this.context };
16
30
  let current = obj;
@@ -28,16 +42,20 @@ class Serializer {
28
42
  return current;
29
43
  }
30
44
 
45
+ /**
46
+ * @param {any} value value
47
+ * @param {TODO} context context
48
+ * @returns {Promise<any>} result
49
+ */
31
50
  deserialize(value, context) {
32
51
  const ctx = { ...context, ...this.context };
33
52
  /** @type {any} */
34
53
  let current = value;
35
54
  for (const middleware of this.deserializeMiddlewares) {
36
- if (current && typeof current.then === "function") {
37
- current = current.then(data => middleware.deserialize(data, ctx));
38
- } else {
39
- current = middleware.deserialize(current, ctx);
40
- }
55
+ current =
56
+ current && typeof current.then === "function"
57
+ ? current.then(data => middleware.deserialize(data, ctx))
58
+ : middleware.deserialize(current, ctx);
41
59
  }
42
60
  return current;
43
61
  }
@@ -18,7 +18,7 @@ class SerializerMiddleware {
18
18
  /**
19
19
  * @abstract
20
20
  * @param {DeserializedType} data data
21
- * @param {Object} context context object
21
+ * @param {object} context context object
22
22
  * @returns {SerializedType|Promise<SerializedType>} serialized data
23
23
  */
24
24
  serialize(data, context) {
@@ -30,7 +30,7 @@ class SerializerMiddleware {
30
30
  /**
31
31
  * @abstract
32
32
  * @param {SerializedType} data data
33
- * @param {Object} context context object
33
+ * @param {object} context context object
34
34
  * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
35
35
  */
36
36
  deserialize(data, context) {
@@ -45,7 +45,7 @@ class SerializerMiddleware {
45
45
  * @param {any=} serializedValue serialized value
46
46
  * @returns {function(): Promise<any> | any} lazy function
47
47
  */
48
- static createLazy(value, target, options = {}, serializedValue) {
48
+ static createLazy(value, target, options = {}, serializedValue = undefined) {
49
49
  if (SerializerMiddleware.isLazy(value, target)) return value;
50
50
  const fn = typeof value === "function" ? value : () => value;
51
51
  fn[LAZY_TARGET] = target;
@@ -62,24 +62,24 @@ class SerializerMiddleware {
62
62
  static isLazy(fn, target) {
63
63
  if (typeof fn !== "function") return false;
64
64
  const t = fn[LAZY_TARGET];
65
- return target ? t === target : !!t;
65
+ return target ? t === target : Boolean(t);
66
66
  }
67
67
 
68
68
  /**
69
69
  * @param {function(): Promise<any> | any} fn lazy function
70
- * @returns {object} options
70
+ * @returns {object | undefined} options
71
71
  */
72
72
  static getLazyOptions(fn) {
73
- if (typeof fn !== "function") return undefined;
73
+ if (typeof fn !== "function") return;
74
74
  return /** @type {any} */ (fn).options;
75
75
  }
76
76
 
77
77
  /**
78
78
  * @param {function(): Promise<any> | any} fn lazy function
79
- * @returns {any} serialized value
79
+ * @returns {any | undefined} serialized value
80
80
  */
81
81
  static getLazySerializedValue(fn) {
82
- if (typeof fn !== "function") return undefined;
82
+ if (typeof fn !== "function") return;
83
83
  return fn[LAZY_SERIALIZED_VALUE];
84
84
  }
85
85
 
@@ -4,18 +4,34 @@
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
+ /**
24
+ * @template T
25
+ * @param {ObjectDeserializerContext} context context
26
+ * @returns {Set<T>} date
27
+ */
28
+ deserialize(context) {
29
+ /** @type {number} */
30
+ const size = context.read();
31
+ /** @type {Set<T>} */
16
32
  const set = new Set();
17
33
  for (let i = 0; i < size; i++) {
18
- set.add(read());
34
+ set.add(context.read());
19
35
  }
20
36
  return set;
21
37
  }
@@ -14,7 +14,7 @@ const SerializerMiddleware = require("./SerializerMiddleware");
14
14
  class SingleItemMiddleware extends SerializerMiddleware {
15
15
  /**
16
16
  * @param {DeserializedType} data data
17
- * @param {Object} context context object
17
+ * @param {object} context context object
18
18
  * @returns {SerializedType|Promise<SerializedType>} serialized data
19
19
  */
20
20
  serialize(data, context) {
@@ -23,7 +23,7 @@ class SingleItemMiddleware extends SerializerMiddleware {
23
23
 
24
24
  /**
25
25
  * @param {SerializedType} data data
26
- * @param {Object} context context object
26
+ * @param {object} context context object
27
27
  * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
28
28
  */
29
29
  deserialize(data, context) {
@@ -4,9 +4,9 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {undefined|null|number|string|boolean|Buffer|Object|(() => ComplexSerializableType[] | Promise<ComplexSerializableType[]>)} ComplexSerializableType */
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
  }