@graphrefly/ts 0.0.0 → 0.0.1

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 (307) hide show
  1. package/README.md +135 -0
  2. package/dist/adapters/index.cjs +105 -66
  3. package/dist/adapters/index.cjs.map +1 -1
  4. package/dist/adapters/index.d.cts +11 -136
  5. package/dist/adapters/index.d.ts +11 -136
  6. package/dist/adapters/index.js +27 -225
  7. package/dist/adapters/index.js.map +1 -1
  8. package/dist/adapters/observe-storage.d.cts +4 -4
  9. package/dist/adapters/observe-storage.d.ts +4 -4
  10. package/dist/adapters/observe-storage.js +1 -0
  11. package/dist/adapters/observe-storage.js.map +1 -1
  12. package/dist/adapters/react.cjs +166 -0
  13. package/dist/adapters/react.cjs.map +1 -0
  14. package/dist/adapters/react.d.cts +31 -0
  15. package/dist/adapters/react.d.ts +31 -0
  16. package/dist/adapters/react.js +51 -0
  17. package/dist/adapters/react.js.map +1 -0
  18. package/dist/adapters/solid.cjs +157 -0
  19. package/dist/adapters/solid.cjs.map +1 -0
  20. package/dist/adapters/solid.d.cts +26 -0
  21. package/dist/adapters/solid.d.ts +26 -0
  22. package/dist/adapters/solid.js +48 -0
  23. package/dist/adapters/solid.js.map +1 -0
  24. package/dist/adapters/svelte.cjs +148 -0
  25. package/dist/adapters/svelte.cjs.map +1 -0
  26. package/dist/adapters/svelte.d.cts +31 -0
  27. package/dist/adapters/svelte.d.ts +31 -0
  28. package/dist/adapters/svelte.js +46 -0
  29. package/dist/adapters/svelte.js.map +1 -0
  30. package/dist/adapters/vue.cjs +155 -0
  31. package/dist/adapters/vue.cjs.map +1 -0
  32. package/dist/adapters/vue.d.cts +26 -0
  33. package/dist/adapters/vue.d.ts +26 -0
  34. package/dist/adapters/vue.js +46 -0
  35. package/dist/adapters/vue.js.map +1 -0
  36. package/dist/agent-runtime-BesGDZcB.d.ts +555 -0
  37. package/dist/agent-runtime-DZTJ3C-p.d.cts +555 -0
  38. package/dist/agentic-memory-BmRCvh0d.d.ts +517 -0
  39. package/dist/agentic-memory-DfuVZ-lY.d.cts +517 -0
  40. package/dist/capability-admission-B0BzqAm5.d.cts +102 -0
  41. package/dist/capability-admission-g0mn9hpq.d.ts +102 -0
  42. package/dist/{chunk-JR4IKCR2.js → chunk-2747WN4Y.js} +5 -5
  43. package/dist/{chunk-2ILL7HQI.js → chunk-3JR3EDB2.js} +17 -17
  44. package/dist/{chunk-2ILL7HQI.js.map → chunk-3JR3EDB2.js.map} +1 -1
  45. package/dist/{chunk-GDL26N2T.js → chunk-3KN7NJDR.js} +2 -2
  46. package/dist/{chunk-DJC4CHLQ.js → chunk-43BKLFZU.js} +9 -9
  47. package/dist/chunk-6XAIOL3X.js +2407 -0
  48. package/dist/chunk-6XAIOL3X.js.map +1 -0
  49. package/dist/{chunk-SCRFRCGR.js → chunk-BSQGE5PS.js} +1 -1
  50. package/dist/{chunk-Y3ZLRGHC.js → chunk-CZNV3VXM.js} +16 -16
  51. package/dist/chunk-DGUM43GV.js +11 -0
  52. package/dist/chunk-DGUM43GV.js.map +1 -0
  53. package/dist/{chunk-JIMUDQN3.js → chunk-FBUU43PM.js} +2 -2
  54. package/dist/chunk-H75VXTGT.js +219 -0
  55. package/dist/chunk-H75VXTGT.js.map +1 -0
  56. package/dist/{chunk-RIIOUTGM.js → chunk-HKK2JD7Z.js} +12 -9
  57. package/dist/chunk-HKK2JD7Z.js.map +1 -0
  58. package/dist/{chunk-D6BG7U6A.js → chunk-IXZBUWSP.js} +3 -3
  59. package/dist/chunk-PC3BTTBE.js +3217 -0
  60. package/dist/chunk-PC3BTTBE.js.map +1 -0
  61. package/dist/chunk-QFY4AFY4.js +879 -0
  62. package/dist/chunk-QFY4AFY4.js.map +1 -0
  63. package/dist/{chunk-DK554R7P.js → chunk-S6HXABGL.js} +2 -1
  64. package/dist/chunk-S6HXABGL.js.map +1 -0
  65. package/dist/{chunk-PKVBHGBM.js → chunk-SS2A464I.js} +7 -7
  66. package/dist/chunk-UT3MHJCW.js +49 -0
  67. package/dist/chunk-UT3MHJCW.js.map +1 -0
  68. package/dist/{chunk-G4M3NHRJ.js → chunk-V7CIJE4B.js} +3 -3
  69. package/dist/{chunk-TEW47IVR.js → chunk-VPEFSDME.js} +2 -2
  70. package/dist/chunk-VTHLCFN4.js +368 -0
  71. package/dist/chunk-VTHLCFN4.js.map +1 -0
  72. package/dist/{chunk-SWTLEQL6.js → chunk-WQIA3GFB.js} +2 -2
  73. package/dist/chunk-WQIA3GFB.js.map +1 -0
  74. package/dist/{chunk-I3IHOHCJ.js → chunk-XKXWK2KP.js} +108 -64
  75. package/dist/chunk-XKXWK2KP.js.map +1 -0
  76. package/dist/{chunk-COHO25CZ.js → chunk-YDSIVHRR.js} +553 -7
  77. package/dist/chunk-YDSIVHRR.js.map +1 -0
  78. package/dist/chunk-YXMZ2N6J.js +1884 -0
  79. package/dist/chunk-YXMZ2N6J.js.map +1 -0
  80. package/dist/composition/index.cjs +102 -57
  81. package/dist/composition/index.cjs.map +1 -1
  82. package/dist/composition/index.d.cts +4 -4
  83. package/dist/composition/index.d.ts +4 -4
  84. package/dist/composition/index.js +6 -5
  85. package/dist/core/index.cjs +102 -57
  86. package/dist/core/index.cjs.map +1 -1
  87. package/dist/core/index.d.cts +2 -2
  88. package/dist/core/index.d.ts +2 -2
  89. package/dist/core/index.js +5 -4
  90. package/dist/cqrs/index.cjs.map +1 -1
  91. package/dist/cqrs/index.d.cts +4 -4
  92. package/dist/cqrs/index.d.ts +4 -4
  93. package/dist/cqrs/index.js +3 -2
  94. package/dist/cqrs/index.js.map +1 -1
  95. package/dist/cqrs/messaging.cjs +312 -0
  96. package/dist/cqrs/messaging.cjs.map +1 -0
  97. package/dist/cqrs/messaging.d.cts +57 -0
  98. package/dist/cqrs/messaging.d.ts +57 -0
  99. package/dist/cqrs/messaging.js +274 -0
  100. package/dist/cqrs/messaging.js.map +1 -0
  101. package/dist/cqrs/work-queue.cjs +329 -0
  102. package/dist/cqrs/work-queue.cjs.map +1 -0
  103. package/dist/cqrs/work-queue.d.cts +90 -0
  104. package/dist/cqrs/work-queue.d.ts +90 -0
  105. package/dist/cqrs/work-queue.js +292 -0
  106. package/dist/cqrs/work-queue.js.map +1 -0
  107. package/dist/data/index.cjs +19 -0
  108. package/dist/data/index.cjs.map +1 -0
  109. package/dist/data/index.d.cts +36 -0
  110. package/dist/data/index.d.ts +36 -0
  111. package/dist/data/index.js +1 -0
  112. package/dist/data/index.js.map +1 -0
  113. package/dist/data-structures/index.cjs +105 -57
  114. package/dist/data-structures/index.cjs.map +1 -1
  115. package/dist/data-structures/index.d.cts +8 -8
  116. package/dist/data-structures/index.d.ts +8 -8
  117. package/dist/data-structures/index.js +7 -6
  118. package/dist/{describe-BZb7AS2y.d.ts → describe-BpyJuWkw.d.ts} +1 -1
  119. package/dist/{describe-Ciu8SUnN.d.cts → describe-DYMw_l1C.d.cts} +1 -1
  120. package/dist/executors/work-queue.cjs +342 -0
  121. package/dist/executors/work-queue.cjs.map +1 -0
  122. package/dist/executors/work-queue.d.cts +90 -0
  123. package/dist/executors/work-queue.d.ts +90 -0
  124. package/dist/executors/work-queue.js +306 -0
  125. package/dist/executors/work-queue.js.map +1 -0
  126. package/dist/graph/index.cjs +112 -58
  127. package/dist/graph/index.cjs.map +1 -1
  128. package/dist/graph/index.d.cts +9 -9
  129. package/dist/graph/index.d.ts +9 -9
  130. package/dist/graph/index.js +18 -17
  131. package/dist/{graph-DfdF9zy4.d.ts → graph-D-1-SQeC.d.ts} +3 -3
  132. package/dist/{graph-s23RbbFO.d.cts → graph-DCEWh4T2.d.cts} +3 -3
  133. package/dist/{index-CAEmLCYF.d.cts → index-72VZC0-E.d.cts} +2 -2
  134. package/dist/{index-SnzZu3x7.d.ts → index-Bmxeu0nK.d.ts} +2 -2
  135. package/dist/index.cjs +112 -58
  136. package/dist/index.cjs.map +1 -1
  137. package/dist/index.d.cts +11 -10
  138. package/dist/index.d.ts +11 -10
  139. package/dist/index.js +118 -113
  140. package/dist/inspection/boundary.cjs +98 -0
  141. package/dist/inspection/boundary.cjs.map +1 -0
  142. package/dist/inspection/boundary.d.cts +61 -0
  143. package/dist/inspection/boundary.d.ts +61 -0
  144. package/dist/inspection/boundary.js +75 -0
  145. package/dist/inspection/boundary.js.map +1 -0
  146. package/dist/{messages-BZqrGGm1.d.ts → messages-CAzUPPJM.d.cts} +10 -5
  147. package/dist/{messages-BZqrGGm1.d.cts → messages-CAzUPPJM.d.ts} +10 -5
  148. package/dist/messaging/index.cjs +744 -613
  149. package/dist/messaging/index.cjs.map +1 -1
  150. package/dist/messaging/index.d.cts +216 -160
  151. package/dist/messaging/index.d.ts +216 -160
  152. package/dist/messaging/index.js +19 -749
  153. package/dist/messaging/index.js.map +1 -1
  154. package/dist/operators/index.cjs +102 -57
  155. package/dist/operators/index.cjs.map +1 -1
  156. package/dist/operators/index.d.cts +6 -6
  157. package/dist/operators/index.d.ts +6 -6
  158. package/dist/operators/index.js +8 -7
  159. package/dist/orchestration/index.cjs +3333 -59
  160. package/dist/orchestration/index.cjs.map +1 -1
  161. package/dist/orchestration/index.d.cts +7 -4
  162. package/dist/orchestration/index.d.ts +7 -4
  163. package/dist/orchestration/index.js +49 -8
  164. package/dist/orchestration/index.js.map +1 -1
  165. package/dist/orchestration/messaging.cjs +314 -0
  166. package/dist/orchestration/messaging.cjs.map +1 -0
  167. package/dist/orchestration/messaging.d.cts +59 -0
  168. package/dist/orchestration/messaging.d.ts +59 -0
  169. package/dist/orchestration/messaging.js +276 -0
  170. package/dist/orchestration/messaging.js.map +1 -0
  171. package/dist/orchestration/work-queue.cjs +262 -0
  172. package/dist/orchestration/work-queue.cjs.map +1 -0
  173. package/dist/orchestration/work-queue.d.cts +85 -0
  174. package/dist/orchestration/work-queue.d.ts +85 -0
  175. package/dist/orchestration/work-queue.js +226 -0
  176. package/dist/orchestration/work-queue.js.map +1 -0
  177. package/dist/patterns/event-flow.cjs +447 -0
  178. package/dist/patterns/event-flow.cjs.map +1 -0
  179. package/dist/patterns/event-flow.d.cts +115 -0
  180. package/dist/patterns/event-flow.d.ts +115 -0
  181. package/dist/patterns/event-flow.js +14 -0
  182. package/dist/patterns/event-flow.js.map +1 -0
  183. package/dist/patterns/index.cjs +423 -18
  184. package/dist/patterns/index.cjs.map +1 -1
  185. package/dist/patterns/index.d.cts +8 -5
  186. package/dist/patterns/index.d.ts +8 -5
  187. package/dist/patterns/index.js +13 -4
  188. package/dist/{reactive-collection-Cb1II1Fi.d.ts → reactive-collection-BAmfrGjd.d.ts} +9 -9
  189. package/dist/{reactive-collection-BxBqtIOE.d.cts → reactive-collection-DNV0-gFi.d.cts} +9 -9
  190. package/dist/{reactive-collection-storage-D-KmjE0J.d.cts → reactive-collection-storage-BNEldDyi.d.cts} +5 -5
  191. package/dist/{reactive-collection-storage-BNiEc-Gd.d.ts → reactive-collection-storage-YZsAQsWK.d.ts} +5 -5
  192. package/dist/{reactive-map-D-g3dv8I.d.cts → reactive-map-DRD1LJ2H.d.cts} +6 -6
  193. package/dist/{reactive-map-BcB4KsQR.d.ts → reactive-map-EsDiCmJk.d.ts} +6 -6
  194. package/dist/render/index.d.cts +3 -3
  195. package/dist/render/index.d.ts +3 -3
  196. package/dist/render/index.js +1 -0
  197. package/dist/{semantic-memory-graph-BYoIlP35.d.cts → semantic-memory-graph-DKuNzuWw.d.cts} +2 -2
  198. package/dist/{semantic-memory-graph-CxyXLms3.d.ts → semantic-memory-graph-uwbwJdhe.d.ts} +2 -2
  199. package/dist/solutions/index.cjs +4478 -2
  200. package/dist/solutions/index.cjs.map +1 -1
  201. package/dist/solutions/index.d.cts +13 -519
  202. package/dist/solutions/index.d.ts +13 -519
  203. package/dist/solutions/index.js +90 -6
  204. package/dist/solutions/reactive-layout/browser/index.cjs +449 -0
  205. package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -0
  206. package/dist/solutions/reactive-layout/browser/index.d.cts +44 -0
  207. package/dist/solutions/reactive-layout/browser/index.d.ts +44 -0
  208. package/dist/solutions/reactive-layout/browser/index.js +69 -0
  209. package/dist/solutions/reactive-layout/browser/index.js.map +1 -0
  210. package/dist/solutions/reactive-layout/index.cjs +4266 -0
  211. package/dist/solutions/reactive-layout/index.cjs.map +1 -0
  212. package/dist/solutions/reactive-layout/index.d.cts +581 -0
  213. package/dist/solutions/reactive-layout/index.d.ts +581 -0
  214. package/dist/solutions/reactive-layout/index.js +86 -0
  215. package/dist/solutions/reactive-layout/index.js.map +1 -0
  216. package/dist/solutions/reactive-layout/node-canvas/index.cjs +545 -0
  217. package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -0
  218. package/dist/solutions/reactive-layout/node-canvas/index.d.cts +54 -0
  219. package/dist/solutions/reactive-layout/node-canvas/index.d.ts +54 -0
  220. package/dist/solutions/reactive-layout/node-canvas/index.js +131 -0
  221. package/dist/solutions/reactive-layout/node-canvas/index.js.map +1 -0
  222. package/dist/solutions/reactive-layout/react-native/index.cjs +494 -0
  223. package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -0
  224. package/dist/solutions/reactive-layout/react-native/index.d.cts +51 -0
  225. package/dist/solutions/reactive-layout/react-native/index.d.ts +51 -0
  226. package/dist/solutions/reactive-layout/react-native/index.js +77 -0
  227. package/dist/solutions/reactive-layout/react-native/index.js.map +1 -0
  228. package/dist/solutions/reactive-layout/skia/index.cjs +547 -0
  229. package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -0
  230. package/dist/solutions/reactive-layout/skia/index.d.cts +64 -0
  231. package/dist/solutions/reactive-layout/skia/index.d.ts +64 -0
  232. package/dist/solutions/reactive-layout/skia/index.js +70 -0
  233. package/dist/solutions/reactive-layout/skia/index.js.map +1 -0
  234. package/dist/solutions/work-item/actions.cjs +2164 -0
  235. package/dist/solutions/work-item/actions.cjs.map +1 -0
  236. package/dist/solutions/work-item/actions.d.cts +201 -0
  237. package/dist/solutions/work-item/actions.d.ts +201 -0
  238. package/dist/solutions/work-item/actions.js +1454 -0
  239. package/dist/solutions/work-item/actions.js.map +1 -0
  240. package/dist/solutions/work-item/scheduling.cjs +2454 -0
  241. package/dist/solutions/work-item/scheduling.cjs.map +1 -0
  242. package/dist/solutions/work-item/scheduling.d.cts +433 -0
  243. package/dist/solutions/work-item/scheduling.d.ts +433 -0
  244. package/dist/solutions/work-item/scheduling.js +32 -0
  245. package/dist/solutions/work-item/scheduling.js.map +1 -0
  246. package/dist/solutions/work-item/work-queue.cjs +306 -0
  247. package/dist/solutions/work-item/work-queue.cjs.map +1 -0
  248. package/dist/solutions/work-item/work-queue.d.cts +71 -0
  249. package/dist/solutions/work-item/work-queue.d.ts +71 -0
  250. package/dist/solutions/work-item/work-queue.js +270 -0
  251. package/dist/solutions/work-item/work-queue.js.map +1 -0
  252. package/dist/sources/browser.cjs +169 -57
  253. package/dist/sources/browser.cjs.map +1 -1
  254. package/dist/sources/browser.d.cts +33 -6
  255. package/dist/sources/browser.d.ts +33 -6
  256. package/dist/sources/browser.js +73 -6
  257. package/dist/sources/browser.js.map +1 -1
  258. package/dist/sources/index.cjs +102 -57
  259. package/dist/sources/index.cjs.map +1 -1
  260. package/dist/sources/index.d.cts +5 -5
  261. package/dist/sources/index.d.ts +5 -5
  262. package/dist/sources/index.js +6 -5
  263. package/dist/sources/node.cjs.map +1 -1
  264. package/dist/sources/node.d.cts +4 -4
  265. package/dist/sources/node.d.ts +4 -4
  266. package/dist/sources/node.js +2 -1
  267. package/dist/sources/node.js.map +1 -1
  268. package/dist/storage/browser.js +1 -0
  269. package/dist/storage/browser.js.map +1 -1
  270. package/dist/storage/index.d.cts +5 -5
  271. package/dist/storage/index.d.ts +5 -5
  272. package/dist/storage/index.js +5 -4
  273. package/dist/storage/node.js +1 -0
  274. package/dist/storage/node.js.map +1 -1
  275. package/dist/store-C-joM4gh.d.ts +123 -0
  276. package/dist/store-CNJwmT-h.d.cts +123 -0
  277. package/dist/testing/index.cjs +1 -0
  278. package/dist/testing/index.cjs.map +1 -1
  279. package/dist/testing/index.d.cts +1 -1
  280. package/dist/testing/index.d.ts +1 -1
  281. package/dist/testing/index.js +3 -2
  282. package/dist/{types-h12mNYbq.d.ts → types-BsJvElYZ.d.ts} +31 -31
  283. package/dist/{types-bNMSWKqF.d.cts → types-CcPIn7sy.d.cts} +31 -31
  284. package/dist/work-item-runtime-C3M79vE9.d.ts +228 -0
  285. package/dist/work-item-runtime-qaVgsL0T.d.cts +228 -0
  286. package/dist/work-queue/index.cjs +1132 -0
  287. package/dist/work-queue/index.cjs.map +1 -0
  288. package/dist/work-queue/index.d.cts +369 -0
  289. package/dist/work-queue/index.d.ts +369 -0
  290. package/dist/work-queue/index.js +1078 -0
  291. package/dist/work-queue/index.js.map +1 -0
  292. package/package.json +266 -2
  293. package/dist/chunk-COHO25CZ.js.map +0 -1
  294. package/dist/chunk-DK554R7P.js.map +0 -1
  295. package/dist/chunk-I3IHOHCJ.js.map +0 -1
  296. package/dist/chunk-RIIOUTGM.js.map +0 -1
  297. package/dist/chunk-SWTLEQL6.js.map +0 -1
  298. /package/dist/{chunk-JR4IKCR2.js.map → chunk-2747WN4Y.js.map} +0 -0
  299. /package/dist/{chunk-GDL26N2T.js.map → chunk-3KN7NJDR.js.map} +0 -0
  300. /package/dist/{chunk-DJC4CHLQ.js.map → chunk-43BKLFZU.js.map} +0 -0
  301. /package/dist/{chunk-SCRFRCGR.js.map → chunk-BSQGE5PS.js.map} +0 -0
  302. /package/dist/{chunk-Y3ZLRGHC.js.map → chunk-CZNV3VXM.js.map} +0 -0
  303. /package/dist/{chunk-JIMUDQN3.js.map → chunk-FBUU43PM.js.map} +0 -0
  304. /package/dist/{chunk-D6BG7U6A.js.map → chunk-IXZBUWSP.js.map} +0 -0
  305. /package/dist/{chunk-PKVBHGBM.js.map → chunk-SS2A464I.js.map} +0 -0
  306. /package/dist/{chunk-G4M3NHRJ.js.map → chunk-V7CIJE4B.js.map} +0 -0
  307. /package/dist/{chunk-TEW47IVR.js.map → chunk-VPEFSDME.js.map} +0 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Passive DATA-level result vocabulary (D184).
