@graphrefly/graphrefly 0.47.1 → 0.48.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 (303) hide show
  1. package/dist/base/composition/index.cjs +28 -19
  2. package/dist/base/composition/index.cjs.map +1 -1
  3. package/dist/base/composition/index.d.cts +14 -5
  4. package/dist/base/composition/index.d.ts +14 -5
  5. package/dist/base/composition/index.js +9 -9
  6. package/dist/base/index.cjs +294 -164
  7. package/dist/base/index.cjs.map +1 -1
  8. package/dist/base/index.d.cts +2 -2
  9. package/dist/base/index.d.ts +2 -2
  10. package/dist/base/index.js +77 -72
  11. package/dist/base/io/index.cjs +145 -85
  12. package/dist/base/io/index.cjs.map +1 -1
  13. package/dist/base/io/index.d.cts +32 -5
  14. package/dist/base/io/index.d.ts +32 -5
  15. package/dist/base/io/index.js +5 -5
  16. package/dist/base/mutation/index.cjs +21 -0
  17. package/dist/base/mutation/index.cjs.map +1 -1
  18. package/dist/base/mutation/index.d.cts +23 -1
  19. package/dist/base/mutation/index.d.ts +23 -1
  20. package/dist/base/mutation/index.js +3 -1
  21. package/dist/base/sources/browser/index.cjs +18 -12
  22. package/dist/base/sources/browser/index.cjs.map +1 -1
  23. package/dist/base/sources/browser/index.d.cts +20 -2
  24. package/dist/base/sources/browser/index.d.ts +20 -2
  25. package/dist/base/sources/browser/index.js +18 -12
  26. package/dist/base/sources/browser/index.js.map +1 -1
  27. package/dist/base/sources/event/index.cjs +29 -1
  28. package/dist/base/sources/event/index.cjs.map +1 -1
  29. package/dist/base/sources/event/index.d.cts +67 -3
  30. package/dist/base/sources/event/index.d.ts +67 -3
  31. package/dist/base/sources/event/index.js +5 -2
  32. package/dist/base/sources/index.cjs +96 -50
  33. package/dist/base/sources/index.cjs.map +1 -1
  34. package/dist/base/sources/index.d.cts +1 -1
  35. package/dist/base/sources/index.d.ts +1 -1
  36. package/dist/base/sources/index.js +7 -4
  37. package/dist/base/sources/node/index.cjs +43 -37
  38. package/dist/base/sources/node/index.cjs.map +1 -1
  39. package/dist/base/sources/node/index.js +43 -37
  40. package/dist/base/sources/node/index.js.map +1 -1
  41. package/dist/{chunk-J5WFUEO4.js → chunk-23MAWVOJ.js} +3 -3
  42. package/dist/{chunk-YXCPV26R.js → chunk-3REMCHSS.js} +39 -27
  43. package/dist/chunk-3REMCHSS.js.map +1 -0
  44. package/dist/{chunk-CEVNQ74M.js → chunk-3YGXPUHW.js} +2 -2
  45. package/dist/{chunk-CEVNQ74M.js.map → chunk-3YGXPUHW.js.map} +1 -1
  46. package/dist/{chunk-EVYY4X5A.js → chunk-46X2EFQH.js} +16 -5
  47. package/dist/chunk-46X2EFQH.js.map +1 -0
  48. package/dist/{chunk-NY2PYHNC.js → chunk-5UY3PNFY.js} +12 -5
  49. package/dist/chunk-5UY3PNFY.js.map +1 -0
  50. package/dist/{chunk-RGMTUZCL.js → chunk-65OM4XLQ.js} +50 -4
  51. package/dist/chunk-65OM4XLQ.js.map +1 -0
  52. package/dist/{chunk-3PSLNJDU.js → chunk-6DQYBIHW.js} +314 -49
  53. package/dist/chunk-6DQYBIHW.js.map +1 -0
  54. package/dist/{chunk-LDCSZ72P.js → chunk-6YBER5UP.js} +3 -3
  55. package/dist/{chunk-LDCSZ72P.js.map → chunk-6YBER5UP.js.map} +1 -1
  56. package/dist/{chunk-7EGRP2VX.js → chunk-7BULJTL6.js} +2 -2
  57. package/dist/{chunk-7EGRP2VX.js.map → chunk-7BULJTL6.js.map} +1 -1
  58. package/dist/{chunk-VLAGJZSL.js → chunk-7T7WLEPM.js} +25 -4
  59. package/dist/chunk-7T7WLEPM.js.map +1 -0
  60. package/dist/{chunk-PKPO3JTZ.js → chunk-AQAKDE7F.js} +29 -11
  61. package/dist/chunk-AQAKDE7F.js.map +1 -0
  62. package/dist/{chunk-2OB3CEJS.js → chunk-B5Y5GPD5.js} +2 -2
  63. package/dist/{chunk-BXGZFGZ4.js → chunk-C5QD5DQX.js} +22 -1
  64. package/dist/chunk-C5QD5DQX.js.map +1 -0
  65. package/dist/{chunk-4XCHZRUJ.js → chunk-D5YGR4TP.js} +58 -7
  66. package/dist/chunk-D5YGR4TP.js.map +1 -0
  67. package/dist/{chunk-NPRP3MCV.js → chunk-DHDCOOJU.js} +2 -2
  68. package/dist/chunk-DHDCOOJU.js.map +1 -0
  69. package/dist/{chunk-MTTRCEJT.js → chunk-DVTDF5OI.js} +2 -2
  70. package/dist/{chunk-SOOKUYVM.js → chunk-F7EKHR32.js} +13 -9
  71. package/dist/chunk-F7EKHR32.js.map +1 -0
  72. package/dist/{chunk-A7KV5UK4.js → chunk-G7H6PN7P.js} +2 -2
  73. package/dist/{chunk-OCUDSN63.js → chunk-GGKHHG5Y.js} +110 -64
  74. package/dist/chunk-GGKHHG5Y.js.map +1 -0
  75. package/dist/{chunk-RAGGHLCV.js → chunk-GUNIRPEJ.js} +8 -6
  76. package/dist/{chunk-RAGGHLCV.js.map → chunk-GUNIRPEJ.js.map} +1 -1
  77. package/dist/{chunk-YJ4U2D2C.js → chunk-J5TBZFBD.js} +9 -7
  78. package/dist/chunk-J5TBZFBD.js.map +1 -0
  79. package/dist/{chunk-Y52CS6YA.js → chunk-JA67ZQG2.js} +2 -2
  80. package/dist/{chunk-Y52CS6YA.js.map → chunk-JA67ZQG2.js.map} +1 -1
  81. package/dist/{chunk-U225SKB4.js → chunk-K4ZYJ4EM.js} +569 -424
  82. package/dist/chunk-K4ZYJ4EM.js.map +1 -0
  83. package/dist/{chunk-Z4YXAUDN.js → chunk-KUFXLAEY.js} +11 -7
  84. package/dist/{chunk-Z4YXAUDN.js.map → chunk-KUFXLAEY.js.map} +1 -1
  85. package/dist/{chunk-IHTWQEDR.js → chunk-LTSI7ULC.js} +3 -3
  86. package/dist/{chunk-IHTWQEDR.js.map → chunk-LTSI7ULC.js.map} +1 -1
  87. package/dist/{chunk-DKNHAICT.js → chunk-MMHGYX44.js} +25 -9
  88. package/dist/chunk-MMHGYX44.js.map +1 -0
  89. package/dist/{chunk-K7PDZYQE.js → chunk-MQMTRKY3.js} +129 -50
  90. package/dist/chunk-MQMTRKY3.js.map +1 -0
  91. package/dist/{chunk-42FQ27MQ.js → chunk-MTODGQBR.js} +44 -179
  92. package/dist/chunk-MTODGQBR.js.map +1 -0
  93. package/dist/{chunk-O3MT7DYI.js → chunk-N6MNJNHB.js} +2 -2
  94. package/dist/{chunk-FVINAAKA.js → chunk-NBK6QQMG.js} +14 -13
  95. package/dist/{chunk-FVINAAKA.js.map → chunk-NBK6QQMG.js.map} +1 -1
  96. package/dist/{chunk-DM4OMPWK.js → chunk-NSA5K5G2.js} +2 -2
  97. package/dist/{chunk-MLTPJMH6.js → chunk-QQYULEZL.js} +2 -2
  98. package/dist/chunk-QSW4DFKE.js +31 -0
  99. package/dist/chunk-QSW4DFKE.js.map +1 -0
  100. package/dist/{chunk-PZWISPIQ.js → chunk-S7HN5FHL.js} +17 -11
  101. package/dist/chunk-S7HN5FHL.js.map +1 -0
  102. package/dist/{chunk-4S53H2KR.js → chunk-SUNCHMML.js} +2 -2
  103. package/dist/{chunk-4GYMCUDZ.js → chunk-T2U6N3FV.js} +7 -7
  104. package/dist/{chunk-RJOG4IJU.js → chunk-T5URUIIY.js} +50 -35
  105. package/dist/chunk-T5URUIIY.js.map +1 -0
  106. package/dist/{chunk-B4AKFXGE.js → chunk-TPTZZV25.js} +6 -6
  107. package/dist/chunk-TPTZZV25.js.map +1 -0
  108. package/dist/{chunk-BU3SEFA5.js → chunk-V46JWFGV.js} +7 -6
  109. package/dist/chunk-V46JWFGV.js.map +1 -0
  110. package/dist/{chunk-IJRR6YAI.js → chunk-VLDRAMP7.js} +18 -12
  111. package/dist/chunk-VLDRAMP7.js.map +1 -0
  112. package/dist/{chunk-6XZYT4SW.js → chunk-X6ESZDR6.js} +8 -9
  113. package/dist/chunk-X6ESZDR6.js.map +1 -0
  114. package/dist/{chunk-E5OZPDIW.js → chunk-X7BA5PWG.js} +7 -5
  115. package/dist/chunk-X7BA5PWG.js.map +1 -0
  116. package/dist/{chunk-CXANAIZU.js → chunk-XEWV254I.js} +3 -3
  117. package/dist/{chunk-CXANAIZU.js.map → chunk-XEWV254I.js.map} +1 -1
  118. package/dist/{chunk-V4Y3TM7U.js → chunk-YBJVKMTM.js} +38 -16
  119. package/dist/chunk-YBJVKMTM.js.map +1 -0
  120. package/dist/{chunk-7ADWWI2T.js → chunk-ZW32BPXV.js} +17 -6
  121. package/dist/chunk-ZW32BPXV.js.map +1 -0
  122. package/dist/compat/index.cjs +52 -5
  123. package/dist/compat/index.cjs.map +1 -1
  124. package/dist/compat/index.d.cts +1 -1
  125. package/dist/compat/index.d.ts +1 -1
  126. package/dist/compat/index.js +7 -7
  127. package/dist/compat/nestjs/index.cjs +52 -5
  128. package/dist/compat/nestjs/index.cjs.map +1 -1
  129. package/dist/compat/nestjs/index.d.cts +1 -1
  130. package/dist/compat/nestjs/index.d.ts +1 -1
  131. package/dist/compat/nestjs/index.js +4 -4
  132. package/dist/{fallback-Bx46zqky.d.cts → fallback-BROR6ZhO.d.cts} +1 -1
  133. package/dist/{fallback-pIWW8A2d.d.ts → fallback-DO80aM_3.d.ts} +1 -1
  134. package/dist/{index-B_p8tnvf.d.cts → index-D1z3XcF9.d.cts} +1 -0
  135. package/dist/{index-_HDSmPyp.d.ts → index-DZ6yua0Q.d.ts} +1 -0
  136. package/dist/index.cjs +2387 -1707
  137. package/dist/index.cjs.map +1 -1
  138. package/dist/index.d.cts +10 -10
  139. package/dist/index.d.ts +10 -10
  140. package/dist/index.js +173 -150
  141. package/dist/index.js.map +1 -1
  142. package/dist/presets/ai/index.cjs +88 -26
  143. package/dist/presets/ai/index.cjs.map +1 -1
  144. package/dist/presets/ai/index.js +14 -14
  145. package/dist/presets/harness/index.cjs +183 -51
  146. package/dist/presets/harness/index.cjs.map +1 -1
  147. package/dist/presets/harness/index.d.cts +15 -5
  148. package/dist/presets/harness/index.d.ts +15 -5
  149. package/dist/presets/harness/index.js +26 -26
  150. package/dist/presets/index.cjs +298 -101
  151. package/dist/presets/index.cjs.map +1 -1
  152. package/dist/presets/index.d.cts +2 -2
  153. package/dist/presets/index.d.ts +2 -2
  154. package/dist/presets/index.js +49 -49
  155. package/dist/presets/inspect/index.cjs +63 -14
  156. package/dist/presets/inspect/index.cjs.map +1 -1
  157. package/dist/presets/inspect/index.d.cts +1 -1
  158. package/dist/presets/inspect/index.d.ts +1 -1
  159. package/dist/presets/inspect/index.js +6 -6
  160. package/dist/presets/resilience/index.cjs +64 -44
  161. package/dist/presets/resilience/index.cjs.map +1 -1
  162. package/dist/presets/resilience/index.d.cts +12 -8
  163. package/dist/presets/resilience/index.d.ts +12 -8
  164. package/dist/presets/resilience/index.js +6 -6
  165. package/dist/{rate-limiter-DpVbSYdH.d.cts → rate-limiter-DC26FM8J.d.cts} +10 -1
  166. package/dist/{rate-limiter-CEALq4N1.d.ts → rate-limiter-DyWpwpQP.d.ts} +10 -1
  167. package/dist/{reactive-layout-fswlBUvX.d.ts → reactive-layout-BBBWH0V_.d.cts} +85 -4
  168. package/dist/{reactive-layout-fswlBUvX.d.cts → reactive-layout-BBBWH0V_.d.ts} +85 -4
  169. package/dist/solutions/index.cjs +239 -92
  170. package/dist/solutions/index.cjs.map +1 -1
  171. package/dist/solutions/index.d.cts +2 -2
  172. package/dist/solutions/index.d.ts +2 -2
  173. package/dist/solutions/index.js +32 -32
  174. package/dist/{spawnable-5mDY501F.d.cts → spawnable-B2IlW60f.d.cts} +23 -2
  175. package/dist/{spawnable-D3lR0oQu.d.ts → spawnable-tttFz2Nh.d.ts} +23 -2
  176. package/dist/testing/index.cjs +94 -0
  177. package/dist/testing/index.cjs.map +1 -0
  178. package/dist/testing/index.d.cts +59 -0
  179. package/dist/testing/index.d.ts +59 -0
  180. package/dist/testing/index.js +73 -0
  181. package/dist/testing/index.js.map +1 -0
  182. package/dist/{timeout-U5O4ESK3.js → timeout-BEABACRP.js} +2 -2
  183. package/dist/utils/ai/browser.cjs.map +1 -1
  184. package/dist/utils/ai/browser.d.cts +2 -2
  185. package/dist/utils/ai/browser.d.ts +2 -2
  186. package/dist/utils/ai/browser.js +10 -10
  187. package/dist/utils/ai/browser.js.map +1 -1
  188. package/dist/utils/ai/index.cjs +291 -191
  189. package/dist/utils/ai/index.cjs.map +1 -1
  190. package/dist/utils/ai/index.d.cts +108 -12
  191. package/dist/utils/ai/index.d.ts +108 -12
  192. package/dist/utils/ai/index.js +23 -21
  193. package/dist/utils/ai/node.cjs.map +1 -1
  194. package/dist/utils/ai/node.d.cts +5 -5
  195. package/dist/utils/ai/node.d.ts +5 -5
  196. package/dist/utils/ai/node.js +3 -3
  197. package/dist/utils/ai/node.js.map +1 -1
  198. package/dist/utils/cqrs/index.cjs +29 -3
  199. package/dist/utils/cqrs/index.cjs.map +1 -1
  200. package/dist/utils/cqrs/index.d.cts +12 -7
  201. package/dist/utils/cqrs/index.d.ts +12 -7
  202. package/dist/utils/cqrs/index.js +2 -2
  203. package/dist/utils/demo-shell/index.cjs +45 -19
  204. package/dist/utils/demo-shell/index.cjs.map +1 -1
  205. package/dist/utils/demo-shell/index.d.cts +1 -1
  206. package/dist/utils/demo-shell/index.d.ts +1 -1
  207. package/dist/utils/demo-shell/index.js +2 -2
  208. package/dist/utils/domain-templates/index.cjs +1 -1
  209. package/dist/utils/domain-templates/index.cjs.map +1 -1
  210. package/dist/utils/domain-templates/index.js +3 -3
  211. package/dist/utils/graphspec/index.cjs +1 -1
  212. package/dist/utils/graphspec/index.cjs.map +1 -1
  213. package/dist/utils/graphspec/index.js +3 -3
  214. package/dist/utils/harness/index.cjs +16 -10
  215. package/dist/utils/harness/index.cjs.map +1 -1
  216. package/dist/utils/harness/index.js +1 -1
  217. package/dist/utils/index.cjs +1692 -1192
  218. package/dist/utils/index.cjs.map +1 -1
  219. package/dist/utils/index.d.cts +7 -7
  220. package/dist/utils/index.d.ts +7 -7
  221. package/dist/utils/index.js +77 -59
  222. package/dist/utils/inspect/index.cjs +52 -4
  223. package/dist/utils/inspect/index.cjs.map +1 -1
  224. package/dist/utils/inspect/index.d.cts +32 -3
  225. package/dist/utils/inspect/index.d.ts +32 -3
  226. package/dist/utils/inspect/index.js +4 -4
  227. package/dist/utils/job-queue/index.cjs +46 -9
  228. package/dist/utils/job-queue/index.cjs.map +1 -1
  229. package/dist/utils/job-queue/index.d.cts +33 -3
  230. package/dist/utils/job-queue/index.d.ts +33 -3
  231. package/dist/utils/job-queue/index.js +2 -2
  232. package/dist/utils/memory/index.cjs +570 -425
  233. package/dist/utils/memory/index.cjs.map +1 -1
  234. package/dist/utils/memory/index.d.cts +261 -33
  235. package/dist/utils/memory/index.d.ts +261 -33
  236. package/dist/utils/memory/index.js +10 -2
  237. package/dist/utils/messaging/index.cjs.map +1 -1
  238. package/dist/utils/messaging/index.d.cts +4 -3
  239. package/dist/utils/messaging/index.d.ts +4 -3
  240. package/dist/utils/messaging/index.js +2 -2
  241. package/dist/utils/orchestration/index.cjs +14 -3
  242. package/dist/utils/orchestration/index.cjs.map +1 -1
  243. package/dist/utils/orchestration/index.js +3 -3
  244. package/dist/utils/process/index.cjs +32 -2
  245. package/dist/utils/process/index.cjs.map +1 -1
  246. package/dist/utils/process/index.d.cts +4 -3
  247. package/dist/utils/process/index.d.ts +4 -3
  248. package/dist/utils/process/index.js +3 -3
  249. package/dist/utils/reactive-layout/index.cjs +184 -55
  250. package/dist/utils/reactive-layout/index.cjs.map +1 -1
  251. package/dist/utils/reactive-layout/index.d.cts +128 -3
  252. package/dist/utils/reactive-layout/index.d.ts +128 -3
  253. package/dist/utils/reactive-layout/index.js +16 -8
  254. package/dist/utils/reduction/index.cjs +1 -1
  255. package/dist/utils/reduction/index.cjs.map +1 -1
  256. package/dist/utils/reduction/index.js +2 -2
  257. package/dist/utils/resilience/index.cjs +64 -43
  258. package/dist/utils/resilience/index.cjs.map +1 -1
  259. package/dist/utils/resilience/index.d.cts +1 -1
  260. package/dist/utils/resilience/index.d.ts +1 -1
  261. package/dist/utils/resilience/index.js +5 -5
  262. package/dist/utils/surface/index.cjs +1 -1
  263. package/dist/utils/surface/index.cjs.map +1 -1
  264. package/dist/utils/surface/index.js +4 -4
  265. package/package.json +15 -3
  266. package/dist/chunk-3PSLNJDU.js.map +0 -1
  267. package/dist/chunk-42FQ27MQ.js.map +0 -1
  268. package/dist/chunk-4XCHZRUJ.js.map +0 -1
  269. package/dist/chunk-6XZYT4SW.js.map +0 -1
  270. package/dist/chunk-7ADWWI2T.js.map +0 -1
  271. package/dist/chunk-B4AKFXGE.js.map +0 -1
  272. package/dist/chunk-BU3SEFA5.js.map +0 -1
  273. package/dist/chunk-BXGZFGZ4.js.map +0 -1
  274. package/dist/chunk-DKNHAICT.js.map +0 -1
  275. package/dist/chunk-E5OZPDIW.js.map +0 -1
  276. package/dist/chunk-EVYY4X5A.js.map +0 -1
  277. package/dist/chunk-IJRR6YAI.js.map +0 -1
  278. package/dist/chunk-K7PDZYQE.js.map +0 -1
  279. package/dist/chunk-NPRP3MCV.js.map +0 -1
  280. package/dist/chunk-NY2PYHNC.js.map +0 -1
  281. package/dist/chunk-OCUDSN63.js.map +0 -1
  282. package/dist/chunk-PKPO3JTZ.js.map +0 -1
  283. package/dist/chunk-PZWISPIQ.js.map +0 -1
  284. package/dist/chunk-RGMTUZCL.js.map +0 -1
  285. package/dist/chunk-RJOG4IJU.js.map +0 -1
  286. package/dist/chunk-SOOKUYVM.js.map +0 -1
  287. package/dist/chunk-U225SKB4.js.map +0 -1
  288. package/dist/chunk-V4Y3TM7U.js.map +0 -1
  289. package/dist/chunk-VLAGJZSL.js.map +0 -1
  290. package/dist/chunk-W2BOPXTI.js +0 -1
  291. package/dist/chunk-YJ4U2D2C.js.map +0 -1
  292. package/dist/chunk-YXCPV26R.js.map +0 -1
  293. package/dist/timeout-U5O4ESK3.js.map +0 -1
  294. /package/dist/{chunk-J5WFUEO4.js.map → chunk-23MAWVOJ.js.map} +0 -0
  295. /package/dist/{chunk-2OB3CEJS.js.map → chunk-B5Y5GPD5.js.map} +0 -0
  296. /package/dist/{chunk-MTTRCEJT.js.map → chunk-DVTDF5OI.js.map} +0 -0
  297. /package/dist/{chunk-A7KV5UK4.js.map → chunk-G7H6PN7P.js.map} +0 -0
  298. /package/dist/{chunk-O3MT7DYI.js.map → chunk-N6MNJNHB.js.map} +0 -0
  299. /package/dist/{chunk-DM4OMPWK.js.map → chunk-NSA5K5G2.js.map} +0 -0
  300. /package/dist/{chunk-MLTPJMH6.js.map → chunk-QQYULEZL.js.map} +0 -0
  301. /package/dist/{chunk-4S53H2KR.js.map → chunk-SUNCHMML.js.map} +0 -0
  302. /package/dist/{chunk-4GYMCUDZ.js.map → chunk-T2U6N3FV.js.map} +0 -0
  303. /package/dist/{chunk-W2BOPXTI.js.map → timeout-BEABACRP.js.map} +0 -0
