@graphrefly/graphrefly 0.45.0 → 0.46.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 (714) hide show
  1. package/README.md +1 -2
  2. package/dist/_internal-B23BagFd.d.cts +33 -0
  3. package/dist/_internal-B23BagFd.d.ts +33 -0
  4. package/dist/adaptive-rate-limiter-Dch_xYIi.d.cts +111 -0
  5. package/dist/adaptive-rate-limiter-Dch_xYIi.d.ts +111 -0
  6. package/dist/agents-C0Ji9ldU.d.cts +629 -0
  7. package/dist/agents-C9zexT7I.d.ts +629 -0
  8. package/dist/audit-BAXb3VOg.d.ts +246 -0
  9. package/dist/audit-C_bPfkqS.d.cts +246 -0
  10. package/dist/backoff-7KIK3WQW.js +24 -0
  11. package/dist/backoff-7KIK3WQW.js.map +1 -0
  12. package/dist/backoff-Bnb9OoPh.d.cts +6 -0
  13. package/dist/backoff-Bnb9OoPh.d.ts +6 -0
  14. package/dist/base/composition/index.cjs +811 -0
  15. package/dist/base/composition/index.cjs.map +1 -0
  16. package/dist/base/composition/index.d.cts +469 -0
  17. package/dist/base/composition/index.d.ts +469 -0
  18. package/dist/base/composition/index.js +40 -0
  19. package/dist/base/composition/index.js.map +1 -0
  20. package/dist/base/index.cjs +6336 -0
  21. package/dist/base/index.cjs.map +1 -0
  22. package/dist/base/index.d.cts +22 -0
  23. package/dist/base/index.d.ts +22 -0
  24. package/dist/base/index.js +259 -0
  25. package/dist/base/index.js.map +1 -0
  26. package/dist/base/io/index.cjs +3270 -0
  27. package/dist/base/io/index.cjs.map +1 -0
  28. package/dist/base/io/index.d.cts +2245 -0
  29. package/dist/base/io/index.d.ts +2245 -0
  30. package/dist/base/io/index.js +117 -0
  31. package/dist/base/io/index.js.map +1 -0
  32. package/dist/base/meta/index.cjs +43 -0
  33. package/dist/base/meta/index.cjs.map +1 -0
  34. package/dist/base/meta/index.d.cts +45 -0
  35. package/dist/base/meta/index.d.ts +45 -0
  36. package/dist/base/meta/index.js +13 -0
  37. package/dist/base/meta/index.js.map +1 -0
  38. package/dist/base/mutation/index.cjs +200 -0
  39. package/dist/base/mutation/index.cjs.map +1 -0
  40. package/dist/base/mutation/index.d.cts +177 -0
  41. package/dist/base/mutation/index.d.ts +177 -0
  42. package/dist/base/mutation/index.js +22 -0
  43. package/dist/base/mutation/index.js.map +1 -0
  44. package/dist/base/render/index.cjs +1120 -0
  45. package/dist/base/render/index.cjs.map +1 -0
  46. package/dist/base/render/index.d.cts +227 -0
  47. package/dist/base/render/index.d.ts +227 -0
  48. package/dist/base/render/index.js +24 -0
  49. package/dist/base/render/index.js.map +1 -0
  50. package/dist/base/sources/browser/index.cjs +172 -0
  51. package/dist/base/sources/browser/index.cjs.map +1 -0
  52. package/dist/base/sources/browser/index.d.cts +84 -0
  53. package/dist/base/sources/browser/index.d.ts +84 -0
  54. package/dist/base/sources/browser/index.js +151 -0
  55. package/dist/base/sources/browser/index.js.map +1 -0
  56. package/dist/base/sources/event/index.cjs +98 -0
  57. package/dist/base/sources/event/index.cjs.map +1 -0
  58. package/dist/base/sources/event/index.d.cts +91 -0
  59. package/dist/base/sources/event/index.d.ts +91 -0
  60. package/dist/base/sources/event/index.js +13 -0
  61. package/dist/base/sources/event/index.js.map +1 -0
  62. package/dist/base/sources/index.cjs +755 -0
  63. package/dist/base/sources/index.cjs.map +1 -0
  64. package/dist/base/sources/index.d.cts +357 -0
  65. package/dist/base/sources/index.d.ts +357 -0
  66. package/dist/base/sources/index.js +42 -0
  67. package/dist/base/sources/index.js.map +1 -0
  68. package/dist/base/sources/node/index.cjs +320 -0
  69. package/dist/base/sources/node/index.cjs.map +1 -0
  70. package/dist/base/sources/node/index.d.cts +185 -0
  71. package/dist/base/sources/node/index.d.ts +185 -0
  72. package/dist/base/sources/node/index.js +306 -0
  73. package/dist/base/sources/node/index.js.map +1 -0
  74. package/dist/base/utils/index.cjs +37 -0
  75. package/dist/base/utils/index.cjs.map +1 -0
  76. package/dist/base/utils/index.d.cts +37 -0
  77. package/dist/base/utils/index.d.ts +37 -0
  78. package/dist/base/utils/index.js +11 -0
  79. package/dist/base/utils/index.js.map +1 -0
  80. package/dist/base/worker/index.cjs +548 -0
  81. package/dist/base/worker/index.cjs.map +1 -0
  82. package/dist/base/worker/index.d.cts +207 -0
  83. package/dist/base/worker/index.d.ts +207 -0
  84. package/dist/base/worker/index.js +20 -0
  85. package/dist/base/worker/index.js.map +1 -0
  86. package/dist/breaker-C9skL3d8.d.ts +175 -0
  87. package/dist/breaker-ugSdq54q.d.cts +175 -0
  88. package/dist/cascading-CSSbKGrJ.d.ts +199 -0
  89. package/dist/cascading-baGkiihI.d.cts +199 -0
  90. package/dist/chunk-255UCBG4.js +58 -0
  91. package/dist/chunk-255UCBG4.js.map +1 -0
  92. package/dist/chunk-2LO3EL4W.js +1 -0
  93. package/dist/chunk-2LO3EL4W.js.map +1 -0
  94. package/dist/chunk-2OB3CEJS.js +1065 -0
  95. package/dist/chunk-2OB3CEJS.js.map +1 -0
  96. package/dist/chunk-36NMM65U.js +144 -0
  97. package/dist/chunk-36NMM65U.js.map +1 -0
  98. package/dist/chunk-3CEXCBN6.js +1 -0
  99. package/dist/chunk-3CEXCBN6.js.map +1 -0
  100. package/dist/chunk-3MUSLI6E.js +105 -0
  101. package/dist/chunk-3MUSLI6E.js.map +1 -0
  102. package/dist/chunk-3PSLNJDU.js +884 -0
  103. package/dist/chunk-3PSLNJDU.js.map +1 -0
  104. package/dist/chunk-3QZY5BI7.js +92 -0
  105. package/dist/chunk-3QZY5BI7.js.map +1 -0
  106. package/dist/chunk-42FQ27MQ.js +594 -0
  107. package/dist/chunk-42FQ27MQ.js.map +1 -0
  108. package/dist/chunk-4GYMCUDZ.js +1085 -0
  109. package/dist/chunk-4GYMCUDZ.js.map +1 -0
  110. package/dist/chunk-4S53H2KR.js +382 -0
  111. package/dist/chunk-4S53H2KR.js.map +1 -0
  112. package/dist/chunk-4XCHZRUJ.js +128 -0
  113. package/dist/chunk-4XCHZRUJ.js.map +1 -0
  114. package/dist/chunk-5THCXDWY.js +725 -0
  115. package/dist/chunk-5THCXDWY.js.map +1 -0
  116. package/dist/chunk-6XZYT4SW.js +256 -0
  117. package/dist/chunk-6XZYT4SW.js.map +1 -0
  118. package/dist/chunk-7EGRP2VX.js +76 -0
  119. package/dist/chunk-7EGRP2VX.js.map +1 -0
  120. package/dist/chunk-A7KV5UK4.js +150 -0
  121. package/dist/chunk-A7KV5UK4.js.map +1 -0
  122. package/dist/chunk-APY2SS5X.js +156 -0
  123. package/dist/chunk-APY2SS5X.js.map +1 -0
  124. package/dist/chunk-AZDQPQ3V.js +66 -0
  125. package/dist/chunk-AZDQPQ3V.js.map +1 -0
  126. package/dist/chunk-BU3SEFA5.js +90 -0
  127. package/dist/chunk-BU3SEFA5.js.map +1 -0
  128. package/dist/chunk-BXGZFGZ4.js +189 -0
  129. package/dist/chunk-BXGZFGZ4.js.map +1 -0
  130. package/dist/chunk-CGHORL6G.js +579 -0
  131. package/dist/chunk-CGHORL6G.js.map +1 -0
  132. package/dist/chunk-CXANAIZU.js +530 -0
  133. package/dist/chunk-CXANAIZU.js.map +1 -0
  134. package/dist/chunk-CZQHCKKG.js +1 -0
  135. package/dist/chunk-CZQHCKKG.js.map +1 -0
  136. package/dist/chunk-DKNHAICT.js +133 -0
  137. package/dist/chunk-DKNHAICT.js.map +1 -0
  138. package/dist/chunk-DM4OMPWK.js +584 -0
  139. package/dist/chunk-DM4OMPWK.js.map +1 -0
  140. package/dist/chunk-DMSNO6ZB.js +452 -0
  141. package/dist/chunk-DMSNO6ZB.js.map +1 -0
  142. package/dist/chunk-E5OZPDIW.js +229 -0
  143. package/dist/chunk-E5OZPDIW.js.map +1 -0
  144. package/dist/chunk-EVYY4X5A.js +509 -0
  145. package/dist/chunk-EVYY4X5A.js.map +1 -0
  146. package/dist/chunk-FDFD67UO.js +1 -0
  147. package/dist/chunk-FDFD67UO.js.map +1 -0
  148. package/dist/chunk-FMPF42Q4.js +13 -0
  149. package/dist/chunk-FMPF42Q4.js.map +1 -0
  150. package/dist/chunk-FR6RGA3B.js +1277 -0
  151. package/dist/chunk-FR6RGA3B.js.map +1 -0
  152. package/dist/chunk-FW23JYNQ.js +454 -0
  153. package/dist/chunk-FW23JYNQ.js.map +1 -0
  154. package/dist/chunk-GBCENOLN.js +1575 -0
  155. package/dist/chunk-GBCENOLN.js.map +1 -0
  156. package/dist/chunk-HL7HUJIX.js +1 -0
  157. package/dist/chunk-HL7HUJIX.js.map +1 -0
  158. package/dist/chunk-HULCUY35.js +2508 -0
  159. package/dist/chunk-HULCUY35.js.map +1 -0
  160. package/dist/chunk-IHTWQEDR.js +169 -0
  161. package/dist/chunk-IHTWQEDR.js.map +1 -0
  162. package/dist/chunk-IJRR6YAI.js +128 -0
  163. package/dist/chunk-IJRR6YAI.js.map +1 -0
  164. package/dist/chunk-JGFRAFDL.js +221 -0
  165. package/dist/chunk-JGFRAFDL.js.map +1 -0
  166. package/dist/chunk-KIIXR252.js +211 -0
  167. package/dist/chunk-KIIXR252.js.map +1 -0
  168. package/dist/chunk-KN3H5CNT.js +11 -0
  169. package/dist/chunk-KN3H5CNT.js.map +1 -0
  170. package/dist/chunk-KPG3DGLA.js +1 -0
  171. package/dist/chunk-KPG3DGLA.js.map +1 -0
  172. package/dist/chunk-KRNQ6RGQ.js +1 -0
  173. package/dist/chunk-KRNQ6RGQ.js.map +1 -0
  174. package/dist/chunk-LBAJK24K.js +1071 -0
  175. package/dist/chunk-LBAJK24K.js.map +1 -0
  176. package/dist/chunk-MLTPJMH6.js +417 -0
  177. package/dist/chunk-MLTPJMH6.js.map +1 -0
  178. package/dist/chunk-N3SZ7BMH.js +95 -0
  179. package/dist/chunk-N3SZ7BMH.js.map +1 -0
  180. package/dist/chunk-NDUD3IMO.js +540 -0
  181. package/dist/chunk-NDUD3IMO.js.map +1 -0
  182. package/dist/chunk-NY2PYHNC.js +873 -0
  183. package/dist/chunk-NY2PYHNC.js.map +1 -0
  184. package/dist/chunk-O3MT7DYI.js +225 -0
  185. package/dist/chunk-O3MT7DYI.js.map +1 -0
  186. package/dist/chunk-OCUDSN63.js +2386 -0
  187. package/dist/chunk-OCUDSN63.js.map +1 -0
  188. package/dist/chunk-OIWU3NYV.js +199 -0
  189. package/dist/chunk-OIWU3NYV.js.map +1 -0
  190. package/dist/chunk-OO5BM6CJ.js +1153 -0
  191. package/dist/chunk-OO5BM6CJ.js.map +1 -0
  192. package/dist/chunk-OQUIJT7A.js +1 -0
  193. package/dist/chunk-OQUIJT7A.js.map +1 -0
  194. package/dist/chunk-P5LBT622.js +105 -0
  195. package/dist/chunk-P5LBT622.js.map +1 -0
  196. package/dist/chunk-PKGQG5QQ.js +519 -0
  197. package/dist/chunk-PKGQG5QQ.js.map +1 -0
  198. package/dist/chunk-PKPO3JTZ.js +561 -0
  199. package/dist/chunk-PKPO3JTZ.js.map +1 -0
  200. package/dist/chunk-PL5UDIQ5.js +118 -0
  201. package/dist/chunk-PL5UDIQ5.js.map +1 -0
  202. package/dist/chunk-PZWISPIQ.js +432 -0
  203. package/dist/chunk-PZWISPIQ.js.map +1 -0
  204. package/dist/chunk-Q3EYOCZB.js +510 -0
  205. package/dist/chunk-Q3EYOCZB.js.map +1 -0
  206. package/dist/chunk-QMBYUVRL.js +15 -0
  207. package/dist/chunk-QMBYUVRL.js.map +1 -0
  208. package/dist/chunk-RAGGHLCV.js +200 -0
  209. package/dist/chunk-RAGGHLCV.js.map +1 -0
  210. package/dist/chunk-RGL53X5G.js +574 -0
  211. package/dist/chunk-RGL53X5G.js.map +1 -0
  212. package/dist/chunk-RJOG4IJU.js +1039 -0
  213. package/dist/chunk-RJOG4IJU.js.map +1 -0
  214. package/dist/chunk-SOOKUYVM.js +403 -0
  215. package/dist/chunk-SOOKUYVM.js.map +1 -0
  216. package/dist/chunk-T5BN5KG7.js +1 -0
  217. package/dist/chunk-T5BN5KG7.js.map +1 -0
  218. package/dist/chunk-TP7244Y6.js +207 -0
  219. package/dist/chunk-TP7244Y6.js.map +1 -0
  220. package/dist/chunk-TSBFTJKM.js +57 -0
  221. package/dist/chunk-TSBFTJKM.js.map +1 -0
  222. package/dist/chunk-URQ2CBBF.js +143 -0
  223. package/dist/chunk-URQ2CBBF.js.map +1 -0
  224. package/dist/chunk-W2BOPXTI.js +1 -0
  225. package/dist/chunk-W2BOPXTI.js.map +1 -0
  226. package/dist/chunk-WKSWLSCX.js +207 -0
  227. package/dist/chunk-WKSWLSCX.js.map +1 -0
  228. package/dist/chunk-Y52CS6YA.js +88 -0
  229. package/dist/chunk-Y52CS6YA.js.map +1 -0
  230. package/dist/chunk-YCBUWK77.js +92 -0
  231. package/dist/chunk-YCBUWK77.js.map +1 -0
  232. package/dist/chunk-YJ4U2D2C.js +314 -0
  233. package/dist/chunk-YJ4U2D2C.js.map +1 -0
  234. package/dist/chunk-Z4YXAUDN.js +239 -0
  235. package/dist/chunk-Z4YXAUDN.js.map +1 -0
  236. package/dist/chunk-Z6EGP5D7.js +92 -0
  237. package/dist/chunk-Z6EGP5D7.js.map +1 -0
  238. package/dist/compat/index.cjs +3083 -2
  239. package/dist/compat/index.cjs.map +1 -1
  240. package/dist/compat/index.d.cts +116 -1
  241. package/dist/compat/index.d.ts +116 -1
  242. package/dist/compat/index.js +175 -2
  243. package/dist/compat/index.js.map +1 -1
  244. package/dist/compat/jotai/index.cjs +130 -2
  245. package/dist/compat/jotai/index.cjs.map +1 -1
  246. package/dist/compat/jotai/index.d.cts +2 -1
  247. package/dist/compat/jotai/index.d.ts +2 -1
  248. package/dist/compat/jotai/index.js +7 -2
  249. package/dist/compat/jotai/index.js.map +1 -1
  250. package/dist/compat/nanostores/index.cjs +186 -2
  251. package/dist/compat/nanostores/index.cjs.map +1 -1
  252. package/dist/compat/nanostores/index.d.cts +2 -1
  253. package/dist/compat/nanostores/index.d.ts +2 -1
  254. package/dist/compat/nanostores/index.js +21 -2
  255. package/dist/compat/nanostores/index.js.map +1 -1
  256. package/dist/compat/nestjs/index.cjs +2224 -2
  257. package/dist/compat/nestjs/index.cjs.map +1 -1
  258. package/dist/compat/nestjs/index.d.cts +10 -1
  259. package/dist/compat/nestjs/index.d.ts +10 -1
  260. package/dist/compat/nestjs/index.js +77 -2
  261. package/dist/compat/nestjs/index.js.map +1 -1
  262. package/dist/compat/react/index.cjs +95 -2
  263. package/dist/compat/react/index.cjs.map +1 -1
  264. package/dist/compat/react/index.d.cts +2 -1
  265. package/dist/compat/react/index.d.ts +2 -1
  266. package/dist/compat/react/index.js +11 -2
  267. package/dist/compat/react/index.js.map +1 -1
  268. package/dist/compat/solid/index.cjs +82 -2
  269. package/dist/compat/solid/index.cjs.map +1 -1
  270. package/dist/compat/solid/index.d.cts +2 -1
  271. package/dist/compat/solid/index.d.ts +2 -1
  272. package/dist/compat/solid/index.js +11 -2
  273. package/dist/compat/solid/index.js.map +1 -1
  274. package/dist/compat/svelte/index.cjs +85 -2
  275. package/dist/compat/svelte/index.cjs.map +1 -1
  276. package/dist/compat/svelte/index.d.cts +2 -1
  277. package/dist/compat/svelte/index.d.ts +2 -1
  278. package/dist/compat/svelte/index.js +11 -2
  279. package/dist/compat/svelte/index.js.map +1 -1
  280. package/dist/compat/vue/index.cjs +100 -2
  281. package/dist/compat/vue/index.cjs.map +1 -1
  282. package/dist/compat/vue/index.d.cts +3 -1
  283. package/dist/compat/vue/index.d.ts +3 -1
  284. package/dist/compat/vue/index.js +11 -2
  285. package/dist/compat/vue/index.js.map +1 -1
  286. package/dist/compat/zustand/index.cjs +50 -2
  287. package/dist/compat/zustand/index.cjs.map +1 -1
  288. package/dist/compat/zustand/index.d.cts +2 -1
  289. package/dist/compat/zustand/index.d.ts +2 -1
  290. package/dist/compat/zustand/index.js +7 -2
  291. package/dist/compat/zustand/index.js.map +1 -1
  292. package/dist/distill-De6Rnn15.d.cts +48 -0
  293. package/dist/distill-De6Rnn15.d.ts +48 -0
  294. package/dist/external-register-CWyroXb_.d.cts +138 -0
  295. package/dist/external-register-CWyroXb_.d.ts +138 -0
  296. package/dist/fallback-Bx46zqky.d.cts +243 -0
  297. package/dist/fallback-pIWW8A2d.d.ts +243 -0
  298. package/dist/guarded-execution-BcdtxeBk.d.ts +207 -0
  299. package/dist/guarded-execution-C-3hnP6A.d.cts +207 -0
  300. package/dist/index-5SU_O78r.d.cts +754 -0
  301. package/dist/index-B6pxYJzO.d.cts +36 -0
  302. package/dist/index-B6pxYJzO.d.ts +36 -0
  303. package/dist/index-BFsng6v1.d.cts +44 -0
  304. package/dist/index-BFsng6v1.d.ts +44 -0
  305. package/dist/index-Bg-LwEt-.d.cts +45 -0
  306. package/dist/index-Bg-LwEt-.d.ts +45 -0
  307. package/dist/index-Brp888t0.d.cts +127 -0
  308. package/dist/index-Brp888t0.d.ts +127 -0
  309. package/dist/index-CDfk6jHN.d.cts +37 -0
  310. package/dist/index-CDfk6jHN.d.ts +37 -0
  311. package/dist/index-CEXCtYYJ.d.ts +754 -0
  312. package/dist/index-DLAxYaN5.d.cts +169 -0
  313. package/dist/index-DLAxYaN5.d.ts +169 -0
  314. package/dist/index-DeWbQzMe.d.cts +34 -0
  315. package/dist/index-DeWbQzMe.d.ts +34 -0
  316. package/dist/index-dX9IzPqj.d.cts +86 -0
  317. package/dist/index-dX9IzPqj.d.ts +86 -0
  318. package/dist/index.cjs +25950 -0
  319. package/dist/index.cjs.map +1 -1
  320. package/dist/index.d.cts +56 -42
  321. package/dist/index.d.ts +56 -42
  322. package/dist/index.js +849 -0
  323. package/dist/index.js.map +1 -1
  324. package/dist/layout-types-B5aiHYgk.d.cts +72 -0
  325. package/dist/layout-types-B5aiHYgk.d.ts +72 -0
  326. package/dist/memory-composers-BryDrRBX.d.cts +529 -0
  327. package/dist/memory-composers-CVQqPYEV.d.ts +529 -0
  328. package/dist/observable-BXQoW1P-.d.cts +36 -0
  329. package/dist/observable-BXQoW1P-.d.ts +36 -0
  330. package/dist/pipeline-graph-Ce47CB6Y.d.cts +145 -0
  331. package/dist/pipeline-graph-DXCwY9vG.d.ts +145 -0
  332. package/dist/presets/ai/index.cjs +4377 -0
  333. package/dist/presets/ai/index.cjs.map +1 -0
  334. package/dist/presets/ai/index.d.cts +98 -0
  335. package/dist/presets/ai/index.d.ts +98 -0
  336. package/dist/presets/ai/index.js +54 -0
  337. package/dist/presets/ai/index.js.map +1 -0
  338. package/dist/presets/harness/index.cjs +5929 -0
  339. package/dist/presets/harness/index.cjs.map +1 -0
  340. package/dist/presets/harness/index.d.cts +566 -0
  341. package/dist/presets/harness/index.d.ts +566 -0
  342. package/dist/presets/harness/index.js +71 -0
  343. package/dist/presets/harness/index.js.map +1 -0
  344. package/dist/presets/index.cjs +9782 -0
  345. package/dist/presets/index.cjs.map +1 -0
  346. package/dist/presets/index.d.cts +28 -0
  347. package/dist/presets/index.d.ts +28 -0
  348. package/dist/presets/index.js +129 -0
  349. package/dist/presets/index.js.map +1 -0
  350. package/dist/presets/inspect/index.cjs +1087 -0
  351. package/dist/presets/inspect/index.cjs.map +1 -0
  352. package/dist/presets/inspect/index.d.cts +172 -0
  353. package/dist/presets/inspect/index.d.ts +172 -0
  354. package/dist/presets/inspect/index.js +21 -0
  355. package/dist/presets/inspect/index.js.map +1 -0
  356. package/dist/presets/resilience/index.cjs +1593 -0
  357. package/dist/presets/resilience/index.cjs.map +1 -0
  358. package/dist/presets/resilience/index.d.cts +205 -0
  359. package/dist/presets/resilience/index.d.ts +205 -0
  360. package/dist/presets/resilience/index.js +18 -0
  361. package/dist/presets/resilience/index.js.map +1 -0
  362. package/dist/rate-limiter-CEALq4N1.d.ts +559 -0
  363. package/dist/rate-limiter-DpVbSYdH.d.cts +559 -0
  364. package/dist/reactive-layout-fswlBUvX.d.cts +195 -0
  365. package/dist/reactive-layout-fswlBUvX.d.ts +195 -0
  366. package/dist/retry-BDbRZ_gx.d.ts +125 -0
  367. package/dist/retry-DWuhjvsA.d.cts +125 -0
  368. package/dist/solutions/index.cjs +8200 -0
  369. package/dist/solutions/index.cjs.map +1 -0
  370. package/dist/solutions/index.d.cts +23 -0
  371. package/dist/solutions/index.d.ts +23 -0
  372. package/dist/solutions/index.js +55 -0
  373. package/dist/solutions/index.js.map +1 -0
  374. package/dist/spawnable-5mDY501F.d.cts +746 -0
  375. package/dist/spawnable-D3lR0oQu.d.ts +746 -0
  376. package/dist/status-U-rUI79b.d.cts +84 -0
  377. package/dist/status-U-rUI79b.d.ts +84 -0
  378. package/dist/timeout-U5O4ESK3.js +12 -0
  379. package/dist/timeout-U5O4ESK3.js.map +1 -0
  380. package/dist/types-BB5Lw-pB.d.cts +442 -0
  381. package/dist/types-BB5Lw-pB.d.ts +442 -0
  382. package/dist/types-CJWIMJiZ.d.ts +548 -0
  383. package/dist/types-vCq7ShIm.d.cts +548 -0
  384. package/dist/utils/ai/browser.cjs +2169 -0
  385. package/dist/utils/ai/browser.cjs.map +1 -0
  386. package/dist/utils/ai/browser.d.cts +129 -0
  387. package/dist/utils/ai/browser.d.ts +129 -0
  388. package/dist/utils/ai/browser.js +255 -0
  389. package/dist/utils/ai/browser.js.map +1 -0
  390. package/dist/utils/ai/index.cjs +8468 -0
  391. package/dist/utils/ai/index.cjs.map +1 -0
  392. package/dist/utils/ai/index.d.cts +1777 -0
  393. package/dist/utils/ai/index.d.ts +1777 -0
  394. package/dist/utils/ai/index.js +173 -0
  395. package/dist/utils/ai/index.js.map +1 -0
  396. package/dist/utils/ai/node.cjs +648 -0
  397. package/dist/utils/ai/node.cjs.map +1 -0
  398. package/dist/utils/ai/node.d.cts +57 -0
  399. package/dist/utils/ai/node.d.ts +57 -0
  400. package/dist/utils/ai/node.js +84 -0
  401. package/dist/utils/ai/node.js.map +1 -0
  402. package/dist/utils/cqrs/index.cjs +1036 -0
  403. package/dist/utils/cqrs/index.cjs.map +1 -0
  404. package/dist/utils/cqrs/index.d.cts +438 -0
  405. package/dist/utils/cqrs/index.d.ts +438 -0
  406. package/dist/utils/cqrs/index.js +18 -0
  407. package/dist/utils/cqrs/index.js.map +1 -0
  408. package/dist/utils/demo-shell/index.cjs +865 -0
  409. package/dist/utils/demo-shell/index.cjs.map +1 -0
  410. package/dist/utils/demo-shell/index.d.cts +90 -0
  411. package/dist/utils/demo-shell/index.d.ts +90 -0
  412. package/dist/utils/demo-shell/index.js +13 -0
  413. package/dist/utils/demo-shell/index.js.map +1 -0
  414. package/dist/utils/domain-templates/index.cjs +732 -0
  415. package/dist/utils/domain-templates/index.cjs.map +1 -0
  416. package/dist/utils/domain-templates/index.d.cts +214 -0
  417. package/dist/utils/domain-templates/index.d.ts +214 -0
  418. package/dist/utils/domain-templates/index.js +17 -0
  419. package/dist/utils/domain-templates/index.js.map +1 -0
  420. package/dist/utils/graphspec/index.cjs +1174 -0
  421. package/dist/utils/graphspec/index.cjs.map +1 -0
  422. package/dist/utils/graphspec/index.d.cts +449 -0
  423. package/dist/utils/graphspec/index.d.ts +449 -0
  424. package/dist/utils/graphspec/index.js +35 -0
  425. package/dist/utils/graphspec/index.js.map +1 -0
  426. package/dist/utils/harness/index.cjs +656 -0
  427. package/dist/utils/harness/index.cjs.map +1 -0
  428. package/dist/utils/harness/index.d.cts +542 -0
  429. package/dist/utils/harness/index.d.ts +542 -0
  430. package/dist/utils/harness/index.js +56 -0
  431. package/dist/utils/harness/index.js.map +1 -0
  432. package/dist/utils/index.cjs +17609 -0
  433. package/dist/utils/index.cjs.map +1 -0
  434. package/dist/utils/index.d.cts +96 -0
  435. package/dist/utils/index.d.ts +96 -0
  436. package/dist/utils/index.js +514 -0
  437. package/dist/utils/index.js.map +1 -0
  438. package/dist/utils/inspect/index.cjs +807 -0
  439. package/dist/utils/inspect/index.cjs.map +1 -0
  440. package/dist/utils/inspect/index.d.cts +123 -0
  441. package/dist/utils/inspect/index.d.ts +123 -0
  442. package/dist/utils/inspect/index.js +30 -0
  443. package/dist/utils/inspect/index.js.map +1 -0
  444. package/dist/utils/job-queue/index.cjs +717 -0
  445. package/dist/utils/job-queue/index.cjs.map +1 -0
  446. package/dist/utils/job-queue/index.d.cts +200 -0
  447. package/dist/utils/job-queue/index.d.ts +200 -0
  448. package/dist/utils/job-queue/index.js +18 -0
  449. package/dist/utils/job-queue/index.js.map +1 -0
  450. package/dist/utils/memory/index.cjs +1451 -0
  451. package/dist/utils/memory/index.cjs.map +1 -0
  452. package/dist/utils/memory/index.d.cts +582 -0
  453. package/dist/utils/memory/index.d.ts +582 -0
  454. package/dist/utils/memory/index.js +19 -0
  455. package/dist/utils/memory/index.js.map +1 -0
  456. package/dist/utils/messaging/index.cjs +666 -0
  457. package/dist/utils/messaging/index.cjs.map +1 -0
  458. package/dist/utils/messaging/index.d.cts +562 -0
  459. package/dist/utils/messaging/index.d.ts +562 -0
  460. package/dist/utils/messaging/index.js +50 -0
  461. package/dist/utils/messaging/index.js.map +1 -0
  462. package/dist/utils/orchestration/index.cjs +876 -0
  463. package/dist/utils/orchestration/index.cjs.map +1 -0
  464. package/dist/utils/orchestration/index.d.cts +233 -0
  465. package/dist/utils/orchestration/index.d.ts +233 -0
  466. package/dist/utils/orchestration/index.js +19 -0
  467. package/dist/utils/orchestration/index.js.map +1 -0
  468. package/dist/utils/process/index.cjs +743 -0
  469. package/dist/utils/process/index.cjs.map +1 -0
  470. package/dist/utils/process/index.d.cts +411 -0
  471. package/dist/utils/process/index.d.ts +411 -0
  472. package/dist/utils/process/index.js +14 -0
  473. package/dist/utils/process/index.js.map +1 -0
  474. package/dist/utils/reactive-layout/index.cjs +1607 -0
  475. package/dist/utils/reactive-layout/index.cjs.map +1 -0
  476. package/dist/utils/reactive-layout/index.d.cts +492 -0
  477. package/dist/utils/reactive-layout/index.d.ts +492 -0
  478. package/dist/utils/reactive-layout/index.js +52 -0
  479. package/dist/utils/reactive-layout/index.js.map +1 -0
  480. package/dist/utils/reduction/index.cjs +203 -0
  481. package/dist/utils/reduction/index.cjs.map +1 -0
  482. package/dist/utils/reduction/index.d.cts +102 -0
  483. package/dist/utils/reduction/index.d.ts +102 -0
  484. package/dist/utils/reduction/index.js +14 -0
  485. package/dist/utils/reduction/index.js.map +1 -0
  486. package/dist/utils/resilience/index.cjs +1617 -0
  487. package/dist/utils/resilience/index.cjs.map +1 -0
  488. package/dist/utils/resilience/index.d.cts +9 -0
  489. package/dist/utils/resilience/index.d.ts +9 -0
  490. package/dist/utils/resilience/index.js +44 -0
  491. package/dist/utils/resilience/index.js.map +1 -0
  492. package/dist/utils/surface/index.cjs +1070 -0
  493. package/dist/utils/surface/index.cjs.map +1 -0
  494. package/dist/utils/surface/index.d.cts +240 -0
  495. package/dist/utils/surface/index.d.ts +240 -0
  496. package/dist/utils/surface/index.js +30 -0
  497. package/dist/utils/surface/index.js.map +1 -0
  498. package/dist/utils/topology-view/index.cjs +620 -0
  499. package/dist/utils/topology-view/index.cjs.map +1 -0
  500. package/dist/utils/topology-view/index.d.cts +68 -0
  501. package/dist/utils/topology-view/index.d.ts +68 -0
  502. package/dist/utils/topology-view/index.js +11 -0
  503. package/dist/utils/topology-view/index.js.map +1 -0
  504. package/package.json +293 -237
  505. package/dist/core/index.cjs +0 -21
  506. package/dist/core/index.cjs.map +0 -1
  507. package/dist/core/index.d.cts +0 -1
  508. package/dist/core/index.d.ts +0 -1
  509. package/dist/core/index.js +0 -3
  510. package/dist/core/index.js.map +0 -1
  511. package/dist/extra/browser.cjs +0 -21
  512. package/dist/extra/browser.cjs.map +0 -1
  513. package/dist/extra/browser.d.cts +0 -1
  514. package/dist/extra/browser.d.ts +0 -1
  515. package/dist/extra/browser.js +0 -3
  516. package/dist/extra/browser.js.map +0 -1
  517. package/dist/extra/index.cjs +0 -21
  518. package/dist/extra/index.cjs.map +0 -1
  519. package/dist/extra/index.d.cts +0 -1
  520. package/dist/extra/index.d.ts +0 -1
  521. package/dist/extra/index.js +0 -3
  522. package/dist/extra/index.js.map +0 -1
  523. package/dist/extra/node.cjs +0 -21
  524. package/dist/extra/node.cjs.map +0 -1
  525. package/dist/extra/node.d.cts +0 -1
  526. package/dist/extra/node.d.ts +0 -1
  527. package/dist/extra/node.js +0 -3
  528. package/dist/extra/node.js.map +0 -1
  529. package/dist/extra/operators.cjs +0 -21
  530. package/dist/extra/operators.cjs.map +0 -1
  531. package/dist/extra/operators.d.cts +0 -1
  532. package/dist/extra/operators.d.ts +0 -1
  533. package/dist/extra/operators.js +0 -3
  534. package/dist/extra/operators.js.map +0 -1
  535. package/dist/extra/reactive.cjs +0 -21
  536. package/dist/extra/reactive.cjs.map +0 -1
  537. package/dist/extra/reactive.d.cts +0 -1
  538. package/dist/extra/reactive.d.ts +0 -1
  539. package/dist/extra/reactive.js +0 -3
  540. package/dist/extra/reactive.js.map +0 -1
  541. package/dist/extra/render/index.cjs +0 -21
  542. package/dist/extra/render/index.cjs.map +0 -1
  543. package/dist/extra/render/index.d.cts +0 -1
  544. package/dist/extra/render/index.d.ts +0 -1
  545. package/dist/extra/render/index.js +0 -3
  546. package/dist/extra/render/index.js.map +0 -1
  547. package/dist/extra/sources.cjs +0 -21
  548. package/dist/extra/sources.cjs.map +0 -1
  549. package/dist/extra/sources.d.cts +0 -1
  550. package/dist/extra/sources.d.ts +0 -1
  551. package/dist/extra/sources.js +0 -3
  552. package/dist/extra/sources.js.map +0 -1
  553. package/dist/extra/storage-browser.cjs +0 -21
  554. package/dist/extra/storage-browser.cjs.map +0 -1
  555. package/dist/extra/storage-browser.d.cts +0 -1
  556. package/dist/extra/storage-browser.d.ts +0 -1
  557. package/dist/extra/storage-browser.js +0 -3
  558. package/dist/extra/storage-browser.js.map +0 -1
  559. package/dist/extra/storage-core.cjs +0 -21
  560. package/dist/extra/storage-core.cjs.map +0 -1
  561. package/dist/extra/storage-core.d.cts +0 -1
  562. package/dist/extra/storage-core.d.ts +0 -1
  563. package/dist/extra/storage-core.js +0 -3
  564. package/dist/extra/storage-core.js.map +0 -1
  565. package/dist/extra/storage-node.cjs +0 -21
  566. package/dist/extra/storage-node.cjs.map +0 -1
  567. package/dist/extra/storage-node.d.cts +0 -1
  568. package/dist/extra/storage-node.d.ts +0 -1
  569. package/dist/extra/storage-node.js +0 -3
  570. package/dist/extra/storage-node.js.map +0 -1
  571. package/dist/extra/storage-tiers-browser.cjs +0 -21
  572. package/dist/extra/storage-tiers-browser.cjs.map +0 -1
  573. package/dist/extra/storage-tiers-browser.d.cts +0 -1
  574. package/dist/extra/storage-tiers-browser.d.ts +0 -1
  575. package/dist/extra/storage-tiers-browser.js +0 -3
  576. package/dist/extra/storage-tiers-browser.js.map +0 -1
  577. package/dist/extra/storage-tiers-node.cjs +0 -21
  578. package/dist/extra/storage-tiers-node.cjs.map +0 -1
  579. package/dist/extra/storage-tiers-node.d.cts +0 -1
  580. package/dist/extra/storage-tiers-node.d.ts +0 -1
  581. package/dist/extra/storage-tiers-node.js +0 -3
  582. package/dist/extra/storage-tiers-node.js.map +0 -1
  583. package/dist/extra/storage-tiers.cjs +0 -21
  584. package/dist/extra/storage-tiers.cjs.map +0 -1
  585. package/dist/extra/storage-tiers.d.cts +0 -1
  586. package/dist/extra/storage-tiers.d.ts +0 -1
  587. package/dist/extra/storage-tiers.js +0 -3
  588. package/dist/extra/storage-tiers.js.map +0 -1
  589. package/dist/extra/storage-wal.cjs +0 -21
  590. package/dist/extra/storage-wal.cjs.map +0 -1
  591. package/dist/extra/storage-wal.d.cts +0 -1
  592. package/dist/extra/storage-wal.d.ts +0 -1
  593. package/dist/extra/storage-wal.js +0 -3
  594. package/dist/extra/storage-wal.js.map +0 -1
  595. package/dist/graph/index.cjs +0 -21
  596. package/dist/graph/index.cjs.map +0 -1
  597. package/dist/graph/index.d.cts +0 -1
  598. package/dist/graph/index.d.ts +0 -1
  599. package/dist/graph/index.js +0 -3
  600. package/dist/graph/index.js.map +0 -1
  601. package/dist/patterns/ai/browser.cjs +0 -21
  602. package/dist/patterns/ai/browser.cjs.map +0 -1
  603. package/dist/patterns/ai/browser.d.cts +0 -1
  604. package/dist/patterns/ai/browser.d.ts +0 -1
  605. package/dist/patterns/ai/browser.js +0 -3
  606. package/dist/patterns/ai/browser.js.map +0 -1
  607. package/dist/patterns/ai/index.cjs +0 -21
  608. package/dist/patterns/ai/index.cjs.map +0 -1
  609. package/dist/patterns/ai/index.d.cts +0 -1
  610. package/dist/patterns/ai/index.d.ts +0 -1
  611. package/dist/patterns/ai/index.js +0 -3
  612. package/dist/patterns/ai/index.js.map +0 -1
  613. package/dist/patterns/ai/node.cjs +0 -21
  614. package/dist/patterns/ai/node.cjs.map +0 -1
  615. package/dist/patterns/ai/node.d.cts +0 -1
  616. package/dist/patterns/ai/node.d.ts +0 -1
  617. package/dist/patterns/ai/node.js +0 -3
  618. package/dist/patterns/ai/node.js.map +0 -1
  619. package/dist/patterns/cqrs/index.cjs +0 -21
  620. package/dist/patterns/cqrs/index.cjs.map +0 -1
  621. package/dist/patterns/cqrs/index.d.cts +0 -1
  622. package/dist/patterns/cqrs/index.d.ts +0 -1
  623. package/dist/patterns/cqrs/index.js +0 -3
  624. package/dist/patterns/cqrs/index.js.map +0 -1
  625. package/dist/patterns/demo-shell/index.cjs +0 -21
  626. package/dist/patterns/demo-shell/index.cjs.map +0 -1
  627. package/dist/patterns/demo-shell/index.d.cts +0 -1
  628. package/dist/patterns/demo-shell/index.d.ts +0 -1
  629. package/dist/patterns/demo-shell/index.js +0 -3
  630. package/dist/patterns/demo-shell/index.js.map +0 -1
  631. package/dist/patterns/domain-templates/index.cjs +0 -21
  632. package/dist/patterns/domain-templates/index.cjs.map +0 -1
  633. package/dist/patterns/domain-templates/index.d.cts +0 -1
  634. package/dist/patterns/domain-templates/index.d.ts +0 -1
  635. package/dist/patterns/domain-templates/index.js +0 -3
  636. package/dist/patterns/domain-templates/index.js.map +0 -1
  637. package/dist/patterns/graphspec/index.cjs +0 -21
  638. package/dist/patterns/graphspec/index.cjs.map +0 -1
  639. package/dist/patterns/graphspec/index.d.cts +0 -1
  640. package/dist/patterns/graphspec/index.d.ts +0 -1
  641. package/dist/patterns/graphspec/index.js +0 -3
  642. package/dist/patterns/graphspec/index.js.map +0 -1
  643. package/dist/patterns/harness/index.cjs +0 -21
  644. package/dist/patterns/harness/index.cjs.map +0 -1
  645. package/dist/patterns/harness/index.d.cts +0 -1
  646. package/dist/patterns/harness/index.d.ts +0 -1
  647. package/dist/patterns/harness/index.js +0 -3
  648. package/dist/patterns/harness/index.js.map +0 -1
  649. package/dist/patterns/inspect/index.cjs +0 -21
  650. package/dist/patterns/inspect/index.cjs.map +0 -1
  651. package/dist/patterns/inspect/index.d.cts +0 -1
  652. package/dist/patterns/inspect/index.d.ts +0 -1
  653. package/dist/patterns/inspect/index.js +0 -3
  654. package/dist/patterns/inspect/index.js.map +0 -1
  655. package/dist/patterns/job-queue/index.cjs +0 -21
  656. package/dist/patterns/job-queue/index.cjs.map +0 -1
  657. package/dist/patterns/job-queue/index.d.cts +0 -1
  658. package/dist/patterns/job-queue/index.d.ts +0 -1
  659. package/dist/patterns/job-queue/index.js +0 -3
  660. package/dist/patterns/job-queue/index.js.map +0 -1
  661. package/dist/patterns/memory/index.cjs +0 -21
  662. package/dist/patterns/memory/index.cjs.map +0 -1
  663. package/dist/patterns/memory/index.d.cts +0 -1
  664. package/dist/patterns/memory/index.d.ts +0 -1
  665. package/dist/patterns/memory/index.js +0 -3
  666. package/dist/patterns/memory/index.js.map +0 -1
  667. package/dist/patterns/messaging/index.cjs +0 -21
  668. package/dist/patterns/messaging/index.cjs.map +0 -1
  669. package/dist/patterns/messaging/index.d.cts +0 -1
  670. package/dist/patterns/messaging/index.d.ts +0 -1
  671. package/dist/patterns/messaging/index.js +0 -3
  672. package/dist/patterns/messaging/index.js.map +0 -1
  673. package/dist/patterns/orchestration/index.cjs +0 -21
  674. package/dist/patterns/orchestration/index.cjs.map +0 -1
  675. package/dist/patterns/orchestration/index.d.cts +0 -1
  676. package/dist/patterns/orchestration/index.d.ts +0 -1
  677. package/dist/patterns/orchestration/index.js +0 -3
  678. package/dist/patterns/orchestration/index.js.map +0 -1
  679. package/dist/patterns/process/index.cjs +0 -21
  680. package/dist/patterns/process/index.cjs.map +0 -1
  681. package/dist/patterns/process/index.d.cts +0 -1
  682. package/dist/patterns/process/index.d.ts +0 -1
  683. package/dist/patterns/process/index.js +0 -3
  684. package/dist/patterns/process/index.js.map +0 -1
  685. package/dist/patterns/reactive-layout/index.cjs +0 -21
  686. package/dist/patterns/reactive-layout/index.cjs.map +0 -1
  687. package/dist/patterns/reactive-layout/index.d.cts +0 -1
  688. package/dist/patterns/reactive-layout/index.d.ts +0 -1
  689. package/dist/patterns/reactive-layout/index.js +0 -3
  690. package/dist/patterns/reactive-layout/index.js.map +0 -1
  691. package/dist/patterns/reduction/index.cjs +0 -21
  692. package/dist/patterns/reduction/index.cjs.map +0 -1
  693. package/dist/patterns/reduction/index.d.cts +0 -1
  694. package/dist/patterns/reduction/index.d.ts +0 -1
  695. package/dist/patterns/reduction/index.js +0 -3
  696. package/dist/patterns/reduction/index.js.map +0 -1
  697. package/dist/patterns/surface/index.cjs +0 -21
  698. package/dist/patterns/surface/index.cjs.map +0 -1
  699. package/dist/patterns/surface/index.d.cts +0 -1
  700. package/dist/patterns/surface/index.d.ts +0 -1
  701. package/dist/patterns/surface/index.js +0 -3
  702. package/dist/patterns/surface/index.js.map +0 -1
  703. package/dist/patterns/topology-view/index.cjs +0 -21
  704. package/dist/patterns/topology-view/index.cjs.map +0 -1
  705. package/dist/patterns/topology-view/index.d.cts +0 -1
  706. package/dist/patterns/topology-view/index.d.ts +0 -1
  707. package/dist/patterns/topology-view/index.js +0 -3
  708. package/dist/patterns/topology-view/index.js.map +0 -1
  709. package/dist/testing/index.cjs +0 -21
  710. package/dist/testing/index.cjs.map +0 -1
  711. package/dist/testing/index.d.cts +0 -1
  712. package/dist/testing/index.d.ts +0 -1
  713. package/dist/testing/index.js +0 -3
  714. package/dist/testing/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/base/io/sse.ts","../src/base/io/_internal.ts"],"sourcesContent":["/**\n * Server-Sent Events IO — `toSSE` / `toSSEBytes` (encode any node into the\n * `text/event-stream` wire format), `toReadableStream` (web-stream sink),\n * `parseSSEStream` (async-iterator parser), `fromSSE` (line-delimited parser\n * source).\n */\n\nimport {\n\tCOMPLETE,\n\tDATA,\n\tDIRTY,\n\tdefaultConfig,\n\tERROR,\n\ttype Node,\n\tnode,\n\tRESOLVED,\n} from \"@graphrefly/pure-ts/core\";\nimport { type ExtraOpts, sourceOpts } from \"./_internal.js\";\n\n/** Options for {@link toSSE}. */\nexport type ToSSEOptions = {\n\t/** Custom payload serializer for non-string payloads. Default: `JSON.stringify` fallback to `String(value)`. */\n\tserialize?: (value: unknown) => string;\n\t/** Event name for DATA tuples. Default: `\"data\"`. */\n\tdataEvent?: string;\n\t/** Event name for ERROR tuples. Default: `\"error\"`. */\n\terrorEvent?: string;\n\t/** Event name for COMPLETE tuples. Default: `\"complete\"`. */\n\tcompleteEvent?: string;\n\t/** Emit `event: resolved` when RESOLVED arrives. Default: `false`. */\n\tincludeResolved?: boolean;\n\t/** Emit `event: dirty` when DIRTY arrives. Default: `false`. */\n\tincludeDirty?: boolean;\n\t/** Add SSE comment keepalive frames (`: keepalive`) on an interval. Disabled when unset. */\n\tkeepAliveMs?: number;\n\t/** Optional abort signal to terminate the stream early. */\n\tsignal?: AbortSignal;\n\t/** Maps custom message types to SSE event names. */\n\teventNameResolver?: (type: symbol) => string;\n};\n\nfunction messageTypeLabel(t: symbol): string {\n\treturn Symbol.keyFor(t) ?? t.description ?? \"message\";\n}\n\nfunction serializeSseData(value: unknown, serialize: (value: unknown) => string): string {\n\tif (typeof value === \"string\") return value;\n\treturn serialize(value);\n}\n\nfunction sseFrame(event: string, data?: string): string {\n\tlet out = `event: ${event}\\n`;\n\tif (data !== undefined) {\n\t\tconst lines = data.split(/\\r?\\n/);\n\t\tfor (const line of lines) {\n\t\t\tout += `data: ${line}\\n`;\n\t\t}\n\t}\n\treturn `${out}\\n`;\n}\n\n/**\n * Creates a standard Server-Sent Events stream from node messages.\n *\n * @category extra\n */\nexport function toSSE<T>(source: Node<T>, opts?: ToSSEOptions): ReadableStream<Uint8Array> {\n\tconst {\n\t\tserialize = (value: unknown) => {\n\t\t\tif (value instanceof Error) return value.message;\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(value);\n\t\t\t} catch {\n\t\t\t\treturn String(value);\n\t\t\t}\n\t\t},\n\t\tdataEvent = \"data\",\n\t\terrorEvent = \"error\",\n\t\tcompleteEvent = \"complete\",\n\t\tincludeResolved = false,\n\t\tincludeDirty = false,\n\t\tkeepAliveMs,\n\t\tsignal,\n\t\teventNameResolver = messageTypeLabel,\n\t} = opts ?? {};\n\tconst encoder = new TextEncoder();\n\tlet stop: (() => void) | undefined;\n\n\treturn new ReadableStream<Uint8Array>({\n\t\tstart(controller) {\n\t\t\tlet closed = false;\n\t\t\tlet keepAlive: ReturnType<typeof setInterval> | undefined;\n\t\t\tlet unsub: () => void = () => {};\n\t\t\tconst close = () => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tif (keepAlive !== undefined) clearInterval(keepAlive);\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tunsub();\n\t\t\t\tcontroller.close();\n\t\t\t};\n\t\t\tstop = close;\n\t\t\tconst write = (event: string, data?: string) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tcontroller.enqueue(encoder.encode(sseFrame(event, data)));\n\t\t\t};\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclose();\n\t\t\t};\n\t\t\tunsub = source.subscribe((msgs) => {\n\t\t\t\tfor (const msg of msgs) {\n\t\t\t\t\tconst t = msg[0];\n\t\t\t\t\t// Skip graph-local signals (tier < 3: START, DIRTY, INVALIDATE,\n\t\t\t\t\t// PAUSE, RESUME). DIRTY is opt-in for observability.\n\t\t\t\t\tif (defaultConfig.isLocalOnly(t)) {\n\t\t\t\t\t\tif (t === DIRTY && includeDirty) {\n\t\t\t\t\t\t\t/* fall through to write */\n\t\t\t\t\t\t} else continue;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === DATA) {\n\t\t\t\t\t\twrite(dataEvent, serializeSseData(msg[1], serialize));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === ERROR) {\n\t\t\t\t\t\twrite(errorEvent, serializeSseData(msg[1], serialize));\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === COMPLETE) {\n\t\t\t\t\t\twrite(completeEvent);\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// RESOLVED (tier 3) is opt-in for observability.\n\t\t\t\t\tif (!includeResolved && t === RESOLVED) continue;\n\t\t\t\t\twrite(\n\t\t\t\t\t\teventNameResolver(t),\n\t\t\t\t\t\tmsg.length > 1 ? serializeSseData(msg[1], serialize) : undefined,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (keepAliveMs !== undefined && keepAliveMs > 0) {\n\t\t\t\tkeepAlive = setInterval(() => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tcontroller.enqueue(encoder.encode(\": keepalive\\n\\n\"));\n\t\t\t\t}, keepAliveMs);\n\t\t\t}\n\t\t\tif (signal?.aborted) onAbort();\n\t\t\telse signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t},\n\t\tcancel() {\n\t\t\tstop?.();\n\t\t},\n\t});\n}\n\n/**\n * Composable variant of {@link toSSE} — emits encoded SSE frames as\n * `Uint8Array` through a reactive `Node`. Use this when you want to pipe SSE\n * bytes through the reactive graph (persist to file, tee to multiple streams,\n * etc.). Wrap with {@link toReadableStream} to expose a `ReadableStream` for\n * `new Response(...)` use cases.\n *\n * @category extra\n */\nexport function toSSEBytes<T>(source: Node<T>, opts?: ToSSEOptions): Node<Uint8Array> {\n\tconst {\n\t\tserialize = (value: unknown) => {\n\t\t\tif (value instanceof Error) return value.message;\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(value);\n\t\t\t} catch {\n\t\t\t\treturn String(value);\n\t\t\t}\n\t\t},\n\t\tdataEvent = \"data\",\n\t\terrorEvent = \"error\",\n\t\tcompleteEvent = \"complete\",\n\t\tincludeResolved = false,\n\t\tincludeDirty = false,\n\t\tkeepAliveMs,\n\t\tsignal,\n\t\teventNameResolver = messageTypeLabel,\n\t} = opts ?? {};\n\tconst encoder = new TextEncoder();\n\treturn node<Uint8Array>([], (_data, a) => {\n\t\tlet active = true;\n\t\tlet keepAlive: ReturnType<typeof setInterval> | undefined;\n\t\tconst emitFrame = (event: string, data?: string) => {\n\t\t\tif (!active) return;\n\t\t\ta.emit(encoder.encode(sseFrame(event, data)));\n\t\t};\n\t\tconst onAbort = () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\ta.down([[COMPLETE]]);\n\t\t};\n\t\tconst unsub = source.subscribe((msgs) => {\n\t\t\tif (!active) return;\n\t\t\tfor (const msg of msgs) {\n\t\t\t\tconst t = msg[0];\n\t\t\t\tif (defaultConfig.isLocalOnly(t)) {\n\t\t\t\t\tif (t === DIRTY && includeDirty) {\n\t\t\t\t\t\t/* fall through */\n\t\t\t\t\t} else continue;\n\t\t\t\t}\n\t\t\t\tif (t === DATA) {\n\t\t\t\t\temitFrame(dataEvent, serializeSseData(msg[1], serialize));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (t === ERROR) {\n\t\t\t\t\temitFrame(errorEvent, serializeSseData(msg[1], serialize));\n\t\t\t\t\tactive = false;\n\t\t\t\t\ta.down([[COMPLETE]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (t === COMPLETE) {\n\t\t\t\t\temitFrame(completeEvent);\n\t\t\t\t\tactive = false;\n\t\t\t\t\ta.down([[COMPLETE]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!includeResolved && t === RESOLVED) continue;\n\t\t\t\temitFrame(\n\t\t\t\t\teventNameResolver(t),\n\t\t\t\t\tmsg.length > 1 ? serializeSseData(msg[1], serialize) : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tif (keepAliveMs !== undefined && keepAliveMs > 0) {\n\t\t\tkeepAlive = setInterval(() => {\n\t\t\t\tif (!active) return;\n\t\t\t\ta.emit(encoder.encode(\": keepalive\\n\\n\"));\n\t\t\t}, keepAliveMs);\n\t\t}\n\t\tif (signal?.aborted) onAbort();\n\t\telse signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\tif (keepAlive !== undefined) clearInterval(keepAlive);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tunsub();\n\t\t};\n\t});\n}\n\n/**\n * Converts a `Node<Uint8Array>` into a WHATWG `ReadableStream<Uint8Array>`.\n * Useful for composing with `new Response(...)` / `fetch` bodies.\n *\n * @category extra\n */\nexport function toReadableStream(bytes: Node<Uint8Array>): ReadableStream<Uint8Array> {\n\tlet unsub: (() => void) | undefined;\n\tlet closed = false;\n\treturn new ReadableStream<Uint8Array>({\n\t\tstart(controller) {\n\t\t\tunsub = bytes.subscribe((msgs) => {\n\t\t\t\tfor (const m of msgs) {\n\t\t\t\t\tconst t = m[0];\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tif (t === DATA) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcontroller.enqueue(m[1] as Uint8Array);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* controller closed mid-batch — upstream unsub will follow */\n\t\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t\t\tunsub?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (t === ERROR) {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcontroller.error(m[1]);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* controller already closed */\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if (t === COMPLETE) {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* controller already closed */\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tcancel() {\n\t\t\tclosed = true;\n\t\t\tunsub?.();\n\t\t},\n\t});\n}\n\n/** Parsed Server-Sent Event. */\nexport type SSEEvent<T = string> = {\n\tevent: string;\n\tdata: T;\n\tid?: string;\n\tretry?: number;\n};\n\n/** Options for {@link fromSSE}. */\nexport type FromSSEOptions<T = string> = ExtraOpts & {\n\t/** Parse the raw `data:` payload. Default: identity (string). */\n\tparse?: (raw: string) => T;\n};\n\n/** Options for {@link parseSSEStream}. */\nexport type ParseSSEStreamOptions<T = string> = {\n\t/** Parse the raw `data:` payload. Default: identity (string). */\n\tparse?: (raw: string) => T;\n\t/**\n\t * External abort signal. If aborted, the generator returns early after\n\t * cancelling the underlying reader / iterator. Does not emit an error —\n\t * the generator simply ends.\n\t */\n\tsignal?: AbortSignal;\n};\n\n/**\n * Parses a Server-Sent Events byte stream into an async-iterator of structured\n * `{event, data, id, retry}` records. Pure async generator with no reactive\n * dependency — safe to consume anywhere an `AsyncIterable<SSEEvent>` is\n * expected (LLM provider adapters, tests, non-reactive transports).\n *\n * Handles:\n * - Arbitrary chunk boundaries (internal text buffer + `TextDecoder` streaming).\n * - `\\n` and `\\r\\n` line endings.\n * - `event:` / `data:` (multi-line via repeated fields) / `id:` / `retry:`.\n * - Comments (`:` prefix).\n * - Cancels the underlying reader / iterator on external abort or consumer\n * break, so a quiet stream doesn't leak pending `read()` calls.\n *\n * Used internally by {@link fromSSE} (reactive `Node<SSEEvent>`) — exposed as a\n * pure helper so LLM provider adapters (Anthropic, OpenAI, Google) can parse\n * their SSE streams without building a reactive node per call.\n *\n * @param source - SSE byte source (`ReadableStream`, `Response`, or `AsyncIterable<Uint8Array>`).\n * @param opts - `{ parse?, signal? }`.\n * @returns `AsyncGenerator<SSEEvent<T>>` — yields one event per SSE block; returns on stream end / abort.\n *\n * @category extra\n */\nexport async function* parseSSEStream<T = string>(\n\tsource: ReadableStream<Uint8Array> | Response | AsyncIterable<Uint8Array>,\n\topts?: ParseSSEStreamOptions<T>,\n): AsyncGenerator<SSEEvent<T>, void, unknown> {\n\tconst parse = opts?.parse ?? ((raw: string) => raw as unknown as T);\n\tconst externalSignal = opts?.signal;\n\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tlet currentEvent = \"message\";\n\tlet currentData: string[] = [];\n\tlet currentId: string | undefined;\n\tlet currentRetry: number | undefined;\n\tconst queue: SSEEvent<T>[] = [];\n\n\tconst flushEvent = () => {\n\t\tif (currentData.length === 0 && currentEvent === \"message\" && currentId === undefined) {\n\t\t\tcurrentData = [];\n\t\t\treturn;\n\t\t}\n\t\tconst raw = currentData.join(\"\\n\");\n\t\tqueue.push({\n\t\t\tevent: currentEvent,\n\t\t\tdata: parse(raw),\n\t\t\tid: currentId,\n\t\t\tretry: currentRetry,\n\t\t});\n\t\tcurrentEvent = \"message\";\n\t\tcurrentData = [];\n\t\tcurrentId = undefined;\n\t\tcurrentRetry = undefined;\n\t};\n\n\tconst processLine = (line: string) => {\n\t\tif (line === \"\") {\n\t\t\tflushEvent();\n\t\t\treturn;\n\t\t}\n\t\tif (line.startsWith(\":\")) return; // comment\n\t\tconst colon = line.indexOf(\":\");\n\t\tconst field = colon < 0 ? line : line.slice(0, colon);\n\t\tlet value = colon < 0 ? \"\" : line.slice(colon + 1);\n\t\tif (value.startsWith(\" \")) value = value.slice(1);\n\t\tswitch (field) {\n\t\t\tcase \"event\":\n\t\t\t\tcurrentEvent = value;\n\t\t\t\tbreak;\n\t\t\tcase \"data\":\n\t\t\t\tcurrentData.push(value);\n\t\t\t\tbreak;\n\t\t\tcase \"id\":\n\t\t\t\tif (!value.includes(\"\\0\")) currentId = value;\n\t\t\t\tbreak;\n\t\t\tcase \"retry\": {\n\t\t\t\tconst n = Number(value);\n\t\t\t\tif (Number.isFinite(n)) currentRetry = n;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst processChunk = (chunk: Uint8Array, done: boolean) => {\n\t\tbuffer += decoder.decode(chunk, { stream: !done });\n\t\tconst parts = buffer.split(/\\r?\\n/);\n\t\tbuffer = parts.pop() ?? \"\";\n\t\tfor (const line of parts) processLine(line);\n\t};\n\n\t// Resolve the underlying byte source into either a `ReadableStream` or an\n\t// `AsyncIterator<Uint8Array>` — identical dispatch as the legacy fromSSE.\n\tconst resp = source as Response;\n\tconst stream =\n\t\tsource instanceof ReadableStream\n\t\t\t? source\n\t\t\t: resp && typeof resp === \"object\" && resp.body instanceof ReadableStream\n\t\t\t\t? resp.body\n\t\t\t\t: null;\n\n\tlet reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n\tlet iter: AsyncIterator<Uint8Array> | undefined;\n\t// `cleanupDone` flips once we've invoked `reader.cancel()` / `iter.return()`\n\t// — guards against the `onAbort` listener + the `finally` path both\n\t// cancelling the same underlying resource (WHATWG streams allow double-\n\t// cancel but custom `AsyncIterator.return` implementations are not\n\t// required to be idempotent).\n\tlet cleanupDone = false;\n\tconst cleanupReader = (): void => {\n\t\tif (cleanupDone) return;\n\t\tcleanupDone = true;\n\t\tif (reader) {\n\t\t\tvoid reader.cancel().catch(() => undefined);\n\t\t}\n\t\tif (iter && typeof iter.return === \"function\") {\n\t\t\tvoid Promise.resolve(iter.return()).catch(() => undefined);\n\t\t}\n\t};\n\n\t// Wire the external abort signal to cancel the reader / iterator promptly\n\t// instead of waiting for the next chunk.\n\tconst onAbort = (): void => {\n\t\tcleanupReader();\n\t};\n\tif (externalSignal) {\n\t\tif (externalSignal.aborted) return;\n\t\texternalSignal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\n\ttry {\n\t\tif (stream) {\n\t\t\treader = stream.getReader();\n\t\t\twhile (!externalSignal?.aborted) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tprocessChunk(value, false);\n\t\t\t\twhile (queue.length > 0) {\n\t\t\t\t\tconst ev = queue.shift() as SSEEvent<T>;\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessChunk(new Uint8Array(), true);\n\t\t} else {\n\t\t\tconst asyncIter = source as AsyncIterable<Uint8Array>;\n\t\t\titer = asyncIter[Symbol.asyncIterator]();\n\t\t\twhile (!externalSignal?.aborted) {\n\t\t\t\tconst step = await iter.next();\n\t\t\t\tif (step.done) break;\n\t\t\t\tprocessChunk(step.value, false);\n\t\t\t\twhile (queue.length > 0) {\n\t\t\t\t\tconst ev = queue.shift() as SSEEvent<T>;\n\t\t\t\t\tyield ev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessChunk(new Uint8Array(), true);\n\t\t}\n\t\tif (buffer.trim()) {\n\t\t\tfor (const line of buffer.split(/\\r?\\n/)) processLine(line);\n\t\t\tflushEvent();\n\t\t}\n\t\twhile (queue.length > 0) {\n\t\t\tconst ev = queue.shift() as SSEEvent<T>;\n\t\t\tyield ev;\n\t\t}\n\t} finally {\n\t\tif (externalSignal) {\n\t\t\texternalSignal.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t\t// Idempotent cleanup — if `onAbort` already ran the cancel, this is a\n\t\t// no-op. Covers the normal consumer-break path (generator exits → finally\n\t\t// runs → cancel underlying reader / iterator so a quiet upstream\n\t\t// doesn't leak its `read()` call).\n\t\tcleanupReader();\n\t}\n}\n\n/**\n * Parses a Server-Sent Events stream into structured `{event, data, id}` records.\n *\n * @param source - SSE byte source (`ReadableStream`, `Response`, or `AsyncIterable<Uint8Array>`).\n * @param opts - Parse function and node options.\n * @returns `Node<SSEEvent<T>>` — one `DATA` per SSE event; `COMPLETE` on stream end.\n *\n * @category extra\n */\nexport function fromSSE<T = string>(\n\tsource: ReadableStream<Uint8Array> | Response | AsyncIterable<Uint8Array>,\n\topts?: FromSSEOptions<T>,\n): Node<SSEEvent<T>> {\n\tconst { parse, ...rest } = opts ?? {};\n\treturn node<SSEEvent<T>>(\n\t\t[],\n\t\t(_data, a) => {\n\t\t\tlet active = true;\n\t\t\tconst ctrl = new AbortController();\n\t\t\tconst run = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const ev of parseSSEStream<T>(source, { parse, signal: ctrl.signal })) {\n\t\t\t\t\t\tif (!active) return;\n\t\t\t\t\t\ta.emit(ev);\n\t\t\t\t\t}\n\t\t\t\t\tif (active) a.down([[COMPLETE]]);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (active) a.down([[ERROR, err]]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvoid run();\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t\tctrl.abort();\n\t\t\t};\n\t\t},\n\t\tsourceOpts(rest),\n\t);\n}\n","/**\n * Internal helpers shared by IO sub-files.\n *\n * - `ExtraOpts` / `sourceOpts` — common opts + the `describeKind: \"producer\"`\n * wrapper used by every producer-shaped IO source.\n * - `SinkHandle` / `BufferedSinkHandle` — public sink handle shapes shared by\n * per-record and buffered sinks across multiple protocols.\n * - `AdapterHandlers` / `AckableMessage` — alias of `EmitTriad` and the\n * manual-ack envelope used by Pulsar / RabbitMQ ingest sub-files.\n * - `AttachStorageGraphLike` — duck-typed graph shape used by\n * `checkpointToS3` / `checkpointToRedis`.\n */\n\nimport type { Node, NodeOptions } from \"@graphrefly/pure-ts/core\";\nimport type { SnapshotStorageTier } from \"@graphrefly/pure-ts/extra/storage\";\nimport type { GraphCheckpointRecord } from \"@graphrefly/pure-ts/graph\";\nimport type { EmitTriad } from \"../composition/external-register.js\";\nimport type { SinkTransportError } from \"./_sink.js\";\n\nexport type ExtraOpts = Omit<NodeOptions, \"describeKind\">;\n\nexport function sourceOpts<T>(opts?: ExtraOpts): NodeOptions<T> {\n\treturn { describeKind: \"producer\", ...opts } as NodeOptions<T>;\n}\n\n/** Handle returned by per-record and buffered sinks. */\nexport type SinkHandle = {\n\t/** Stop the sink (unsubscribe from source). */\n\tdispose: () => void;\n\t/** Reactive node that emits the latest transport error (or `null`). */\n\terrors: Node<SinkTransportError | null>;\n\t/** Manually drain the internal buffer (buffered sinks only). */\n\tflush?: () => Promise<void>;\n};\n\n/** Handle returned by buffered sinks. `flush()` drains remaining buffer. */\nexport type BufferedSinkHandle = SinkHandle & {\n\t/** Manually drain the internal buffer. */\n\tflush: () => Promise<void>;\n};\n\n/** Standard handler triple for adapters that accept injected registrations. Alias of {@link EmitTriad}. */\nexport type AdapterHandlers<T> = EmitTriad<T>;\n\n/**\n * Message envelope emitted by queue consumers when `autoAck: false`. The\n * caller is responsible for calling `ack()` after successful processing or\n * `nack()` to re-queue / dead-letter. Pairs cleanly with reactive pipelines:\n *\n * ```ts\n * const messages$ = fromPulsar(consumer, { autoAck: false });\n * effect([messages$], ([m]) => {\n * try {\n * process(m.value);\n * m.ack();\n * } catch (err) {\n * m.nack({ requeue: true });\n * }\n * });\n * ```\n *\n * Ack/nack are imperative callbacks (§5.10 boundary) because the underlying\n * SDKs expose them as such. Reactive-all-the-way ack flows can be built by\n * piping `msg.ack` calls into a `reactiveSink` if desired.\n *\n * **Caller contract — must settle every emitted message.** The envelope holds\n * a closure reference to the raw SDK message; unsettled envelopes keep the\n * broker's in-flight window full and leak memory proportional to consumer\n * throughput. Patterns that drop messages (filter, take-first, switchMap\n * discard) must explicitly `nack({ requeue: true })` the discarded ones, or\n * wrap the source to force-settle on teardown.\n *\n * **Ack/nack transport failures.** Both methods route exceptions through\n * the source's `onAckError` option (when provided) — SDK rejections from\n * `acknowledge()`/`negativeAcknowledge()` don't escape as unhandled\n * rejections. Default (no `onAckError`): swallow. The broker handles\n * redelivery on its own timeline.\n *\n * @category extra\n */\nexport type AckableMessage<T> = {\n\t/** The wrapped message body. */\n\tvalue: T;\n\t/** Acknowledge successful processing. Safe to call more than once — idempotent. */\n\tack(): void;\n\t/**\n\t * Negative-acknowledge — signals the broker the message was not processed\n\t * successfully. `requeue: true` asks the broker to redeliver; `requeue: false`\n\t * may route to a dead-letter queue (SDK-specific). Omit `requeue` to\n\t * defer to the SDK's own default.\n\t */\n\tnack(opts?: { requeue?: boolean }): void;\n};\n\n/** Duck-typed graph shape consumed by `checkpointToS3` / `checkpointToRedis`. */\nexport type AttachStorageGraphLike = {\n\tattachSnapshotStorage: (\n\t\tpairs: readonly { snapshot: SnapshotStorageTier<GraphCheckpointRecord> }[],\n\t\topts?: unknown,\n\t) => { dispose(): void };\n\tname: string;\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-T5BN5KG7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,207 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-AZDQPQ3V.js";
