@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.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 (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -4,11 +4,12 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
- /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<[number]>} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<[number]>} ObjectSerializerContext */
9
9
 
10
10
  class DateObjectSerializer {
11
11
  /**
12
+ * Serializes this instance into the provided serializer context.
12
13
  * @param {Date} obj date
13
14
  * @param {ObjectSerializerContext} context context
14
15
  */
@@ -17,6 +18,7 @@ class DateObjectSerializer {
17
18
  }
18
19
 
19
20
  /**
21
+ * Restores this instance from the provided deserializer context.
20
22
  * @param {ObjectDeserializerContext} context context
21
23
  * @returns {Date} date
22
24
  */
@@ -4,13 +4,15 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
- /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
7
+ /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
9
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
9
10
 
10
11
  /** @typedef {Error & { cause?: unknown }} ErrorWithCause */
11
12
 
12
13
  class ErrorObjectSerializer {
13
14
  /**
15
+ * Creates an instance of ErrorObjectSerializer.
14
16
  * @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
15
17
  */
16
18
  constructor(Type) {
@@ -18,6 +20,7 @@ class ErrorObjectSerializer {
18
20
  }
19
21
 
20
22
  /**
23
+ * Serializes this instance into the provided serializer context.
21
24
  * @param {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} obj error
22
25
  * @param {ObjectSerializerContext} context context
23
26
  */
@@ -25,20 +28,21 @@ class ErrorObjectSerializer {
25
28
  context.write(obj.message);
26
29
  context.write(obj.stack);
27
30
  context.write(
28
- /** @type {ErrorWithCause} */
29
- (obj).cause
31
+ /** @type {ComplexSerializableType} */
32
+ (/** @type {ErrorWithCause} */ (obj).cause)
30
33
  );
31
34
  }
32
35
 
33
36
  /**
37
+ * Restores this instance from the provided deserializer context.
34
38
  * @param {ObjectDeserializerContext} context context
35
39
  * @returns {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} error
36
40
  */
37
41
  deserialize(context) {
38
42
  const err = new this.Type();
39
43
 
40
- err.message = context.read();
41
- err.stack = context.read();
44
+ err.message = /** @type {string} */ (context.read());
45
+ err.stack = /** @type {string | undefined} */ (context.read());
42
46
  /** @type {ErrorWithCause} */
43
47
  (err).cause = context.read();
44
48
 
@@ -13,7 +13,12 @@ const {
13
13
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
14
14
  createBrotliDecompress,
15
15
  createGunzip,
16
- createGzip
16
+ createGzip,
17
+ // zstd is only available on Node.js >= 22.15; guarded at use sites
18
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
19
+ createZstdCompress,
20
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
21
+ createZstdDecompress
17
22
  } = require("zlib");
18
23
  const { DEFAULTS } = require("../config/defaults");
19
24
  const createHash = require("../util/createHash");
@@ -48,6 +53,7 @@ const WRITE_LIMIT_TOTAL = 0x7fff0000;
48
53
  const WRITE_LIMIT_CHUNK = 511 * 1024 * 1024;
49
54
 
50
55
  /**
56
+ * Returns hash.
51
57
  * @param {Buffer[]} buffers buffers
52
58
  * @param {HashFunction} hashFunction hash function to use
53
59
  * @returns {string} hash
@@ -85,6 +91,7 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
85
91
  /** @typedef {Promise<void | void[]>} BackgroundJob */
86
92
 
87
93
  /**
94
+ * Defines the serialize result type used by this module.
88
95
  * @typedef {object} SerializeResult
89
96
  * @property {string | false} name
90
97
  * @property {number} size
@@ -93,10 +100,12 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
93
100
 
94
101
  /** @typedef {{ name: string, size: number }} LazyOptions */
95
102
  /**
103
+ * Defines the lazy function type used by this module.
96
104
  * @typedef {import("./SerializerMiddleware").LazyFunction<BufferSerializableType[], Buffer, FileMiddleware, LazyOptions>} LazyFunction
97
105
  */
98
106
 
99
107
  /**
108
+ * Serializes this instance into the provided serializer context.
100
109
  * @param {FileMiddleware} middleware this
101
110
  * @param {(BufferSerializableType | LazyFunction)[]} data data to be serialized
102
111
  * @param {string | boolean} name file base name
@@ -243,6 +252,7 @@ const serialize = async (
243
252
  };
244
253
 
245
254
  /**
255
+ * Restores this instance from the provided deserializer context.
246
256
  * @param {FileMiddleware} middleware this
247
257
  * @param {string | false} name filename
248
258
  * @param {(name: string | false) => Promise<Buffer[]>} readFile read content of a file
@@ -263,6 +273,7 @@ const deserialize = async (middleware, name, readFile) => {
263
273
  contentPosition = 0;
264
274
  };
265
275
  /**
276
+ * Processes the provided n.
266
277
  * @param {number} n number of bytes to ensure
267
278
  */
268
279
  const ensureData = (n) => {
@@ -294,6 +305,7 @@ const deserialize = async (middleware, name, readFile) => {
294
305
  }
295
306
  };
296
307
  /**
308
+ * Returns value value.
297
309
  * @returns {number} value value
298
310
  */
299
311
  const readUInt32LE = () => {
@@ -303,6 +315,7 @@ const deserialize = async (middleware, name, readFile) => {
303
315
  return value;
304
316
  };
305
317
  /**
318
+ * Returns value value.
306
319
  * @returns {number} value value
307
320
  */
308
321
  const readInt32LE = () => {
@@ -312,6 +325,7 @@ const deserialize = async (middleware, name, readFile) => {
312
325
  return value;
313
326
  };
314
327
  /**
328
+ * Returns buffer.
315
329
  * @param {number} l length
316
330
  * @returns {Buffer} buffer
317
331
  */
@@ -369,9 +383,13 @@ const deserialize = async (middleware, name, readFile) => {
369
383
  );
370
384
  result.push(lazy);
371
385
  } else {
386
+ // A section may start exactly at a content-buffer boundary; advance
387
+ // first, then read from the fresh buffer (don't fall through to the
388
+ // `while` below, which would skip it).
372
389
  if (contentPosition === contentItemLength) {
373
390
  nextContent();
374
- } else if (contentPosition !== 0) {
391
+ }
392
+ if (contentPosition !== 0) {
375
393
  if (length <= contentItemLength - contentPosition) {
376
394
  result.push(
377
395
  Buffer.from(
@@ -429,10 +447,12 @@ const deserialize = async (middleware, name, readFile) => {
429
447
  /** @typedef {{ filename: string, extension?: string }} Context */
430
448
 
431
449
  /**
450
+ * Represents FileMiddleware.
432
451
  * @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
433
452
  */
434
453
  class FileMiddleware extends SerializerMiddleware {
435
454
  /**
455
+ * Creates an instance of FileMiddleware.
436
456
  * @param {IntermediateFileSystem} fs filesystem
437
457
  * @param {HashFunction} hashFunction hash function to use
438
458
  */
@@ -445,6 +465,7 @@ class FileMiddleware extends SerializerMiddleware {
445
465
  }
446
466
 
447
467
  /**
468
+ * Serializes this instance into the provided serializer context.
448
469
  * @param {DeserializedType} data data
449
470
  * @param {Context} context context object
450
471
  * @returns {SerializedType | Promise<SerializedType> | null} serialized data
@@ -460,6 +481,7 @@ class FileMiddleware extends SerializerMiddleware {
460
481
  /** @type {Set<string>} */
461
482
  const allWrittenFiles = new Set();
462
483
  /**
484
+ * Processes the provided name.
463
485
  * @param {string | false} name name
464
486
  * @param {Buffer[]} content content
465
487
  * @param {number} size size
@@ -471,12 +493,13 @@ class FileMiddleware extends SerializerMiddleware {
471
493
  : filename;
472
494
  await new Promise(
473
495
  /**
496
+ * Handles the callback logic for this hook.
474
497
  * @param {(value?: undefined) => void} resolve resolve
475
498
  * @param {(reason?: Error | null) => void} reject reject
476
499
  */
477
500
  (resolve, reject) => {
478
501
  let stream = this.fs.createWriteStream(`${file}_`);
479
- /** @type {undefined | import("zlib").Gzip | import("zlib").BrotliCompress} */
502
+ /** @type {undefined | import("zlib").Gzip | import("zlib").BrotliCompress | import("zlib").ZstdCompress} */
480
503
  let compression;
481
504
  if (file.endsWith(".gz")) {
482
505
  compression = createGzip({
@@ -493,6 +516,17 @@ class FileMiddleware extends SerializerMiddleware {
493
516
  [zConstants.BROTLI_PARAM_SIZE_HINT]: size
494
517
  }
495
518
  });
519
+ } else if (file.endsWith(".zst")) {
520
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
521
+ const levelParam = zConstants.ZSTD_c_compressionLevel;
522
+ // default level 3; some runtimes (e.g. Deno) don't expose ZSTD_CLEVEL_DEFAULT
523
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
524
+ const defaultLevel = zConstants.ZSTD_CLEVEL_DEFAULT;
525
+ const level = defaultLevel === undefined ? 3 : defaultLevel;
526
+ compression = createZstdCompress({
527
+ chunkSize: COMPRESSION_CHUNK_SIZE,
528
+ params: { [levelParam]: level }
529
+ });
496
530
  }
497
531
  if (compression) {
498
532
  pipeline(compression, stream, reject);
@@ -518,6 +552,7 @@ class FileMiddleware extends SerializerMiddleware {
518
552
  const len = chunks.length;
519
553
  let i = 0;
520
554
  /**
555
+ * Processes the provided err.
521
556
  * @param {(Error | null)=} err err
522
557
  */
523
558
  const batchWrite = (err) => {
@@ -557,6 +592,7 @@ class FileMiddleware extends SerializerMiddleware {
557
592
  // Rename the index file to disallow access during inconsistent file state
558
593
  await new Promise(
559
594
  /**
595
+ * Handles the callback logic for this hook.
560
596
  * @param {(value?: undefined) => void} resolve resolve
561
597
  */
562
598
  (resolve) => {
@@ -573,6 +609,7 @@ class FileMiddleware extends SerializerMiddleware {
573
609
  (file) =>
574
610
  new Promise(
575
611
  /**
612
+ * Handles the callback logic for this hook.
576
613
  * @param {(value?: undefined) => void} resolve resolve
577
614
  * @param {(reason?: Error | null) => void} reject reject
578
615
  * @returns {void}
@@ -590,6 +627,7 @@ class FileMiddleware extends SerializerMiddleware {
590
627
  // As final step automatically update the index file to have a consistent pack again
591
628
  await new Promise(
592
629
  /**
630
+ * Handles the callback logic for this hook.
593
631
  * @param {(value?: undefined) => void} resolve resolve
594
632
  * @returns {void}
595
633
  */
@@ -609,6 +647,7 @@ class FileMiddleware extends SerializerMiddleware {
609
647
  }
610
648
 
611
649
  /**
650
+ * Restores this instance from the provided deserializer context.
612
651
  * @param {SerializedType} data data
613
652
  * @param {Context} context context object
614
653
  * @returns {DeserializedType | Promise<DeserializedType>} deserialized data
@@ -616,6 +655,7 @@ class FileMiddleware extends SerializerMiddleware {
616
655
  deserialize(data, context) {
617
656
  const { filename, extension = "" } = context;
618
657
  /**
658
+ * Returns result.
619
659
  * @param {string | boolean} name name
620
660
  * @returns {Promise<Buffer[]>} result
621
661
  */
@@ -646,6 +686,10 @@ class FileMiddleware extends SerializerMiddleware {
646
686
  decompression = createBrotliDecompress({
647
687
  chunkSize: DECOMPRESSION_CHUNK_SIZE
648
688
  });
689
+ } else if (file.endsWith(".zst")) {
690
+ decompression = createZstdDecompress({
691
+ chunkSize: DECOMPRESSION_CHUNK_SIZE
692
+ });
649
693
  }
650
694
  if (decompression) {
651
695
  /** @typedef {(value: Buffer[] | PromiseLike<Buffer[]>) => void} NewResolve */
@@ -663,6 +707,7 @@ class FileMiddleware extends SerializerMiddleware {
663
707
  }),
664
708
  new Promise(
665
709
  /**
710
+ * Handles the chunk size callback for this hook.
666
711
  * @param {(value?: undefined) => void} resolve resolve
667
712
  * @param {(reason?: Error) => void} reject reject
668
713
  */
@@ -764,3 +809,5 @@ class FileMiddleware extends SerializerMiddleware {
764
809
  }
765
810
 
766
811
  module.exports = FileMiddleware;
812
+ // Exposed for testing the content-buffer boundary handling in `deserialize`.
813
+ module.exports._deserialize = deserialize;
@@ -4,14 +4,12 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
- /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
-
10
7
  class MapObjectSerializer {
11
8
  /**
9
+ * Serializes this instance into the provided serializer context.
12
10
  * @template K, V
13
11
  * @param {Map<K, V>} obj map
14
- * @param {ObjectSerializerContext} context context
12
+ * @param {import("./ObjectMiddleware").ObjectSerializerContext<(number | K | V)[]>} context context
15
13
  */
16
14
  serialize(obj, context) {
17
15
  context.write(obj.size);
@@ -24,22 +22,22 @@ class MapObjectSerializer {
24
22
  }
25
23
 
26
24
  /**
25
+ * Restores this instance from the provided deserializer context.
27
26
  * @template K, V
28
- * @param {ObjectDeserializerContext} context context
27
+ * @param {import("./ObjectMiddleware").ObjectDeserializerContext<(number | K | V)[]>} context context
29
28
  * @returns {Map<K, V>} map
30
29
  */
31
30
  deserialize(context) {
32
- /** @type {number} */
33
- const size = context.read();
31
+ const size = /** @type {number} */ (context.read());
34
32
  /** @type {Map<K, V>} */
35
33
  const map = new Map();
36
34
  /** @type {K[]} */
37
35
  const keys = [];
38
36
  for (let i = 0; i < size; i++) {
39
- keys.push(context.read());
37
+ keys.push(/** @type {K} */ (context.read()));
40
38
  }
41
39
  for (let i = 0; i < size; i++) {
42
- map.set(keys[i], context.read());
40
+ map.set(keys[i], /** @type {V} */ (context.read()));
43
41
  }
44
42
  return map;
45
43
  }
@@ -4,16 +4,14 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
- /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
-
10
7
  /** @typedef {string[]} Keys */
11
8
 
12
9
  class NullPrototypeObjectSerializer {
13
10
  /**
11
+ * Serializes this instance into the provided serializer context.
14
12
  * @template {object} T
15
13
  * @param {T} obj null object
16
- * @param {ObjectSerializerContext} context context
14
+ * @param {import("./ObjectMiddleware").ObjectSerializerContext<(string | null | T[keyof T])[]>} context context
17
15
  */
18
16
  serialize(obj, context) {
19
17
  /** @type {Keys} */
@@ -28,8 +26,9 @@ class NullPrototypeObjectSerializer {
28
26
  }
29
27
 
30
28
  /**
29
+ * Restores this instance from the provided deserializer context.
31
30
  * @template {object} T
32
- * @param {ObjectDeserializerContext} context context
31
+ * @param {import("./ObjectMiddleware").ObjectDeserializerContext<(string | null | T[keyof T])[]>} context context
33
32
  * @returns {T} null object
34
33
  */
35
34
  deserialize(context) {
@@ -37,14 +36,15 @@ class NullPrototypeObjectSerializer {
37
36
  const obj = Object.create(null);
38
37
  /** @type {Keys} */
39
38
  const keys = [];
40
- /** @type {Keys[number] | null} */
41
- let key = context.read();
39
+ let key = /** @type {string | null} */ (context.read());
42
40
  while (key !== null) {
43
41
  keys.push(key);
44
- key = context.read();
42
+ key = /** @type {string | null} */ (context.read());
45
43
  }
46
44
  for (const key of keys) {
47
- obj[/** @type {keyof T} */ (key)] = context.read();
45
+ obj[/** @type {keyof T} */ (key)] = /** @type {T[keyof T]} */ (
46
+ context.read()
47
+ );
48
48
  }
49
49
  return obj;
50
50
  }
@@ -48,6 +48,7 @@ Technically any value can be used.
48
48
  */
49
49
 
50
50
  /**
51
+ * Defines the object serializer snapshot type used by this module.
51
52
  * @typedef {object} ObjectSerializerSnapshot
52
53
  * @property {number} length
53
54
  * @property {number} cycleStackSize
@@ -60,8 +61,23 @@ Technically any value can be used.
60
61
  /** @typedef {EXPECTED_OBJECT | string} ReferenceableItem */
61
62
 
62
63
  /**
64
+ * First tuple element; element type for an open array; `EXPECTED_ANY` once exhausted.
65
+ * @template {readonly EXPECTED_ANY[]} T
66
+ * @typedef {T extends readonly [infer H, ...EXPECTED_ANY[]] ? H : T extends readonly [] ? EXPECTED_ANY : T extends readonly (infer E)[] ? E : never} Head
67
+ */
68
+
69
+ /**
70
+ * Tuple without its first element; unchanged when `T` is an open array.
71
+ * @template {readonly EXPECTED_ANY[]} T
72
+ * @typedef {T extends readonly [EXPECTED_ANY, ...infer R] ? R : T} Tail
73
+ */
74
+
75
+ /**
76
+ * Defines the object serializer context type used by this module.
77
+ * `T` is the tuple of values written in order; each `write` consumes the head.
78
+ * @template {readonly EXPECTED_ANY[]} [T=readonly EXPECTED_ANY[]]
63
79
  * @typedef {object} ObjectSerializerContext
64
- * @property {(value: EXPECTED_ANY) => void} write
80
+ * @property {(value: Head<T>) => ObjectSerializerContext<Tail<T>>} write
65
81
  * @property {(value: ReferenceableItem) => void} setCircularReference
66
82
  * @property {() => ObjectSerializerSnapshot} snapshot
67
83
  * @property {(snapshot: ObjectSerializerSnapshot) => void} rollback
@@ -70,18 +86,25 @@ Technically any value can be used.
70
86
  */
71
87
 
72
88
  /**
89
+ * Defines the object deserializer context type used by this module.
90
+ * `T` is the tuple of values read in order: `read` returns the head, and `rest`
91
+ * re-types the same context to `Tail<T>` so successive reads stay positional.
92
+ * @template {readonly EXPECTED_ANY[]} [T=readonly EXPECTED_ANY[]]
73
93
  * @typedef {object} ObjectDeserializerContext
74
- * @property {() => EXPECTED_ANY} read
94
+ * @property {() => Head<T>} read
95
+ * @property {ObjectDeserializerContext<Tail<T>>} rest
75
96
  * @property {(value: ReferenceableItem) => void} setCircularReference
76
97
  */
77
98
 
78
99
  /**
100
+ * Defines the object serializer type used by this module.
79
101
  * @typedef {object} ObjectSerializer
80
- * @property {(value: EXPECTED_ANY, context: ObjectSerializerContext) => void} serialize
81
- * @property {(context: ObjectDeserializerContext) => EXPECTED_ANY} deserialize
102
+ * @property {(value: EXPECTED_ANY, context: ObjectSerializerContext<EXPECTED_ANY>) => void} serialize
103
+ * @property {(context: ObjectDeserializerContext<EXPECTED_ANY>) => EXPECTED_ANY} deserialize
82
104
  */
83
105
 
84
106
  /**
107
+ * Updates set size using the provided set.
85
108
  * @template T
86
109
  * @param {Set<T>} set set
87
110
  * @param {number} size count of items to keep
@@ -96,6 +119,7 @@ const setSetSize = (set, size) => {
96
119
  };
97
120
 
98
121
  /**
122
+ * Updates map size using the provided map.
99
123
  * @template K, X
100
124
  * @param {Map<K, X>} map map
101
125
  * @param {number} size count of items to keep
@@ -110,6 +134,7 @@ const setMapSize = (map, size) => {
110
134
  };
111
135
 
112
136
  /**
137
+ * Returns hash.
113
138
  * @param {Buffer} buffer buffer
114
139
  * @param {HashFunction} hashFunction hash function to use
115
140
  * @returns {string} hash
@@ -207,13 +232,15 @@ const loaders = new Map();
207
232
  /** @typedef {PrimitiveSerializableType[]} SerializedType */
208
233
  /** @typedef {{ logger: Logger }} Context */
209
234
 
210
- /** @typedef {(context: ObjectSerializerContext | ObjectDeserializerContext) => void} ExtendContext */
235
+ /** @typedef {(context: ObjectSerializerContext<EXPECTED_ANY> | ObjectDeserializerContext<EXPECTED_ANY>) => void} ExtendContext */
211
236
 
212
237
  /**
238
+ * Represents ObjectMiddleware.
213
239
  * @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
214
240
  */
215
241
  class ObjectMiddleware extends SerializerMiddleware {
216
242
  /**
243
+ * Creates an instance of ObjectMiddleware.
217
244
  * @param {ExtendContext} extendContext context extensions
218
245
  * @param {HashFunction} hashFunction hash function to use
219
246
  */
@@ -226,6 +253,7 @@ class ObjectMiddleware extends SerializerMiddleware {
226
253
  }
227
254
 
228
255
  /**
256
+ * Processes the provided reg exp.
229
257
  * @param {RegExp} regExp RegExp for which the request is tested
230
258
  * @param {(request: string) => boolean} loader loader to load the request, returns true when successful
231
259
  * @returns {void}
@@ -235,6 +263,7 @@ class ObjectMiddleware extends SerializerMiddleware {
235
263
  }
236
264
 
237
265
  /**
266
+ * Processes the provided constructor.
238
267
  * @param {Constructor} Constructor the constructor
239
268
  * @param {string} request the request which will be required when deserializing
240
269
  * @param {string | null} name the name to make multiple serializer unique when sharing a request
@@ -266,6 +295,7 @@ class ObjectMiddleware extends SerializerMiddleware {
266
295
  }
267
296
 
268
297
  /**
298
+ * Register not serializable.
269
299
  * @param {Constructor} Constructor the constructor
270
300
  * @returns {void}
271
301
  */
@@ -280,6 +310,7 @@ class ObjectMiddleware extends SerializerMiddleware {
280
310
  }
281
311
 
282
312
  /**
313
+ * Gets serializer for.
283
314
  * @param {EXPECTED_ANY} object for serialization
284
315
  * @returns {SerializerConfigWithSerializer} Serializer config
285
316
  */
@@ -311,6 +342,7 @@ class ObjectMiddleware extends SerializerMiddleware {
311
342
  }
312
343
 
313
344
  /**
345
+ * Gets deserializer for.
314
346
  * @param {string} request request
315
347
  * @param {string} name name
316
348
  * @returns {ObjectSerializer} serializer
@@ -327,6 +359,7 @@ class ObjectMiddleware extends SerializerMiddleware {
327
359
  }
328
360
 
329
361
  /**
362
+ * Get deserializer for without error.
330
363
  * @param {string} request request
331
364
  * @param {string} name name
332
365
  * @returns {ObjectSerializer | undefined} serializer
@@ -338,6 +371,7 @@ class ObjectMiddleware extends SerializerMiddleware {
338
371
  }
339
372
 
340
373
  /**
374
+ * Serializes this instance into the provided serializer context.
341
375
  * @param {DeserializedType} data data
342
376
  * @param {Context} context context object
343
377
  * @returns {SerializedType | Promise<SerializedType> | null} serialized data
@@ -349,6 +383,7 @@ class ObjectMiddleware extends SerializerMiddleware {
349
383
  /** @type {Map<ReferenceableItem, number>} */
350
384
  let referenceable = new Map();
351
385
  /**
386
+ * Adds referenceable.
352
387
  * @param {ReferenceableItem} item referenceable item
353
388
  */
354
389
  const addReferenceable = (item) => {
@@ -357,6 +392,7 @@ class ObjectMiddleware extends SerializerMiddleware {
357
392
  /** @type {Map<number, Buffer | [Buffer, Buffer] | Map<string, Buffer>>} */
358
393
  let bufferDedupeMap = new Map();
359
394
  /**
395
+ * Returns deduped buffer.
360
396
  * @param {Buffer} buf buffer
361
397
  * @returns {Buffer} deduped buffer
362
398
  */
@@ -426,6 +462,7 @@ class ObjectMiddleware extends SerializerMiddleware {
426
462
  /** @type {Set<ComplexSerializableType>} */
427
463
  const cycleStack = new Set();
428
464
  /**
465
+ * Returns stack.
429
466
  * @param {ComplexSerializableType} item item to stack
430
467
  * @returns {string} stack
431
468
  */
@@ -487,11 +524,11 @@ class ObjectMiddleware extends SerializerMiddleware {
487
524
  };
488
525
  /** @type {undefined | WeakSet<Error>} */
489
526
  let hasDebugInfoAttached;
490
- /** @type {ObjectSerializerContext} */
527
+ /** @type {ObjectSerializerContext<EXPECTED_ANY>} */
491
528
  let ctx = {
492
529
  write(value) {
493
530
  try {
494
- process(value);
531
+ process(/** @type {ComplexSerializableType} */ (value));
495
532
  } catch (err) {
496
533
  if (err !== NOT_SERIALIZABLE) {
497
534
  if (hasDebugInfoAttached === undefined) {
@@ -499,12 +536,14 @@ class ObjectMiddleware extends SerializerMiddleware {
499
536
  }
500
537
  if (!hasDebugInfoAttached.has(/** @type {Error} */ (err))) {
501
538
  /** @type {Error} */
502
- (err).message += `\nwhile serializing ${stackToString(value)}`;
539
+ (err).message +=
540
+ `\nwhile serializing ${stackToString(/** @type {ComplexSerializableType} */ (value))}`;
503
541
  hasDebugInfoAttached.add(/** @type {Error} */ (err));
504
542
  }
505
543
  }
506
544
  throw err;
507
545
  }
546
+ return ctx;
508
547
  },
509
548
  setCircularReference(ref) {
510
549
  addReferenceable(ref);
@@ -531,6 +570,7 @@ class ObjectMiddleware extends SerializerMiddleware {
531
570
  };
532
571
  this.extendContext(ctx);
533
572
  /**
573
+ * Processes the provided item.
534
574
  * @param {ComplexSerializableType} item item to serialize
535
575
  */
536
576
  const process = (item) => {
@@ -605,8 +645,19 @@ class ObjectMiddleware extends SerializerMiddleware {
605
645
  // check if we can emit a reference
606
646
  const ref = referenceable.get(item);
607
647
  if (ref !== undefined) {
608
- result.push(ESCAPE, ref - currentPos);
609
- return;
648
+ const offset = ref - currentPos;
649
+ if (
650
+ // One far ref → 5 bytes (`null` + offset), one near ref -> 2/3 bytes
651
+ offset >= -32768 ||
652
+ // long enough that the ref wins, keep it
653
+ item.length >= 4 ||
654
+ // multibyte → inline would be even bigger, keep it
655
+ Buffer.byteLength(item) !== item.length
656
+ ) {
657
+ // A back-reference is `null` + the offset.
658
+ result.push(ESCAPE, offset);
659
+ return;
660
+ }
610
661
  }
611
662
  addReferenceable(item);
612
663
  }
@@ -681,6 +732,7 @@ class ObjectMiddleware extends SerializerMiddleware {
681
732
  }
682
733
 
683
734
  /**
735
+ * Restores this instance from the provided deserializer context.
684
736
  * @param {SerializedType} data data
685
737
  * @param {Context} context context object
686
738
  * @returns {DeserializedType | Promise<DeserializedType>} deserialized data
@@ -703,6 +755,7 @@ class ObjectMiddleware extends SerializerMiddleware {
703
755
  /** @type {ReferenceableItem[]} */
704
756
  let referenceable = [];
705
757
  /**
758
+ * Adds referenceable.
706
759
  * @param {ReferenceableItem} item referenceable item
707
760
  */
708
761
  const addReferenceable = (item) => {
@@ -714,10 +767,14 @@ class ObjectMiddleware extends SerializerMiddleware {
714
767
  let objectTypeLookup = [];
715
768
  /** @type {ComplexSerializableType[]} */
716
769
  let result = [];
717
- /** @type {ObjectDeserializerContext} */
770
+ /** @type {ObjectDeserializerContext<EXPECTED_ANY>} */
718
771
  let ctx = {
719
772
  read() {
720
- return decodeValue();
773
+ return /** @type {EXPECTED_ANY} */ (decodeValue());
774
+ },
775
+ // type-only cursor advance; same object, retyped to the tuple tail
776
+ get rest() {
777
+ return ctx;
721
778
  },
722
779
  setCircularReference(ref) {
723
780
  addReferenceable(ref);
@@ -726,6 +783,7 @@ class ObjectMiddleware extends SerializerMiddleware {
726
783
  };
727
784
  this.extendContext(ctx);
728
785
  /**
786
+ * Decodes the provided value.
729
787
  * @returns {ComplexSerializableType} deserialize value
730
788
  */
731
789
  const decodeValue = () => {
@@ -836,7 +894,9 @@ class ObjectMiddleware extends SerializerMiddleware {
836
894
  }
837
895
 
838
896
  return item;
839
- } else if (Buffer.isBuffer(item)) {
897
+ } else if (typeof item === "object") {
898
+ // Only non-null objects reach here (ESCAPE/null handled above), and
899
+ // the stream's only object type is Buffer — avoids a Buffer.isBuffer call
840
900
  addReferenceable(item);
841
901
 
842
902
  return item;