@@ -78,7 +78,12 @@ module.exports = __toCommonJS(io_exports);
78
78
  // src/base/io/checkpoint.ts
79
79
  var import_core = require("@graphrefly/pure-ts/core");
80
80
  function checkpointToS3(graph, client, bucket, opts) {
81
- const { prefix = "checkpoints/", debounceMs = 500, compactEvery = 10, onError } = opts ?? {};
81
+ const {
82
+ prefix = "checkpoints/",
83
+ debounceMs = 500,
84
+ compactEvery = 10,
85
+ onError = (err) => console.error(`checkpointToS3(${bucket}): checkpoint persistence failed`, err)
86
+ } = opts ?? {};
82
87
  const tier = {
83
88
  name: `s3:${bucket}`,
84
89
  debounceMs,
@@ -90,7 +95,7 @@ function checkpointToS3(graph, client, bucket, opts) {
90
95
  try {
91
96
  body = JSON.stringify(record);
92
97
  } catch (err) {
93
- onError?.(err);
98
+ onError(err);
94
99
  return;
95
100
  }
96
101
  void client.putObject({
@@ -98,13 +103,13 @@ function checkpointToS3(graph, client, bucket, opts) {
98
103
  Key: s3Key,
99
104
  Body: body,
100
105
  ContentType: "application/json"
101
- }).catch((err) => onError?.(err));
106
+ }).catch((err) => onError(err));
102
107
  }
103
108
  // S3 tier is write-only here — one object per checkpoint timestamp,
104
109
  // no canonical "latest" key for load.
105
110
  };