4
+
5
+ // src/compat/nanostores/index.ts
6
+ var nanostores_exports = {};
7
+ __export(nanostores_exports, {
8
+ action: () => action,
9
+ atom: () => atom,
10
+ computed: () => computed,
11
+ getValue: () => getValue,
12
+ map: () => map,
13
+ onMount: () => onMount,
14
+ onStart: () => onStart,
15
+ onStop: () => onStop
16
+ });
17
+ import {
18
+ batch,
19
+ DATA,
20
+ dynamicNode,
21
+ ERROR,
22
+ node
23
+ } from "@graphrefly/pure-ts/core";
24
+ var START_LISTENERS = /* @__PURE__ */ new WeakMap();
25
+ var STOP_LISTENERS = /* @__PURE__ */ new WeakMap();
26
+ function trigger(node2, map2) {
27
+ const callbacks = map2.get(node2);
28
+ if (callbacks) {
29
+ for (const cb of callbacks) cb();
30
+ }
31
+ }
32
+ function createStore(node2, extra = {}) {
33
+ let listeners = 0;
34
+ const store = {
35
+ ...extra,
36
+ get: () => getVal(node2),
37
+ subscribe: (cb) => {
38
+ if (listeners === 0) trigger(node2, START_LISTENERS);
39
+ listeners++;
40
+ const sub = node2.subscribe((msgs) => {
41
+ for (const [t, v] of msgs) {
42
+ if (t === DATA) cb(v);
43
+ }
44
+ });
45
+ return () => {
46
+ sub();
47
+ listeners--;
48
+ if (listeners === 0) trigger(node2, STOP_LISTENERS);
49
+ };
50
+ },
51
+ listen: (cb) => {
52
+ if (listeners === 0) trigger(node2, START_LISTENERS);
53
+ listeners++;
54
+ let initial = true;
55
+ const sub = node2.subscribe((msgs) => {
56
+ for (const [t, v] of msgs) {
57
+ if (t === DATA) {
58
+ if (initial) {
59
+ initial = false;
60
+ continue;
61
+ }
62
+ cb(v);
63
+ }
64
+ }
65
+ });
66
+ return () => {
67
+ sub();
68
+ listeners--;
69
+ if (listeners === 0) trigger(node2, STOP_LISTENERS);
70
+ };
71
+ },
72
+ _node: node2
73
+ };
74
+ return store;
75
+ }
76
+ function pull(n) {
77
+ let val = n.cache;
78
+ let err;
79
+ const unsub = n.subscribe((msgs) => {
80
+ for (const [t, v] of msgs) {
81
+ if (t === DATA) val = v;
82
+ if (t === ERROR) err = v;
83
+ }
84
+ });
85
+ unsub();
86
+ if (err) throw err;
87
+ return val;
88
+ }
89
+ function getVal(n) {
90
+ if (n.status === "sentinel") {
91
+ return pull(n);
92
+ }
93
+ return n.cache;
94
+ }
95
+ function atom(initial) {
96
+ const n = node([], {
97
+ initial,
98
+ resubscribable: true,
99
+ resetOnTeardown: true
100
+ });
101
+ return createStore(n, {
102
+ // `n.emit` routes through the framed pipeline: `bundle()` auto-
103
+ // prefixes `[DIRTY]` (diamond-safe wave coordination) and the
104
+ // node's `equals` (default `Object.is`) folds same-value writes
105
+ // into `RESOLVED`. Matches nanostores' documented Object.is
106
+ // dedup semantics without any custom check.
107
+ set: (value) => n.emit(value)
108
+ });
109
+ }
110
+ function computed(stores, fn) {
111
+ const storeArray = Array.isArray(stores) ? stores : [stores];
112
+ const depNodes = storeArray.map((s) => s._node);
113
+ const n = dynamicNode(
114
+ depNodes,
115
+ (track) => {
116
+ const vals = storeArray.map((s) => {
117
+ const node2 = s._node;
118
+ if (node2.status === "sentinel") {
119
+ pull(node2);
120
+ }
121
+ return track(node2);
122
+ });
123
+ return fn(...vals);
124
+ },
125
+ {
126
+ resubscribable: true,
127
+ resetOnTeardown: true,
128
+ equals: Object.is,
129
+ // nanostores `computed` calls `fn(a, b, ...)` with the resolved dep
130
+ // values; producing `undefined` for not-yet-delivered deps would
131
+ // hand `fn` arguments it never expected (e.g. `NaN` from `undefined
132
+ // + 3`). Opt OUT of Lock 6.C′'s `partial:true` default — fn is
133
+ // gated until every dep delivers DATA, matching nanostores'
134
+ // store-shaped consumer contract.
135
+ partial: false
136
+ }
137
+ );
138
+ return createStore(n);
139
+ }
140
+ function map(initial) {
141
+ const n = node([], {
142
+ initial,
143
+ resubscribable: true,
144
+ resetOnTeardown: true,
145
+ equals: () => false
146
+ });
147
+ return createStore(n, {
148
+ // `map`'s state node is configured with `equals: () => false`
149
+ // above, so every `emit` produces DATA (even for same-key same-
150
+ // value sets). The `emit` path is still required for diamond
151
+ // coordination (`[DIRTY]` auto-prefix via `bundle()`).
152
+ set: (value) => n.emit(value),
153
+ setKey: (key, value) => {
154
+ const current = getVal(n);
155
+ n.emit({ ...current, [key]: value });
156
+ }
157
+ });
158
+ }
159
+ function getValue(store) {
160
+ return store.get();
161
+ }
162
+ function onStart(store, cb) {
163
+ const node2 = store._node;
164
+ let callbacks = START_LISTENERS.get(node2);
165
+ if (!callbacks) {
166
+ callbacks = /* @__PURE__ */ new Set();
167
+ START_LISTENERS.set(node2, callbacks);
168
+ }
169
+ callbacks.add(cb);
170
+ }
171
+ function onStop(store, cb) {
172
+ const node2 = store._node;
173
+ let callbacks = STOP_LISTENERS.get(node2);
174
+ if (!callbacks) {
175
+ callbacks = /* @__PURE__ */ new Set();
176
+ STOP_LISTENERS.set(node2, callbacks);
177
+ }
178
+ callbacks.add(cb);
179
+ }
180
+ function onMount(store, cb) {
181
+ onStart(store, () => {
182
+ const stop = cb();
183
+ if (typeof stop === "function") onStop(store, stop);
184
+ });
185
+ }
186
+ function action(_store, _name, fn) {
187
+ return (...args) => {
188
+ let result;
189
+ batch(() => {
190
+ result = fn(...args);
191
+ });
192
+ return result;
193
+ };
194
+ }
195
+
196
+ export {
197
+ atom,
198
+ computed,
199
+ map,
200
+ getValue,
201
+ onStart,
202
+ onStop,
203
+ onMount,
204
+ action,
205
+ nanostores_exports
206
+ };
207
+ //# sourceMappingURL=chunk-TP7244Y6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compat/nanostores/index.ts"],"sourcesContent":["import {\n\tbatch,\n\tDATA,\n\tdynamicNode,\n\tERROR,\n\ttype Messages,\n\ttype Node,\n\tnode,\n\ttype TrackFn,\n} from \"@graphrefly/pure-ts/core\";\n\n/**\n * A Nanostores-compatible atom.\n *\n * @category compat\n */\nexport interface NanoAtom<T> {\n\t/** Get current value. */\n\tget(): T;\n\t/** Set a new value (writable atoms only). */\n\tset(value: T): void;\n\t/** Subscribe to value changes. Callback receives the new value.\n\t * Returns unsubscribe function. Called immediately with current value. */\n\tsubscribe(cb: (value: T) => void): () => void;\n\t/** Listen to value changes (no immediate call). Returns unsubscribe. */\n\tlisten(cb: (value: T) => void): () => void;\n\t/** The underlying GraphReFly node. */\n\treadonly _node: Node<T>;\n}\n\n/**\n * A Nanostores-compatible computed store.\n *\n * @category compat\n */\nexport interface NanoComputed<T> {\n\t/** Get current value. */\n\tget(): T;\n\t/** Subscribe to value changes. Called immediately with current value.\n\t * Returns unsubscribe function. */\n\tsubscribe(cb: (value: T) => void): () => void;\n\t/** Listen to value changes (no immediate call). Returns unsubscribe. */\n\tlisten(cb: (value: T) => void): () => void;\n\t/** The underlying GraphReFly node. */\n\treadonly _node: Node<T>;\n}\n\n/**\n * A Nanostores-compatible map.\n *\n * @category compat\n */\nexport interface NanoMap<T extends Record<string, unknown>> extends NanoAtom<T> {\n\t/** Set a single key. */\n\tsetKey<K extends keyof T>(key: K, value: T[K]): void;\n}\n\nconst START_LISTENERS = new WeakMap<Node<any>, Set<() => void>>();\nconst STOP_LISTENERS = new WeakMap<Node<any>, Set<() => void>>();\n\nfunction trigger(node: Node<any>, map: WeakMap<Node<any>, Set<() => void>>) {\n\tconst callbacks = map.get(node);\n\tif (callbacks) {\n\t\tfor (const cb of callbacks) cb();\n\t}\n}\n\nfunction createStore<T>(node: Node<T>, extra: any = {}): any {\n\tlet listeners = 0;\n\tconst store = {\n\t\t...extra,\n\t\tget: () => getVal(node),\n\t\tsubscribe: (cb: (value: T) => void) => {\n\t\t\tif (listeners === 0) trigger(node, START_LISTENERS);\n\t\t\tlisteners++;\n\t\t\t// Push-on-subscribe delivers the initial value via DATA — no explicit cb() needed.\n\t\t\tconst sub = node.subscribe((msgs: Messages) => {\n\t\t\t\tfor (const [t, v] of msgs) {\n\t\t\t\t\tif (t === DATA) cb(v as T);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tsub();\n\t\t\t\tlisteners--;\n\t\t\t\tif (listeners === 0) trigger(node, STOP_LISTENERS);\n\t\t\t};\n\t\t},\n\t\tlisten: (cb: (value: T) => void) => {\n\t\t\tif (listeners === 0) trigger(node, START_LISTENERS);\n\t\t\tlisteners++;\n\t\t\t// Skip the initial push-on-subscribe DATA — listen() fires on changes only.\n\t\t\tlet initial = true;\n\t\t\tconst sub = node.subscribe((msgs: Messages) => {\n\t\t\t\tfor (const [t, v] of msgs) {\n\t\t\t\t\tif (t === DATA) {\n\t\t\t\t\t\tif (initial) {\n\t\t\t\t\t\t\tinitial = false;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(v as T);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tsub();\n\t\t\t\tlisteners--;\n\t\t\t\tif (listeners === 0) trigger(node, STOP_LISTENERS);\n\t\t\t};\n\t\t},\n\t\t_node: node,\n\t};\n\treturn store;\n}\n\nfunction pull<T>(n: Node<T>): T {\n\tlet val: T | undefined | null = n.cache;\n\tlet err: any;\n\tconst unsub = n.subscribe((msgs: Messages) => {\n\t\tfor (const [t, v] of msgs) {\n\t\t\tif (t === DATA) val = v as T;\n\t\t\tif (t === ERROR) err = v;\n\t\t}\n\t});\n\tunsub();\n\tif (err) throw err;\n\treturn val as T;\n}\n\nfunction getVal<T>(n: Node<T>): T {\n\tif (n.status === \"sentinel\") {\n\t\treturn pull(n);\n\t}\n\treturn n.cache as T;\n}\n\n/**\n * Creates a nanostores-compatible atom.\n *\n * @param initial - Initial value.\n * @returns `NanoAtom<T>`\n *\n * @category compat\n */\nexport function atom<T>(initial: T): NanoAtom<T> {\n\tconst n = node<T>([], {\n\t\tinitial,\n\t\tresubscribable: true,\n\t\tresetOnTeardown: true,\n\t});\n\n\treturn createStore(n, {\n\t\t// `n.emit` routes through the framed pipeline: `bundle()` auto-\n\t\t// prefixes `[DIRTY]` (diamond-safe wave coordination) and the\n\t\t// node's `equals` (default `Object.is`) folds same-value writes\n\t\t// into `RESOLVED`. Matches nanostores' documented Object.is\n\t\t// dedup semantics without any custom check.\n\t\tset: (value: T) => n.emit(value),\n\t});\n}\n\n/**\n * Creates a nanostores-compatible computed store.\n *\n * @param stores - One or more atoms/computed stores.\n * @param fn - Compute function.\n * @returns `NanoComputed<T>`\n *\n * @category compat\n */\nexport function computed<T, A>(\n\tstoreA: NanoAtom<A> | NanoComputed<A>,\n\tfn: (a: A) => T,\n): NanoComputed<T>;\nexport function computed<T, A, B>(\n\tstores: [NanoAtom<A> | NanoComputed<A>, NanoAtom<B> | NanoComputed<B>],\n\tfn: (a: A, b: B) => T,\n): NanoComputed<T>;\nexport function computed<T, A, B, C>(\n\tstores: [\n\t\tNanoAtom<A> | NanoComputed<A>,\n\t\tNanoAtom<B> | NanoComputed<B>,\n\t\tNanoAtom<C> | NanoComputed<C>,\n\t],\n\tfn: (a: A, b: B, c: C) => T,\n): NanoComputed<T>;\nexport function computed<T>(stores: any, fn: (...args: any[]) => T): NanoComputed<T> {\n\tconst storeArray: Array<NanoAtom<any> | NanoComputed<any>> = Array.isArray(stores)\n\t\t? stores\n\t\t: [stores];\n\n\tconst depNodes = storeArray.map((s) => s._node);\n\tconst n = dynamicNode(\n\t\tdepNodes,\n\t\t(track: TrackFn) => {\n\t\t\tconst vals = storeArray.map((s) => {\n\t\t\t\tconst node = s._node;\n\t\t\t\tif (node.status === \"sentinel\") {\n\t\t\t\t\tpull(node);\n\t\t\t\t}\n\t\t\t\treturn track(node);\n\t\t\t});\n\t\t\treturn fn(...vals);\n\t\t},\n\t\t{\n\t\t\tresubscribable: true,\n\t\t\tresetOnTeardown: true,\n\t\t\tequals: Object.is as any,\n\t\t\t// nanostores `computed` calls `fn(a, b, ...)` with the resolved dep\n\t\t\t// values; producing `undefined` for not-yet-delivered deps would\n\t\t\t// hand `fn` arguments it never expected (e.g. `NaN` from `undefined\n\t\t\t// + 3`). Opt OUT of Lock 6.C′'s `partial:true` default — fn is\n\t\t\t// gated until every dep delivers DATA, matching nanostores'\n\t\t\t// store-shaped consumer contract.\n\t\t\tpartial: false,\n\t\t},\n\t);\n\n\treturn createStore(n);\n}\n\n/**\n * Creates a nanostores-compatible map.\n *\n * @param initial - Initial object value.\n * @returns `NanoMap<T>`\n *\n * @category compat\n */\nexport function map<T extends Record<string, unknown>>(initial: T): NanoMap<T> {\n\tconst n = node<T>([], {\n\t\tinitial,\n\t\tresubscribable: true,\n\t\tresetOnTeardown: true,\n\t\tequals: () => false,\n\t});\n\n\treturn createStore(n, {\n\t\t// `map`'s state node is configured with `equals: () => false`\n\t\t// above, so every `emit` produces DATA (even for same-key same-\n\t\t// value sets). The `emit` path is still required for diamond\n\t\t// coordination (`[DIRTY]` auto-prefix via `bundle()`).\n\t\tset: (value: T) => n.emit(value),\n\t\tsetKey: <K extends keyof T>(key: K, value: T[K]) => {\n\t\t\tconst current = getVal(n);\n\t\t\tn.emit({ ...current, [key]: value });\n\t\t},\n\t});\n}\n\n/**\n * Returns the current value of the store.\n *\n * @category compat\n */\nexport function getValue<T>(store: NanoAtom<T> | NanoComputed<T>): T {\n\treturn store.get();\n}\n\n/**\n * Adds a listener for the store start (first listener connected).\n *\n * @category compat\n */\nexport function onStart(store: NanoAtom<any> | NanoComputed<any>, cb: () => void): void {\n\tconst node = store._node;\n\tlet callbacks = START_LISTENERS.get(node);\n\tif (!callbacks) {\n\t\tcallbacks = new Set();\n\t\tSTART_LISTENERS.set(node, callbacks);\n\t}\n\tcallbacks.add(cb);\n}\n\n/**\n * Adds a listener for the store stop (last listener disconnected).\n *\n * @category compat\n */\nexport function onStop(store: NanoAtom<any> | NanoComputed<any>, cb: () => void): void {\n\tconst node = store._node;\n\tlet callbacks = STOP_LISTENERS.get(node);\n\tif (!callbacks) {\n\t\tcallbacks = new Set();\n\t\tSTOP_LISTENERS.set(node, callbacks);\n\t}\n\tcallbacks.add(cb);\n}\n\n/**\n * Adds a listener for the store mount (first listener connected).\n *\n * @returns A cleanup function called when the last listener is removed.\n * @category compat\n */\nexport function onMount(\n\tstore: NanoAtom<any> | NanoComputed<any>,\n\tcb: () => (() => void) | undefined,\n): void {\n\tonStart(store, () => {\n\t\tconst stop = cb();\n\t\tif (typeof stop === \"function\") onStop(store, stop);\n\t});\n}\n\n/**\n * Batches multiple store updates.\n *\n * @category compat\n */\nexport function action<Args extends any[], Return>(\n\t_store: NanoAtom<any> | NanoComputed<any>,\n\t_name: string,\n\tfn: (...args: Args) => Return,\n): (...args: Args) => Return {\n\treturn (...args: Args) => {\n\t\tlet result: any;\n\t\tbatch(() => {\n\t\t\tresult = fn(...args);\n\t\t});\n\t\treturn result as Return;\n\t};\n}\n"],"mappings":"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","names":["node","map"]}
@@ -0,0 +1,57 @@
1
+ // src/base/resilience/_internal.ts
2
+ import { DATA } from "@graphrefly/pure-ts/core";
3
+ function operatorOpts(opts) {
4
+ return { describeKind: "derived", ...opts };
5
+ }
6
+ function clampNonNegative(value) {
7
+ return value < 0 ? 0 : value;
8
+ }
9
+ function msgVal(m) {
10
+ return m[1];
11
+ }
12
+ function coerceDelayNs(raw) {
13
+ if (typeof raw !== "number" || !Number.isFinite(raw)) {
14
+ throw new TypeError("backoff strategy must return a finite number");
15
+ }
16
+ return raw < 0 ? 0 : raw;
17
+ }
18
+ function isNode(x) {
19
+ return x != null && typeof x === "object" && "cache" in x && typeof x.subscribe === "function";
20
+ }
21
+ function resolveReactiveOption(arg, onChange) {
22
+ if (!isNode(arg)) {
23
+ return { current: () => arg, unsub: () => void 0 };
24
+ }
25
+ const node = arg;
26
+ let latest = node.cache;
27
+ const unsub = node.subscribe((msgs) => {
28
+ for (const m of msgs) {
29
+ if (m[0] === DATA) {
30
+ latest = m[1];
31
+ if (onChange) onChange(latest);
32
+ }
33
+ }
34
+ });
35
+ return {
36
+ current: () => latest,
37
+ unsub
38
+ };
39
+ }
40
+ function isThenable(x) {
41
+ return x != null && typeof x.then === "function";
42
+ }
43
+ function isAsyncIterable(x) {
44
+ return x != null && typeof x === "object" && typeof x[Symbol.asyncIterator] === "function";
45
+ }
46
+
47
+ export {
48
+ operatorOpts,
49
+ clampNonNegative,
50
+ msgVal,
51
+ coerceDelayNs,
52
+ isNode,
53
+ resolveReactiveOption,
54
+ isThenable,
55
+ isAsyncIterable
56
+ };
57
+ //# sourceMappingURL=chunk-TSBFTJKM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/base/resilience/_internal.ts"],"sourcesContent":["/**\n * Internal helpers shared by resilience sub-files.\n *\n * Not part of the public surface. The base-layer resilience operators\n * co-located here (`retry.ts`, `status.ts`, `timeout.ts`) import what they\n * need from this file directly; the utils-layer resilience primitives that\n * stayed in `utils/resilience/` (`breaker.ts`, `rate-limiter.ts`,\n * `fallback.ts`) import it top-down via `../../base/resilience/_internal.js`.\n *\n * `NodeOrValue<T>` is the only export re-surfaced publicly — there is no\n * `base/resilience/index.ts`; it ships through `utils/resilience/index.ts`\n * (and `utils/memory/index.ts`). Every resilience primitive that accepts\n * reactive options uses it as the option-arg shape.\n */\n\nimport type { Node, NodeOptions } from \"@graphrefly/pure-ts/core\";\nimport { DATA, type Message } from \"@graphrefly/pure-ts/core\";\n\nexport type ExtraOpts = Omit<NodeOptions, \"describeKind\">;\n\nexport function operatorOpts<T>(opts?: ExtraOpts): NodeOptions<T> {\n\treturn { describeKind: \"derived\", ...opts } as NodeOptions<T>;\n}\n\nexport function clampNonNegative(value: number): number {\n\treturn value < 0 ? 0 : value;\n}\n\nexport function msgVal(m: Message): unknown {\n\treturn m[1];\n}\n\nexport function coerceDelayNs(raw: number): number {\n\tif (typeof raw !== \"number\" || !Number.isFinite(raw)) {\n\t\tthrow new TypeError(\"backoff strategy must return a finite number\");\n\t}\n\treturn raw < 0 ? 0 : raw;\n}\n\nexport function isNode(x: unknown): x is Node {\n\treturn (\n\t\tx != null &&\n\t\ttypeof x === \"object\" &&\n\t\t\"cache\" in x &&\n\t\ttypeof (x as Node).subscribe === \"function\"\n\t);\n}\n\n/**\n * Either a literal value or a reactive Node carrying it. Mirrors\n * {@link FallbackInput}'s precedent for \"options that may be reactive.\"\n *\n * Used by {@link timeout} / {@link retry} / {@link rateLimiter} /\n * {@link circuitBreaker} / {@link budgetGate} to accept reactive option\n * configurations (Tier 6.5 3.2, 2026-04-29). Each primitive subscribes\n * to the option Node via {@link resolveReactiveOption} and rebinds\n * internal state per its locked swap-semantic rule (see each primitive's\n * JSDoc for the rule).\n *\n * @category extra\n */\nexport type NodeOrValue<T> = T | Node<T>;\n\n/**\n * Closure-mirror helper for `NodeOrValue<T>` options\n * (COMPOSITION-GUIDE §28). Returns:\n * - `current()` — read the latest value (cached at construction; updated\n * on each Node DATA emission).\n * - `unsub()` — release the subscription. Static-form arg never\n * subscribes; `unsub` is a no-op there.\n *\n * `onChange` fires on each DATA after the initial value (skips the\n * cache-seed read). Use to rebind primitive-internal state per the\n * primitive's locked swap-semantic rule.\n *\n * @internal\n */\nexport function resolveReactiveOption<T>(\n\targ: NodeOrValue<T>,\n\tonChange?: (next: T) => void,\n): { current: () => T; unsub: () => void } {\n\tif (!isNode(arg)) {\n\t\treturn { current: () => arg, unsub: () => undefined };\n\t}\n\tconst node = arg as Node<T>;\n\tlet latest: T = node.cache as T;\n\tconst unsub = node.subscribe((msgs) => {\n\t\tfor (const m of msgs) {\n\t\t\tif (m[0] === DATA) {\n\t\t\t\tlatest = m[1] as T;\n\t\t\t\tif (onChange) onChange(latest);\n\t\t\t}\n\t\t}\n\t});\n\treturn {\n\t\tcurrent: () => latest,\n\t\tunsub,\n\t};\n}\n\nexport function isThenable(x: unknown): x is PromiseLike<unknown> {\n\treturn x != null && typeof (x as PromiseLike<unknown>).then === \"function\";\n}\n\nexport function isAsyncIterable(x: unknown): x is AsyncIterable<unknown> {\n\treturn (\n\t\tx != null &&\n\t\ttypeof x === \"object\" &&\n\t\ttypeof (x as AsyncIterable<unknown>)[Symbol.asyncIterator] === \"function\"\n\t);\n}\n"],"mappings":";AAgBA,SAAS,YAA0B;AAI5B,SAAS,aAAgB,MAAkC;AACjE,SAAO,EAAE,cAAc,WAAW,GAAG,KAAK;AAC3C;AAEO,SAAS,iBAAiB,OAAuB;AACvD,SAAO,QAAQ,IAAI,IAAI;AACxB;AAEO,SAAS,OAAO,GAAqB;AAC3C,SAAO,EAAE,CAAC;AACX;AAEO,SAAS,cAAc,KAAqB;AAClD,MAAI,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,GAAG,GAAG;AACrD,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACnE;AACA,SAAO,MAAM,IAAI,IAAI;AACtB;AAEO,SAAS,OAAO,GAAuB;AAC7C,SACC,KAAK,QACL,OAAO,MAAM,YACb,WAAW,KACX,OAAQ,EAAW,cAAc;AAEnC;AA+BO,SAAS,sBACf,KACA,UAC0C;AAC1C,MAAI,CAAC,OAAO,GAAG,GAAG;AACjB,WAAO,EAAE,SAAS,MAAM,KAAK,OAAO,MAAM,OAAU;AAAA,EACrD;AACA,QAAM,OAAO;AACb,MAAI,SAAY,KAAK;AACrB,QAAM,QAAQ,KAAK,UAAU,CAAC,SAAS;AACtC,eAAW,KAAK,MAAM;AACrB,UAAI,EAAE,CAAC,MAAM,MAAM;AAClB,iBAAS,EAAE,CAAC;AACZ,YAAI,SAAU,UAAS,MAAM;AAAA,MAC9B;AAAA,IACD;AAAA,EACD,CAAC;AACD,SAAO;AAAA,IACN,SAAS,MAAM;AAAA,IACf;AAAA,EACD;AACD;AAEO,SAAS,WAAW,GAAuC;AACjE,SAAO,KAAK,QAAQ,OAAQ,EAA2B,SAAS;AACjE;AAEO,SAAS,gBAAgB,GAAyC;AACxE,SACC,KAAK,QACL,OAAO,MAAM,YACb,OAAQ,EAA6B,OAAO,aAAa,MAAM;AAEjE;","names":[]}
@@ -0,0 +1,143 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-AZDQPQ3V.js";
4
+
5
+ // src/compat/jotai/index.ts
6
+ var jotai_exports = {};
7
+ __export(jotai_exports, {
8
+ atom: () => atom
9
+ });
10
+ import {
11
+ autoTrackNode,
12
+ DATA,
13
+ ERROR,
14
+ node
15
+ } from "@graphrefly/pure-ts/core";
16
+ function atom(initialOrRead, writeOrOptions, options) {
17
+ if (typeof initialOrRead === "function") {
18
+ const read = initialOrRead;
19
+ if (typeof writeOrOptions === "function") {
20
+ return createDerivedAtom(read, writeOrOptions, options);
21
+ }
22
+ return createDerivedAtom(read, void 0, writeOrOptions);
23
+ }
24
+ return createPrimitiveAtom(initialOrRead, writeOrOptions);
25
+ }
26
+ function pull(n) {
27
+ let val = n.cache;
28
+ let err;
29
+ const unsub = n.subscribe((msgs) => {
30
+ for (const [t, v] of msgs) {
31
+ if (t === DATA) val = v;
32
+ if (t === ERROR) err = v;
33
+ }
34
+ });
35
+ unsub();
36
+ if (err) throw err;
37
+ return val;
38
+ }
39
+ function createPrimitiveAtom(initial, options) {
40
+ const n = node([], {
41
+ initial,
42
+ ...options,
43
+ resubscribable: true,
44
+ resetOnTeardown: true
45
+ });
46
+ return {
47
+ get: () => {
48
+ if (n.status === "sentinel") {
49
+ return pull(n);
50
+ }
51
+ return n.cache;
52
+ },
53
+ // Use `n.emit` (not raw `n.down`) so writes go through the framed
54
+ // emit pipeline: bundle() auto-prefixes DIRTY (diamond-safe wave
55
+ // coordination) and the equals check folds same-value writes to
56
+ // RESOLVED (no spurious subscriber fires).
57
+ set: (value) => n.emit(value),
58
+ update: (fn) => {
59
+ const current = n.status === "sentinel" ? pull(n) : n.cache;
60
+ n.emit(fn(current));
61
+ },
62
+ subscribe: (cb) => {
63
+ let initial2 = true;
64
+ return n.subscribe((msgs) => {
65
+ for (const [t, v] of msgs) {
66
+ if (t === DATA) {
67
+ if (initial2) {
68
+ initial2 = false;
69
+ continue;
70
+ }
71
+ cb(v);
72
+ }
73
+ }
74
+ });
75
+ },
76
+ meta: n.meta,
77
+ _node: n
78
+ };
79
+ }
80
+ function createDerivedAtom(read, write, options) {
81
+ const n = autoTrackNode(
82
+ (track) => read((a) => {
83
+ const dn = a._node;
84
+ if (dn.status === "sentinel") {
85
+ pull(dn);
86
+ }
87
+ return track(dn);
88
+ }),
89
+ {
90
+ ...options,
91
+ resubscribable: true,
92
+ resetOnTeardown: true,
93
+ // Jotai `atom(read)` consumers expect `read(get)` to return a
94
+ // well-typed `T`, not `undefined` from a freshly-discovered branch
95
+ // dep. Opt OUT of Lock 6.C′'s `partial:true` default — fn is
96
+ // gated until every tracked dep delivers DATA so `get(a)` always
97
+ // returns the atom's value.
98
+ partial: false
99
+ }
100
+ );
101
+ const result = {
102
+ get: () => {
103
+ if (n.status === "sentinel") {
104
+ return pull(n);
105
+ }
106
+ return n.cache;
107
+ },
108
+ subscribe: (cb) => {
109
+ let initial = true;
110
+ return n.subscribe((msgs) => {
111
+ for (const [t, v] of msgs) {
112
+ if (t === DATA) {
113
+ if (initial) {
114
+ initial = false;
115
+ continue;
116
+ }
117
+ cb(v);
118
+ }
119
+ }
120
+ });
121
+ },
122
+ meta: n.meta,
123
+ _node: n
124
+ };
125
+ if (write) {
126
+ const getFn = (a) => a.get();
127
+ const setFn = (a, value) => a.set(value);
128
+ const writable = result;
129
+ writable.set = (value) => write(getFn, setFn, value);
130
+ writable.update = (fn) => {
131
+ const current = n.status === "sentinel" ? pull(n) : n.cache;
132
+ return write(getFn, setFn, fn(current));
133
+ };
134
+ return writable;
135
+ }
136
+ return result;
137
+ }
138
+
139
+ export {
140
+ atom,
141
+ jotai_exports
142
+ };
143
+ //# sourceMappingURL=chunk-URQ2CBBF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compat/jotai/index.ts"],"sourcesContent":["import {\n\tautoTrackNode,\n\tDATA,\n\tERROR,\n\ttype Messages,\n\ttype Node,\n\tnode,\n} from \"@graphrefly/pure-ts/core\";\n\n/**\n * Options for creating an atom.\n *\n * @category compat\n */\nexport interface AtomOptions {\n\t/** Optional identifier for the underlying node. */\n\tname?: string;\n\t/** Optional companion meta nodes. */\n\tmeta?: Record<string, unknown>;\n}\n\n/**\n * A read-only Jotai-compatible atom.\n *\n * @category compat\n */\nexport interface ReadableAtom<T> {\n\t/** Returns the current cached value. */\n\tget(): T;\n\t/** Subscribes to value changes. Returns an unsubscribe function. */\n\tsubscribe(callback: (value: T) => void): () => void;\n\t/** Access to companion meta nodes. */\n\treadonly meta: Record<string, Node>;\n\t/** @internal The underlying GraphReFly node. */\n\t_node: Node<T>;\n}\n\n/**\n * A writable Jotai-compatible atom.\n *\n * @category compat\n */\nexport interface WritableAtom<T> extends ReadableAtom<T> {\n\t/** Sets a new value. */\n\tset(value: T): void;\n\t/** Updates the value using a transformation function. */\n\tupdate(fn: (current: T) => T): void;\n}\n\n/** Function type for reading other atoms inside a derived atom. */\nexport type GetFn = <V>(a: ReadableAtom<V>) => V;\n/** Function type for writing to other atoms inside a writable derived atom. */\nexport type SetFn = <V>(a: WritableAtom<V>, value: V) => void;\n\n/** Function that computes the atom's value. */\nexport type ReadFn<T> = (get: GetFn) => T;\n/** Function that handles writes to the atom. */\nexport type WriteFn<T> = (get: GetFn, set: SetFn, value: T) => void;\n\n/**\n * Creates a Jotai-compatible atom built on GraphReFly primitives.\n *\n * Supports three overloads:\n * 1. `atom(initial)` — Writable primitive atom (wraps `state()`).\n * 2. `atom(read)` — Read-only derived atom (wraps `dynamicNode()`).\n * 3. `atom(read, write)` — Writable derived atom.\n *\n * @param initialOrRead - Initial value or a read function.\n * @param writeOrOptions - Write function or options object.\n * @param options - Optional configuration.\n * @returns WritableAtom or ReadableAtom.\n *\n * @example\n * ```ts\n * const count = atom(0);\n * count.set(1);\n * const doubled = atom((get) => get(count)! * 2);\n * ```\n *\n * @category compat\n */\nexport function atom<T>(initial: T, options?: AtomOptions): WritableAtom<T>;\nexport function atom<T>(read: ReadFn<T>, options?: AtomOptions): ReadableAtom<T>;\nexport function atom<T>(read: ReadFn<T>, write: WriteFn<T>, options?: AtomOptions): WritableAtom<T>;\nexport function atom<T>(\n\tinitialOrRead: T | ReadFn<T>,\n\twriteOrOptions?: WriteFn<T> | AtomOptions,\n\toptions?: AtomOptions,\n): ReadableAtom<T> | WritableAtom<T> {\n\tif (typeof initialOrRead === \"function\") {\n\t\tconst read = initialOrRead as ReadFn<T>;\n\t\tif (typeof writeOrOptions === \"function\") {\n\t\t\treturn createDerivedAtom(read, writeOrOptions as WriteFn<T>, options);\n\t\t}\n\t\treturn createDerivedAtom(read, undefined, writeOrOptions as AtomOptions);\n\t}\n\n\treturn createPrimitiveAtom(initialOrRead as T, writeOrOptions as AtomOptions);\n}\n\nfunction pull<T>(n: Node<T>): T {\n\tlet val: T | undefined | null = n.cache;\n\tlet err: any;\n\tconst unsub = n.subscribe((msgs: Messages) => {\n\t\tfor (const [t, v] of msgs) {\n\t\t\tif (t === DATA) val = v as T;\n\t\t\tif (t === ERROR) err = v;\n\t\t}\n\t});\n\tunsub();\n\tif (err) throw err;\n\treturn val as T;\n}\n\nfunction createPrimitiveAtom<T>(initial: T, options?: AtomOptions): WritableAtom<T> {\n\tconst n = node([], {\n\t\tinitial,\n\t\t...options,\n\t\tresubscribable: true,\n\t\tresetOnTeardown: true,\n\t});\n\treturn {\n\t\tget: () => {\n\t\t\tif (n.status === \"sentinel\") {\n\t\t\t\treturn pull(n);\n\t\t\t}\n\t\t\treturn n.cache as T;\n\t\t},\n\t\t// Use `n.emit` (not raw `n.down`) so writes go through the framed\n\t\t// emit pipeline: bundle() auto-prefixes DIRTY (diamond-safe wave\n\t\t// coordination) and the equals check folds same-value writes to\n\t\t// RESOLVED (no spurious subscriber fires).\n\t\tset: (value: T) => n.emit(value),\n\t\tupdate: (fn: (current: T) => T) => {\n\t\t\tconst current = n.status === \"sentinel\" ? pull(n) : (n.cache as T);\n\t\t\tn.emit(fn(current));\n\t\t},\n\t\tsubscribe: (cb: (value: T) => void) => {\n\t\t\t// Skip the initial push-on-subscribe DATA — jotai subscribe fires on changes only.\n\t\t\tlet initial = true;\n\t\t\treturn n.subscribe((msgs: Messages) => {\n\t\t\t\tfor (const [t, v] of msgs) {\n\t\t\t\t\tif (t === DATA) {\n\t\t\t\t\t\tif (initial) {\n\t\t\t\t\t\t\tinitial = false;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(v as T);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tmeta: n.meta,\n\t\t_node: n,\n\t};\n}\n\nfunction createDerivedAtom<T>(\n\tread: ReadFn<T>,\n\twrite?: WriteFn<T>,\n\toptions?: AtomOptions,\n): ReadableAtom<T> | WritableAtom<T> {\n\tconst n = autoTrackNode(\n\t\t(track) =>\n\t\t\tread(<V>(a: ReadableAtom<V>) => {\n\t\t\t\tconst dn = a._node;\n\t\t\t\tif (dn.status === \"sentinel\") {\n\t\t\t\t\tpull(dn);\n\t\t\t\t}\n\t\t\t\treturn track(dn) as V;\n\t\t\t}),\n\t\t{\n\t\t\t...options,\n\t\t\tresubscribable: true,\n\t\t\tresetOnTeardown: true,\n\t\t\t// Jotai `atom(read)` consumers expect `read(get)` to return a\n\t\t\t// well-typed `T`, not `undefined` from a freshly-discovered branch\n\t\t\t// dep. Opt OUT of Lock 6.C′'s `partial:true` default — fn is\n\t\t\t// gated until every tracked dep delivers DATA so `get(a)` always\n\t\t\t// returns the atom's value.\n\t\t\tpartial: false,\n\t\t},\n\t);\n\n\tconst result: ReadableAtom<T> = {\n\t\tget: () => {\n\t\t\tif (n.status === \"sentinel\") {\n\t\t\t\treturn pull(n);\n\t\t\t}\n\t\t\treturn n.cache as T;\n\t\t},\n\t\tsubscribe: (cb: (value: T) => void) => {\n\t\t\t// Skip the initial push-on-subscribe DATA — jotai subscribe fires on changes only.\n\t\t\tlet initial = true;\n\t\t\treturn n.subscribe((msgs: Messages) => {\n\t\t\t\tfor (const [t, v] of msgs) {\n\t\t\t\t\tif (t === DATA) {\n\t\t\t\t\t\tif (initial) {\n\t\t\t\t\t\t\tinitial = false;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(v as T);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tmeta: n.meta,\n\t\t_node: n,\n\t};\n\n\tif (write) {\n\t\tconst getFn: GetFn = <V>(a: ReadableAtom<V>) => a.get();\n\t\tconst setFn: SetFn = <V>(a: WritableAtom<V>, value: V) => a.set(value);\n\n\t\tconst writable = result as WritableAtom<T>;\n\t\twritable.set = (value: T) => write(getFn, setFn, value);\n\t\twritable.update = (fn: (current: T) => T) => {\n\t\t\tconst current = n.status === \"sentinel\" ? pull(n) : (n.cache as T);\n\t\t\treturn write(getFn, setFn, fn(current));\n\t\t};\n\t\treturn writable;\n\t}\n\n\treturn result;\n}\n"],"mappings":"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","names":["initial"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-W2BOPXTI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}