3
+ *
4
+ * These shapes are ordinary payload facts. They are not protocol ERROR messages and
5
+ * carry no wave terminal or lifecycle semantics.
6
+ */
7
+ interface DataIssue {
8
+ readonly kind: "issue";
9
+ readonly code: string;
10
+ readonly message: string;
11
+ readonly severity?: "info" | "warning" | "error";
12
+ readonly source?: string;
13
+ readonly subjectId?: string;
14
+ readonly correlationId?: string;
15
+ readonly causationId?: string;
16
+ readonly path?: readonly (string | number)[];
17
+ readonly refs?: readonly string[];
18
+ readonly retryable?: boolean;
19
+ readonly details?: unknown;
20
+ readonly metadata?: Record<string, unknown>;
21
+ }
22
+ interface DataOk<T> {
23
+ readonly kind: "ok";
24
+ readonly value: T;
25
+ readonly issues?: readonly DataIssue[];
26
+ readonly metadata?: Record<string, unknown>;
27
+ }
28
+ interface DataError<E extends DataIssue = DataIssue> {
29
+ readonly kind: "error";
30
+ readonly error: E;
31
+ readonly issues?: readonly DataIssue[];
32
+ readonly metadata?: Record<string, unknown>;
33
+ }
34
+ type DataResult<T, E extends DataIssue = DataIssue> = DataOk<T> | DataError<E>;
35
+
36
+ export type { DataError, DataIssue, DataOk, DataResult };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Passive DATA-level result vocabulary (D184).
3
+ *
4
+ * These shapes are ordinary payload facts. They are not protocol ERROR messages and
5
+ * carry no wave terminal or lifecycle semantics.
6
+ */
7
+ interface DataIssue {
8
+ readonly kind: "issue";
9
+ readonly code: string;
10
+ readonly message: string;
11
+ readonly severity?: "info" | "warning" | "error";
12
+ readonly source?: string;
13
+ readonly subjectId?: string;
14
+ readonly correlationId?: string;
15
+ readonly causationId?: string;
16
+ readonly path?: readonly (string | number)[];
17
+ readonly refs?: readonly string[];
18
+ readonly retryable?: boolean;
19
+ readonly details?: unknown;
20
+ readonly metadata?: Record<string, unknown>;
21
+ }
22
+ interface DataOk<T> {
23
+ readonly kind: "ok";
24
+ readonly value: T;
25
+ readonly issues?: readonly DataIssue[];
26
+ readonly metadata?: Record<string, unknown>;
27
+ }
28
+ interface DataError<E extends DataIssue = DataIssue> {
29
+ readonly kind: "error";
30
+ readonly error: E;
31
+ readonly issues?: readonly DataIssue[];
32
+ readonly metadata?: Record<string, unknown>;
33
+ }
34
+ type DataResult<T, E extends DataIssue = DataIssue> = DataOk<T> | DataError<E>;
35
+
36
+ export type { DataError, DataIssue, DataOk, DataResult };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -52,6 +52,7 @@ var TIER = {
52
52
  START: TIER_START,
53
53
  PAUSE: TIER_CONTROL,
54
54
  RESUME: TIER_CONTROL,
55
+ PULL: TIER_CONTROL,
55
56
  DIRTY: TIER_NOTIFICATION,
56
57
  DATA: TIER_VALUE,
57
58
  RESOLVED: TIER_VALUE,
@@ -908,6 +909,17 @@ function releaseRuntimeOfNode(n) {
908
909
  function terminalView(t) {
909
910
  return t === void 0 ? false : t;
910
911
  }
912
+ function normalizePullDemand(demand) {
913
+ if (typeof demand !== "object" || demand === null || Array.isArray(demand)) {
914
+ throw new Error("ctx.up: PULL requires { pullId, params? } demand payload (D269)");
915
+ }
916
+ const pullId = demand.pullId;
917
+ if (typeof pullId !== "string" && typeof pullId !== "symbol") {
918
+ throw new Error("ctx.up: PULL demand requires a string or symbol pullId (D269)");
919
+ }
920
+ const params = demand.params;
921
+ return params === void 0 ? { pullId } : { pullId, params };
922
+ }
911
923
  function validateDownPayloads(msgs) {
912
924
  for (const m of msgs) {
913
925
  if (m[0] === "DATA" && m[1] === void 0) {
@@ -951,7 +963,7 @@ var Node = class {
951
963
  const pull = opts.pullId !== void 0;
952
964
  if (pull && pausable === false)
953
965
  throw new Error(
954
- "node: pullId is incompatible with pausable:false \u2014 a pull node is demanded via RESUME, which pausable:false ignores (R-pull / R-pause-modes / D55,D59)"
966
+ "node: pullId is incompatible with pausable:false \u2014 a pull node uses the pausable delivery-content axis (R-pull / R-pause-modes / D55,D269)"
955
967
  );
956
968
  let handle;
957
969
  if (handleOrFn === null) handle = null;
@@ -974,7 +986,6 @@ var Node = class {
974
986
  value.status = "settled";
975
987
  }
976
988
  const pauseLockset = /* @__PURE__ */ new Set();
977
- if (pull) pauseLockset.add(pullLock);
978
989
  this._core = core ?? new NodeCore();
979
990
  const created = this._core.createSlot(
980
991
  {
@@ -1015,7 +1026,9 @@ var Node = class {
1015
1026
  pauseLockset,
1016
1027
  pausedDepWaveOccurred: false,
1017
1028
  pauseBuffer: [],
1018
- demandOwed: false,
1029
+ demandOwed: void 0,
1030
+ activePull: void 0,
1031
+ pullDirtyOwed: false,
1019
1032
  inDeliverDemand: false
1020
1033
  },
1021
1034
  privateState: { value: SENTINEL, persist: false },
@@ -1072,10 +1085,11 @@ var Node = class {
1072
1085
  this._wave.batchDirtyOwed = false;
1073
1086
  this._control.pauseBuffer = [];
1074
1087
  this._control.pausedDepWaveOccurred = false;
1075
- this._control.demandOwed = false;
1088
+ this._control.demandOwed = void 0;
1089
+ this._control.activePull = void 0;
1090
+ this._control.pullDirtyOwed = false;
1076
1091
  this._control.inDeliverDemand = false;
1077
1092
  this._control.pauseLockset.clear();
1078
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1079
1093
  this._privateState.value = state.ctxState.value;
1080
1094
  this._privateState.persist = state.ctxState.persist;
1081
1095
  if (state.version === false) {
@@ -1114,17 +1128,16 @@ var Node = class {
1114
1128
  subscriberCountReaders.set(this, () => this._subscriberCount());
1115
1129
  activationReaders.set(this, () => this._lifecycle.activated);
1116
1130
  }
1117
- /** R-pull (D55): true while a pull node is quiet (holds its own pullId/demand lock). */
1131
+ /** R-pull (D55/D272): true while a pull node is not serving a PULL demand pulse. */
1118
1132
  _isPullQuiet() {
1119
- return this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock);
1133
+ return this._slot.pull && this._control.activePull === void 0;
1120
1134
  }
1121
1135
  /**
1122
- * R-pull (D55/D59): this pull node's pullId (pure data, like {@link cache}/{@link handle} — never
1123
- * triggers computation). A consumer demands one delivery by cone-routing a RESUME of it (no node
1124
- * reference): `ctx.up([["RESUME", pullId]])` (immediate; loops back → D37 for a self-read dep) or
1125
- * `ctx.upNext([["RESUME", pullId]])` (boundary-deferred self-demand, R-up-routing/R-rewire-deferred).
1126
- * Undefined for a non-pull node. The author writes the pullId verbatim, so this getter is mainly
1127
- * for inspection/describe; routing matches by the pullId value carried in the RESUME, by identity.
1136
+ * R-pull (D269/D272): this pull node's pullId (pure data, like {@link cache}/{@link handle} —
1137
+ * never triggers computation). A consumer demands one delivery by cone-routing PULL of it (no
1138
+ * node reference): `ctx.up([["PULL", { pullId }]])` (immediate; loops back → D37 for a self-read
1139
+ * dep) or `ctx.upNext([["PULL", { pullId }]])` (boundary-deferred self-demand). Undefined for a
1140
+ * non-pull node. The author writes the pullId verbatim; routing matches by identity.
1128
1141
  */
1129
1142
  get pullId() {
1130
1143
  return this._slot.pullLock;
@@ -1231,10 +1244,10 @@ var Node = class {
1231
1244
  });
1232
1245
  }
1233
1246
  /**
1234
- * Enqueue a deferred up-going control wave (R-up-routing / R-pull / D59): at the committed wave
1247
+ * Enqueue a deferred up-going control/demand wave (R-up-routing / R-pull / D269): at the committed wave
1235
1248
  * boundary, route `msgs` up from THIS node (broadcast, or up the single `towardDep` edge). The
1236
- * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[RESUME,
1237
- * pullId]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1249
+ * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[PULL,
1250
+ * { pullId }]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1238
1251
  * the pull node's delivery loops back as a FRESH wave rather than re-entering the consumer (D37 /
1239
1252
  * R-reentrancy). Rides the same R-rewire-deferred (D47) drain as ctx.rewireNext.
1240
1253
  */
@@ -1449,7 +1462,6 @@ var Node = class {
1449
1462
  this._lifecycle.activated = true;
1450
1463
  const seedRestoredDeps = this._restoredActivationPending;
1451
1464
  this._restoredActivationPending = false;
1452
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1453
1465
  this._dep.unsubs = new Array(this._slot.deps.length);
1454
1466
  this._dep.idxBoxes = new Array(this._slot.deps.length);
1455
1467
  for (const dep of this._slot.deps)
@@ -1521,7 +1533,9 @@ var Node = class {
1521
1533
  this._control.pauseLockset.clear();
1522
1534
  this._control.pauseBuffer = [];
1523
1535
  this._control.pausedDepWaveOccurred = false;
1524
- this._control.demandOwed = false;
1536
+ this._control.demandOwed = void 0;
1537
+ this._control.activePull = void 0;
1538
+ this._control.pullDirtyOwed = false;
1525
1539
  this._value.replayRing = [];
1526
1540
  if (!this._privateState.persist) this._privateState.value = SENTINEL;
1527
1541
  }
@@ -1533,8 +1547,7 @@ var Node = class {
1533
1547
  return this._lifecycle.subscribers.size;
1534
1548
  }
1535
1549
  _isRuntimeQuiescentForRelease() {
1536
- const allowedPullQuietLock = this._slot.pull && this._control.pauseLockset.size === 1 && this._control.pauseLockset.has(this._slot.pullLock);
1537
- return !this._released && this._value.status !== "dirty" && this._value.status !== "pending" && this._wave.pending === 0 && !this._wave.insideRunWave && !this._wave.inDepMutation && !this._wave.rewireRunPending && !this._wave.batchDirtyOwed && this._dep.dirty.every((dirty) => !dirty) && this._control.pauseBuffer.length === 0 && !this._control.pausedDepWaveOccurred && !this._control.demandOwed && !this._control.inDeliverDemand && (this._control.pauseLockset.size === 0 || allowedPullQuietLock);
1550
+ return !this._released && this._value.status !== "dirty" && this._value.status !== "pending" && this._wave.pending === 0 && !this._wave.insideRunWave && !this._wave.inDepMutation && !this._wave.rewireRunPending && !this._wave.batchDirtyOwed && this._dep.dirty.every((dirty) => !dirty) && this._control.pauseBuffer.length === 0 && !this._control.pausedDepWaveOccurred && this._control.demandOwed === void 0 && this._control.activePull === void 0 && !this._control.inDeliverDemand && this._control.pauseLockset.size === 0;
1538
1551
  }
1539
1552
  _releaseRuntime() {
1540
1553
  if (this._released) return;
@@ -1590,7 +1603,9 @@ var Node = class {
1590
1603
  this._control.pauseLockset.clear();
1591
1604
  this._control.pauseBuffer = [];
1592
1605
  this._control.pausedDepWaveOccurred = false;
1593
- this._control.demandOwed = false;
1606
+ this._control.demandOwed = void 0;
1607
+ this._control.activePull = void 0;
1608
+ this._control.pullDirtyOwed = false;
1594
1609
  this._restoredActivationPending = false;
1595
1610
  checkpointReaders.delete(this);
1596
1611
  restoreWriters.delete(this);
@@ -1772,7 +1787,7 @@ var Node = class {
1772
1787
  this._wave.rewireRunPending = true;
1773
1788
  return;
1774
1789
  }
1775
- if (this._slot.pausable === true && this._isPaused()) {
1790
+ if (this._slot.pausable === true && (this._isPaused() || this._isPullQuiet())) {
1776
1791
  this._control.pausedDepWaveOccurred = true;
1777
1792
  return;
1778
1793
  }
@@ -1912,10 +1927,11 @@ var Node = class {
1912
1927
  unsubscribeDep: (dep, fn) => this._requestRewireNext({ kind: "remove", dep, fn }),
1913
1928
  replaceDeps: (deps, fn) => this._requestRewireNext({ kind: "set", deps, fn })
1914
1929
  },
1915
- // R-up-routing / R-pull (D59): deferred up — route a control wave (e.g. a RESUME pull
1916
- // DEMAND) up the declared cone at the committed boundary. The SELF-demand path: an
1930
+ // R-up-routing / R-pull (D269): deferred up — route a control/demand wave (e.g. PULL)
1931
+ // up the declared cone at the committed boundary. The SELF-demand path: an
1917
1932
  // immediate ctx.up whose delivery loops back re-enters this fn (D37 / R-reentrancy).
1918
1933
  upNext: (msgs, towardDep) => this._requestUpNext(msgs, towardDep),
1934
+ ...this._control.activePull === void 0 ? {} : { pull: this._control.activePull },
1919
1935
  [CTX_DEP_CACHE]: { latest: snapshot?.latest ?? this._dep.prev },
1920
1936
  [CTX_NODE_BINDING]: {
1921
1937
  dispatcher: this._slot.dispatcher,
@@ -1930,6 +1946,11 @@ var Node = class {
1930
1946
  _refreshCtx(ctx) {
1931
1947
  ctx.waveData = this._dep.waveData;
1932
1948
  ctx.terminal = this._dep.terminalInput.map(terminalView);
1949
+ if (this._control.activePull === void 0) {
1950
+ delete ctx.pull;
1951
+ } else {
1952
+ ctx.pull = this._control.activePull;
1953
+ }
1933
1954
  ctx[CTX_DEP_CACHE] = { latest: this._dep.prev };
1934
1955
  }
1935
1956
  _makeState() {
@@ -2022,7 +2043,7 @@ var Node = class {
2022
2043
  plannedVersions[i] = plannedVersion;
2023
2044
  }
2024
2045
  }
2025
- if (hasTier3 && !this._wave.insideRunWave && !this._wave.emittedDirtyThisWave) {
2046
+ if (hasTier3 && (!this._wave.insideRunWave || this._control.pullDirtyOwed) && !this._wave.emittedDirtyThisWave) {
2026
2047
  this._wave.emittedDirtyThisWave = true;
2027
2048
  this._value.status = "dirty";
2028
2049
  this._emitToSubs(["DIRTY"], { wave: deliveryWave, last: false });
@@ -2102,13 +2123,18 @@ var Node = class {
2102
2123
  if (m[0] === "PAUSE") {
2103
2124
  this._pauseAcquire(m[1]);
2104
2125
  } else if (m[0] === "RESUME") {
2105
- if (this._slot.pull && m[1] === this._slot.pullLock) {
2106
- if (!this._markDemandRouted(m[1], routeState)) this._onDemand();
2107
- } else if (this._control.pauseLockset.has(m[1])) {
2126
+ if (this._control.pauseLockset.has(m[1])) {
2108
2127
  this._pauseRelease(m[1]);
2109
2128
  } else {
2110
2129
  this._forwardUp(m, towardDep, routeState);
2111
2130
  }
2131
+ } else if (m[0] === "PULL") {
2132
+ const demand = normalizePullDemand(m[1]);
2133
+ if (this._slot.pull && demand.pullId === this._slot.pullLock) {
2134
+ if (!this._markDemandRouted(demand.pullId, routeState)) this._onDemand(demand);
2135
+ } else {
2136
+ this._forwardUp(["PULL", demand], towardDep, routeState);
2137
+ }
2112
2138
  } else if (this._slot.deps.length === 0) {
2113
2139
  if (m[0] === "INVALIDATE") this._down([["INVALIDATE"]]);
2114
2140
  } else {
@@ -2130,7 +2156,7 @@ var Node = class {
2130
2156
  * Forward one up-going control message toward deps (R-up-routing): up the single declared edge
2131
2157
  * `towardDep` (directed — prunes other branches; only meaningful on the issuer's FIRST hop) or
2132
2158
  * broadcast up ALL deps. A depless source has no deps → the message DROPS here (the terminus —
2133
- * e.g. a cone-routed RESUME whose pullId no node up this cone holds, R-up-at-source). Recursive
2159
+ * e.g. a cone-routed PULL whose pullId no node up this cone holds, R-up-at-source). Recursive
2134
2160
  * forwarding carries the same per-wave route state and no `towardDep` → broadcast beyond the
2135
2161
  * first hop.
2136
2162
  */
@@ -2149,9 +2175,7 @@ var Node = class {
2149
2175
  }
2150
2176
  _hasBoundaryPauseLock() {
2151
2177
  if (this._slot.pausable === false) return false;
2152
- let locks = this._control.pauseLockset.size;
2153
- if (this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock)) locks--;
2154
- return locks > 0;
2178
+ return this._control.pauseLockset.size > 0;
2155
2179
  }
2156
2180
  _isAsyncPool() {
2157
2181
  return this._slot.handle !== null && this._slot.dispatcher.poolKind(this._slot.handle.poolId) === "async";
@@ -2162,17 +2186,19 @@ var Node = class {
2162
2186
  _pauseRelease(lockId) {
2163
2187
  if (!this._control.pauseLockset.has(lockId)) return;
2164
2188
  this._control.pauseLockset.delete(lockId);
2165
- if (this._slot.pull && this._control.demandOwed) this._fireOwedDemandIfReady();
2189
+ if (this._slot.pull && this._control.demandOwed !== void 0) this._fireOwedDemandIfReady();
2166
2190
  if (this._hasBoundaryPauseLock()) return;
2167
2191
  scheduleBoundaryDrain(this._core);
2168
- if (this._control.pauseLockset.size > 0) return;
2192
+ if (this._slot.pull) return;
2169
2193
  this._onResume();
2170
2194
  }
2171
2195
  _onResume() {
2172
2196
  if (this._value.terminal !== void 0) {
2173
2197
  this._control.pauseBuffer = [];
2174
2198
  this._control.pausedDepWaveOccurred = false;
2175
- this._control.demandOwed = false;
2199
+ this._control.demandOwed = void 0;
2200
+ this._control.activePull = void 0;
2201
+ this._control.pullDirtyOwed = false;
2176
2202
  return;
2177
2203
  }
2178
2204
  if (this._control.pauseBuffer.length > 0) {
@@ -2186,41 +2212,38 @@ var Node = class {
2186
2212
  }
2187
2213
  }
2188
2214
  /**
2189
- * R-pull (D59): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2215
+ * R-pull (D269): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2190
2216
  * and no OTHER (non-pullId) lock holds it paused. The gate that decides fire-now vs OWE.
2191
2217
  */
2192
2218
  _canFireDemand() {
2193
2219
  if (this._value.terminal !== void 0 || this._wave.pending > 0) return false;
2194
- const own = this._control.pauseLockset.has(this._slot.pullLock) ? 1 : 0;
2195
- return this._control.pauseLockset.size <= own;
2220
+ return this._control.pauseLockset.size === 0;
2196
2221
  }
2197
2222
  /**
2198
- * R-pull (D59): deliver ONE demand pulse — release the pullId so the demand wave RELAYS (not
2199
- * absorbed), fire it, then RE-QUIET (1:1). The pullId re-add + the re-entrancy flag are in a
2200
- * `finally` so a throwing pull fn (graph-less node, no D30 catch) cannot leave the node
2201
- * permanently non-quiet (the wedge-fix silently disabled) — QA-found robustness fix.
2223
+ * R-pull (D269/D272): deliver ONE demand pulse — install activePull so the demand wave may
2224
+ * emit, fire it, then clear activePull so the node is quiet again (1:1).
2202
2225
  */
2203
- _deliverPullDemand() {
2204
- this._control.demandOwed = false;
2226
+ _deliverPullDemand(demand) {
2227
+ this._control.demandOwed = void 0;
2228
+ this._control.activePull = demand;
2205
2229
  this._control.inDeliverDemand = true;
2206
- this._control.pauseLockset.delete(this._slot.pullLock);
2207
2230
  try {
2208
2231
  this._firePullDemand();
2209
2232
  } finally {
2210
- this._control.pauseLockset.add(this._slot.pullLock);
2233
+ this._control.activePull = void 0;
2211
2234
  this._control.inDeliverDemand = false;
2212
2235
  }
2213
2236
  }
2214
2237
  /**
2215
- * R-pull (D59): a cone-routed RESUME of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2238
+ * R-pull (D269): a cone-routed PULL of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2216
2239
  * Fire immediately if able; else OWE it — pin-5 (a dep DIRTY in flight, _pending>0) or F4/F5 (an
2217
2240
  * external PAUSE lock co-holds the node) — and fire when the node next becomes able. A demand
2218
2241
  * arriving WHILE a delivery is in flight (synchronous re-entry) is DROPPED (1:1, QA guard).
2219
2242
  */
2220
- _onDemand() {
2243
+ _onDemand(demand) {
2221
2244
  if (this._control.inDeliverDemand) return;
2222
- if (this._canFireDemand()) this._deliverPullDemand();
2223
- else this._control.demandOwed = true;
2245
+ if (this._canFireDemand()) this._deliverPullDemand(demand);
2246
+ else this._control.demandOwed = demand;
2224
2247
  }
2225
2248
  /**
2226
2249
  * R-pull (D55): service ONE demand. Delivery content = the orthogonal pausable mode:
@@ -2233,33 +2256,53 @@ var Node = class {
2233
2256
  * `_markDirty` relays the leading DIRTY (not absorbed).
2234
2257
  */
2235
2258
  _firePullDemand() {
2259
+ let drainedBuffer = false;
2236
2260
  if (this._control.pauseBuffer.length > 0) {
2237
2261
  const buf = this._control.pauseBuffer;
2238
2262
  this._control.pauseBuffer = [];
2239
2263
  for (const wave of buf) this._down(wave);
2264
+ drainedBuffer = true;
2240
2265
  }
2266
+ if (drainedBuffer) return;
2241
2267
  if (this._control.pausedDepWaveOccurred) {
2242
2268
  const gated = this._slot.handle !== null && !this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled());
2243
2269
  if (this._wave.pending > 0 || gated) return;
2244
2270
  this._control.pausedDepWaveOccurred = false;
2245
- this._markDirty();
2246
- this._tryRun();
2271
+ this._wave.emittedDirtyThisWave = false;
2272
+ this._control.pullDirtyOwed = true;
2273
+ try {
2274
+ this._tryRun();
2275
+ } finally {
2276
+ this._control.pullDirtyOwed = false;
2277
+ }
2278
+ return;
2279
+ }
2280
+ if (this._slot.handle !== null) {
2281
+ if (!this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled())) return;
2282
+ this._wave.emittedDirtyThisWave = false;
2283
+ this._control.pullDirtyOwed = true;
2284
+ try {
2285
+ this._runWave();
2286
+ } finally {
2287
+ this._control.pullDirtyOwed = false;
2288
+ }
2247
2289
  }
2248
2290
  }
2249
2291
  /**
2250
- * R-pull (D55/D59): fire a demand that was OWED (deferred at demand time) once the node becomes
2292
+ * R-pull (D269): fire a demand that was OWED (deferred at demand time) once the node becomes
2251
2293
  * able — called from the dep-settle arms (DATA/RESOLVED/INVALIDATE/terminal drain _pending, pin-5
2252
2294
  * + B1/F6) and from `_pauseRelease` (an external PAUSE lock releases, F4/F5).
2253
2295
  */
2254
2296
  _fireOwedDemandIfReady() {
2255
2297
  if (this._control.inDeliverDemand) return;
2256
- if (this._slot.pull && this._control.demandOwed && this._canFireDemand())
2257
- this._deliverPullDemand();
2298
+ if (this._slot.pull && this._control.demandOwed !== void 0 && this._canFireDemand()) {
2299
+ this._deliverPullDemand(this._control.demandOwed);
2300
+ }
2258
2301
  }
2259
2302
  /** Should an outgoing settle slice be deferred into the pause buffer? */
2260
2303
  _shouldBufferOnPause() {
2261
2304
  if (this._slot.pausable === false) return false;
2262
- if (!this._isPaused()) return false;
2305
+ if (!this._isPaused() && !this._isPullQuiet()) return false;
2263
2306
  if (this._slot.pausable === "resumeAll") return true;
2264
2307
  if (!this._wave.insideRunWave && this._isAsyncPool() && this._slot.deps.length > 0) return true;
2265
2308
  return false;
@@ -2299,7 +2342,9 @@ var Node = class {
2299
2342
  this._control.pauseLockset.clear();
2300
2343
  this._control.pauseBuffer = [];
2301
2344
  this._control.pausedDepWaveOccurred = false;
2302
- this._control.demandOwed = false;
2345
+ this._control.demandOwed = void 0;
2346
+ this._control.activePull = void 0;
2347
+ this._control.pullDirtyOwed = false;
2303
2348
  this._value.replayRing = [];
2304
2349
  const isCompute = this._slot.handle !== null || this._slot.deps.length > 0;
2305
2350
  if (isCompute) {
@@ -2478,7 +2523,10 @@ function collectionCore(backend, factory, opts = {}, restore) {
2478
2523
  name: name ? `${name}.delta` : void 0
2479
2524
  });
2480
2525
  const pullId = /* @__PURE__ */ Symbol(name ? `${name}.snapshot` : `${factory}.snapshot`);
2526
+ let deliveredVersion = backend.version;
2481
2527
  const snapFn = (ctx) => {
2528
+ if (ctx.pull !== void 0 && backend.version === deliveredVersion) return;
2529
+ deliveredVersion = backend.version;
2482
2530
  ctx.down([["DATA", backend.snapshot()]]);
2483
2531
  };
2484
2532
  const snapshot = graph ? graph.node([delta], snapFn, {