106
111
  return graph.attachSnapshotStorage([{ snapshot: tier }], {
107
- onError: (err) => onError?.(err)
112
+ onError: (err) => onError(err)
108
113
  });
109
114
  }
110
115
  function checkpointToRedis(graph, client, opts) {
@@ -112,7 +117,7 @@ function checkpointToRedis(graph, client, opts) {
112
117
  prefix = "graphrefly:checkpoint:",
113
118
  debounceMs = 500,
114
119
  compactEvery = 10,
115
- onError
120
+ onError = (err) => console.error(`checkpointToRedis(${graph.name}): checkpoint persistence failed`, err)
116
121
  } = opts ?? {};
117
122
  const redisKey = `${prefix}${graph.name}`;
118
123
  const tier = {
@@ -124,23 +129,24 @@ function checkpointToRedis(graph, client, opts) {
124
129
  try {
125
130
  body = JSON.stringify(record);
126
131
  } catch (err) {
127
- onError?.(err);
132
+ onError(err);
128
133
  return;
129
134
  }
130
- void client.set(redisKey, body).catch((err) => onError?.(err));
135
+ void client.set(redisKey, body).catch((err) => onError(err));
131
136
  },
132
137
  async load() {
133
138
  const raw = await client.get(redisKey);
134
139
  if (raw == null) return void 0;
135
140
  try {
136
141
  return JSON.parse(raw);
137
- } catch {
142
+ } catch (err) {
143
+ onError(err);
138
144
  return void 0;
139
145
  }
140
146
  }
141
147
  };
142
148
  return graph.attachSnapshotStorage([{ snapshot: tier }], {
143
- onError: (err) => onError?.(err)
149
+ onError: (err) => onError(err)
144
150
  });
145
151
  }
146
152
 
@@ -267,8 +273,10 @@ function fromClickHouseWatch(client, query, opts) {
267
273
  }
268
274
  };
269
275
  void run();
270
- return () => {
271
- active = false;
276
+ return {
277
+ onDeactivation: () => {
278
+ active = false;
279
+ }
272
280
  };
273
281
  })
274
282
  );
@@ -339,8 +347,10 @@ function fromCSV(source, opts) {
339
347
  }
340
348
  };
341
349
  void run();
342
- return () => {
343
- cancelled = true;
350
+ return {
351
+ onDeactivation: () => {
352
+ cancelled = true;
353
+ }
344
354
  };
345
355
  },
346
356
  sourceOpts(rest)
@@ -444,8 +454,10 @@ function fromDrizzle(query, opts) {
444
454
  } catch {
445
455
  }
446
456
  });
447
- return () => {
448
- active = false;
457
+ return {
458
+ onDeactivation: () => {
459
+ active = false;
460
+ }
449
461
  };
450
462
  },
451
463
  { ...rest, describeKind: "producer", completeWhenDepsComplete: false }
@@ -524,7 +536,7 @@ function withStatus(src, options) {
524
536
  } else a.down([m]);
525
537
  }
526
538
  });
527
- return unsub;
539
+ return { onDeactivation: unsub };
528
540
  },
529
541
  {
530
542
  ...operatorOpts(),
@@ -705,7 +717,21 @@ function reactiveSink(source, config) {
705
717
  }
706
718
  return run();
707
719
  };
708
- const maxBuf = backpressure?.maxBuffer ?? Number.POSITIVE_INFINITY;
720
+ let maxBuf = Number.POSITIVE_INFINITY;
721
+ if (backpressure) {
722
+ const mb = backpressure.maxBuffer;
723
+ if (mb === void 0) {
724
+ throw new RangeError(
725
+ "reactiveSink: backpressure requires explicit maxBuffer (use Infinity to opt in to unbounded)"
726
+ );
727
+ }
728
+ if (mb !== Number.POSITIVE_INFINITY && (!Number.isInteger(mb) || mb < 1)) {
729
+ throw new RangeError(
730
+ "reactiveSink: backpressure.maxBuffer must be a positive integer (or Infinity for unbounded)"
731
+ );
732
+ }
733
+ maxBuf = mb;
734
+ }
709
735
  const buffer = new BackpressureBuffer(maxBuf);
710
736
  let flushTimer;
711
737
  let disposed = false;
@@ -1025,9 +1051,11 @@ function fromHTTP(url, opts) {
1025
1051
  };
1026
1052
  const sourceNode = (0, import_core8.node)(
1027
1053
  [],
1028
- (_data, a) => runFetch({
1029
- emit: (v) => a.emit(v),
1030
- down: (msgs) => a.down(msgs)
1054
+ (_data, a) => ({
1055
+ onDeactivation: runFetch({
1056
+ emit: (v) => a.emit(v),
1057
+ down: (msgs) => a.down(msgs)
1058
+ })
1031
1059
  }),
1032
1060
  {
1033
1061
  ...sourceOpts(rest),
@@ -1128,8 +1156,8 @@ function fromHTTPStream(url, opts) {
1128
1156
  const abort = new AbortController();
1129
1157
  if (externalSignal?.aborted) {
1130
1158
  a.down([[import_core8.ERROR, externalSignal.reason ?? new Error("Aborted")]]);
1131
- return () => {
1132
- };
1159
+ return { onDeactivation: () => {
1160
+ } };
1133
1161
  }
1134
1162
  externalSignal?.addEventListener("abort", () => abort.abort(externalSignal.reason), {
1135
1163
  once: true
@@ -1155,9 +1183,11 @@ function fromHTTPStream(url, opts) {
1155
1183
  }
1156
1184
  };
1157
1185
  void run();
1158
- return () => {
1159
- active = false;
1160
- abort.abort();
1186
+ return {
1187
+ onDeactivation: () => {
1188
+ active = false;
1189
+ abort.abort();
1190
+ }
1161
1191
  };
1162
1192
  },
1163
1193
  sourceOpts(rest)
@@ -1219,8 +1249,10 @@ function fromKafka(consumer, topic, opts) {
1219
1249
  }
1220
1250
  };
1221
1251
  void start();
1222
- return () => {
1223
- active = false;
1252
+ return {
1253
+ onDeactivation: () => {
1254
+ active = false;
1255
+ }
1224
1256
  };
1225
1257
  },
1226
1258
  sourceOpts(rest)
@@ -1260,8 +1292,10 @@ function fromKysely(query, opts) {
1260
1292
  } catch {
1261
1293
  }
1262
1294
  });
1263
- return () => {
1264
- active = false;
1295
+ return {
1296
+ onDeactivation: () => {
1297
+ active = false;
1298
+ }
1265
1299
  };
1266
1300
  },
1267
1301
  { ...rest, describeKind: "producer", completeWhenDepsComplete: false }
@@ -1298,15 +1332,19 @@ function externalProducer(register, opts) {
1298
1332
  cleanup = typeof ret === "function" ? ret : void 0;
1299
1333
  } catch (err) {
1300
1334
  triad.error(err);
1301
- return () => {
1302
- active = false;
1335
+ return {
1336
+ onDeactivation: () => {
1337
+ active = false;
1338
+ }
1303
1339
  };
1304
1340
  }
1305
- return () => {
1306
- active = false;
1307
- try {
1308
- cleanup?.();
1309
- } catch {
1341
+ return {
1342
+ onDeactivation: () => {
1343
+ active = false;
1344
+ try {
1345
+ cleanup?.();
1346
+ } catch {
1347
+ }
1310
1348
  }
1311
1349
  };
1312
1350
  }, sourceOpts2(opts));
@@ -1332,10 +1370,12 @@ function externalBundle(register, channels, opts) {
1332
1370
  const n = (0, import_core11.node)(
1333
1371
  (_data, _a) => {
1334
1372
  activatedCount++;
1335
- return () => {
1336
- teardownCount++;
1337
- if (activatedCount > 0 && teardownCount >= activatedCount && teardownCount >= channels.length) {
1338
- finishCleanup();
1373
+ return {
1374
+ onDeactivation: () => {
1375
+ teardownCount++;
1376
+ if (activatedCount > 0 && teardownCount >= activatedCount && teardownCount >= channels.length) {
1377
+ finishCleanup();
1378
+ }
1339
1379
  }
1340
1380
  };
1341
1381
  },
@@ -1442,8 +1482,10 @@ function fromNATS(client, subject, opts) {
1442
1482
  }
1443
1483
  };
1444
1484
  void loop();
1445
- return () => {
1446
- active = false;
1485
+ return {
1486
+ onDeactivation: () => {
1487
+ active = false;
1488
+ }
1447
1489
  };
1448
1490
  },
1449
1491
  sourceOpts(rest)
@@ -1527,8 +1569,10 @@ function fromNDJSON(source, opts) {
1527
1569
  }
1528
1570
  };
1529
1571
  void run();
1530
- return () => {
1531
- cancelled = true;
1572
+ return {
1573
+ onDeactivation: () => {
1574
+ cancelled = true;
1575
+ }
1532
1576
  };
1533
1577
  },
1534
1578
  sourceOpts(opts)
@@ -1584,8 +1628,10 @@ function fromPrisma(model, opts) {
1584
1628
  } catch {
1585
1629
  }
1586
1630
  });
1587
- return () => {
1588
- active = false;
1631
+ return {
1632
+ onDeactivation: () => {
1633
+ active = false;
1634
+ }
1589
1635
  };
1590
1636
  },
1591
1637
  { ...rest, describeKind: "producer", completeWhenDepsComplete: false }
@@ -1640,10 +1686,12 @@ function fromPrometheus(endpoint, opts) {
1640
1686
  }
1641
1687
  };
1642
1688
  void run();
1643
- return () => {
1644
- active = false;
1645
- clearTimeout(timeoutId);
1646
- abort.abort();
1689
+ return {
1690
+ onDeactivation: () => {
1691
+ active = false;
1692
+ clearTimeout(timeoutId);
1693
+ abort.abort();
1694
+ }
1647
1695
  };
1648
1696
  })
1649
1697
  );
@@ -1793,8 +1841,10 @@ function fromPulsar(consumer, opts) {
1793
1841
  }
1794
1842
  };
1795
1843
  void loop();
1796
- return () => {
1797
- active = false;
1844
+ return {
1845
+ onDeactivation: () => {
1846
+ active = false;
1847
+ }
1798
1848
  };
1799
1849
  },
1800
1850
  sourceOpts(rest)
@@ -1915,10 +1965,12 @@ function fromRabbitMQ(channel, queue, opts) {
1915
1965
  }
1916
1966
  };
1917
1967
  void start();
1918
- return () => {
1919
- active = false;
1920
- if (consumerTag !== void 0) {
1921
- void channel.cancel(consumerTag);
1968
+ return {
1969
+ onDeactivation: () => {
1970
+ active = false;
1971
+ if (consumerTag !== void 0) {
1972
+ void channel.cancel(consumerTag);
1973
+ }
1922
1974
  }
1923
1975
  };
1924
1976
  },
@@ -1996,8 +2048,10 @@ function fromRedisStream(client, key, opts) {
1996
2048
  }
1997
2049
  };
1998
2050
  void poll();
1999
- return () => {
2000
- active = false;
2051
+ return {
2052
+ onDeactivation: () => {
2053
+ active = false;
2054
+ }
2001
2055
  };
2002
2056
  },
2003
2057
  sourceOpts(rest)
@@ -2414,11 +2468,13 @@ function toSSEBytes(source, opts) {
2414
2468
  }
2415
2469
  if (signal?.aborted) onAbort();
2416
2470
  else signal?.addEventListener("abort", onAbort, { once: true });
2417
- return () => {
2418
- active = false;
2419
- if (keepAlive !== void 0) clearInterval(keepAlive);
2420
- signal?.removeEventListener("abort", onAbort);
2421
- unsub();
2471
+ return {
2472
+ onDeactivation: () => {
2473
+ active = false;
2474
+ if (keepAlive !== void 0) clearInterval(keepAlive);
2475
+ signal?.removeEventListener("abort", onAbort);
2476
+ unsub();
2477
+ }
2422
2478
  };
2423
2479
  });
2424
2480
  }
@@ -2605,9 +2661,11 @@ function fromSSE(source, opts) {
2605
2661
  }
2606
2662
  };
2607
2663
  void run();
2608
- return () => {
2609
- active = false;
2610
- ctrl.abort();
2664
+ return {
2665
+ onDeactivation: () => {
2666
+ active = false;
2667
+ ctrl.abort();
2668
+ }
2611
2669
  };
2612
2670
  },
2613
2671
  sourceOpts(rest)
@@ -3060,9 +3118,11 @@ function _retrySource(source, opts, emitState) {
3060
3118
  const merged = makeMergedOptsMirror(opts);
3061
3119
  const getCfg = () => resolveRetryConfig(merged.current());
3062
3120
  const inner = _runRetryStateMachine(getCfg, () => source, a, emitState);
3063
- return () => {
3064
- inner();
3065
- merged.unsub();
3121
+ return {
3122
+ onDeactivation: () => {
3123
+ inner();
3124
+ merged.unsub();
3125
+ }
3066
3126
  };
3067
3127
  },
3068
3128
  {
@@ -3086,9 +3146,11 @@ function _retryFactory(factory, opts, emitState) {
3086
3146
  const merged = makeMergedOptsMirror(opts);
3087
3147
  const getCfg = () => resolveRetryConfig(merged.current());
3088
3148
  const inner = _runRetryStateMachine(getCfg, factory, a, emitState);
3089
- return () => {
3090
- inner();
3091
- merged.unsub();
3149
+ return {
3150
+ onDeactivation: () => {
3151
+ inner();
3152
+ merged.unsub();
3153
+ }
3092
3154
  };
3093
3155
  },
3094
3156
  {
@@ -3151,9 +3213,11 @@ function fromWebSocket(socketOrRegister, opts) {
3151
3213
  } catch (err) {
3152
3214
  terminate([import_core27.ERROR, err]);
3153
3215
  }
3154
- return () => {
3155
- active = false;
3156
- runCleanup();
3216
+ return {
3217
+ onDeactivation: () => {
3218
+ active = false;
3219
+ runCleanup();
3220
+ }
3157
3221
  };
3158
3222
  }
3159
3223
  const ws = socketOrRegister;
@@ -3169,9 +3233,11 @@ function fromWebSocket(socketOrRegister, opts) {
3169
3233
  ws.removeEventListener("close", onClose);
3170
3234
  if (closeOnTeardown) ws.close();
3171
3235
  };
3172
- return () => {
3173
- active = false;
3174
- runCleanup();
3236
+ return {
3237
+ onDeactivation: () => {
3238
+ active = false;
3239
+ runCleanup();
3240
+ }
3175
3241
  };
3176
3242
  },
3177
3243
  sourceOpts(rest)
@@ -3251,13 +3317,7 @@ function toWebSocket(source, socket, opts) {
3251
3317
  return handle;
3252
3318
  }
3253
3319
  function fromWebSocketReconnect(factory, opts) {
3254
- const {
3255
- parse,
3256
- maxRetries,
3257
- backoff = "exponential",
3258
- closeOnTeardown = true,
3259
- ...rest
3260
- } = opts ?? {};
3320
+ const { parse, maxRetries, backoff = "exponential", closeOnTeardown = true, ...rest } = opts;
3261
3321
  return retry(
3262
3322
  () => fromWebSocket(factory(), {
3263
3323
  parse,