@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,195 @@
1
+ import { Node } from '@graphrefly/pure-ts/core';
2
+ import { Graph } from '@graphrefly/pure-ts/graph';
3
+
4
+ /**
5
+ * Reactive text layout engine (roadmap §7.1 — Pretext parity).
6
+ *
7
+ * Pure-arithmetic text measurement and line breaking without DOM thrashing.
8
+ * Inspired by [Pretext](https://github.com/chenglou/pretext), rebuilt as a
9
+ * GraphReFly graph — inspectable via `describe()`, snapshotable, debuggable.
10
+ *
11
+ * Two-tier DX:
12
+ * - `reactiveLayout({ adapter, text?, font?, lineHeight?, maxWidth?, name? })` — convenience factory
13
+ * - `MeasurementAdapter` — pluggable backends (`measureSegment`; optional `clearCache`)
14
+ */
15
+
16
+ /** Pluggable measurement backend. */
17
+ interface MeasurementAdapter {
18
+ measureSegment(text: string, font: string): {
19
+ width: number;
20
+ };
21
+ /** Optional; adapters may omit for read-only / stateless measurement. */
22
+ clearCache?(): void;
23
+ }
24
+ /** Mutable counters for `analyzeAndMeasure` cache hit ratio (hits / (hits + misses)). */
25
+ type SegmentMeasureStats = {
26
+ hits: number;
27
+ misses: number;
28
+ };
29
+ /** Break kind for each segment (ported from Pretext analysis.ts). */
30
+ type SegmentBreakKind = "text" | "space" | "zero-width-break" | "soft-hyphen" | "hard-break";
31
+ /** A measured text segment ready for line breaking. */
32
+ type PreparedSegment = {
33
+ text: string;
34
+ width: number;
35
+ kind: SegmentBreakKind;
36
+ /** Grapheme widths for overflow-wrap: break-word (null if single grapheme). */
37
+ graphemeWidths: number[] | null;
38
+ };
39
+ /** A laid-out line with start/end cursors. */
40
+ type LayoutLine = {
41
+ text: string;
42
+ width: number;
43
+ startSegment: number;
44
+ startGrapheme: number;
45
+ endSegment: number;
46
+ endGrapheme: number;
47
+ };
48
+ /** Per-character position for hit testing. */
49
+ type CharPosition = {
50
+ x: number;
51
+ y: number;
52
+ width: number;
53
+ height: number;
54
+ line: number;
55
+ };
56
+ /** Full layout result from the line-breaks derived node. */
57
+ type LineBreaksResult = {
58
+ lines: LayoutLine[];
59
+ lineCount: number;
60
+ };
61
+ /**
62
+ * A position within `PreparedSegment[]` — segment + grapheme offset.
63
+ * `graphemeIndex: 0` at segment boundaries.
64
+ *
65
+ * Used by {@link layoutNextLine} for cursor-based line walking; needed when
66
+ * lines have varying widths (multi-column flow, text wrapping around obstacles).
67
+ */
68
+ type LayoutCursor = {
69
+ segmentIndex: number;
70
+ graphemeIndex: number;
71
+ };
72
+ /** A horizontal span `[left, right]` in pixels — used by flow-layout slot carving. */
73
+ type Interval = {
74
+ left: number;
75
+ right: number;
76
+ };
77
+ /** Result of a single `layoutNextLine` call. */
78
+ type LayoutNextLineResult = {
79
+ text: string;
80
+ width: number;
81
+ start: LayoutCursor;
82
+ end: LayoutCursor;
83
+ };
84
+ /** Optional context for `layoutNextLine` — enables soft-hyphen visible-hyphen rendering. */
85
+ type LayoutNextLineContext = {
86
+ adapter?: MeasurementAdapter;
87
+ font?: string;
88
+ cache?: Map<string, Map<string, number>>;
89
+ };
90
+ /** Result of the reactive layout graph's describe-accessible state. */
91
+ type ReactiveLayoutBundle = {
92
+ graph: Graph;
93
+ /** Set input text. */
94
+ setText: (text: string) => void;
95
+ /** Set CSS font string. */
96
+ setFont: (font: string) => void;
97
+ /** Set line height (px). */
98
+ setLineHeight: (lineHeight: number) => void;
99
+ /** Set max width constraint (px). */
100
+ setMaxWidth: (maxWidth: number) => void;
101
+ /** Segments node. */
102
+ segments: Node<PreparedSegment[]>;
103
+ /** Line breaks node. */
104
+ lineBreaks: Node<LineBreaksResult>;
105
+ /** Total height node. */
106
+ height: Node<number>;
107
+ /** Per-character positions node. */
108
+ charPositions: Node<CharPosition[]>;
109
+ };
110
+ /**
111
+ * Merge segmentation pieces: sticky punctuation, CJK per-grapheme splitting,
112
+ * and produce the final measured segment list.
113
+ */
114
+ declare function analyzeAndMeasure(text: string, font: string, adapter: MeasurementAdapter, cache: Map<string, Map<string, number>>, stats?: SegmentMeasureStats): PreparedSegment[];
115
+ /**
116
+ * Greedy line-breaking algorithm.
117
+ *
118
+ * Walks segments left to right, accumulating width. Breaks when a segment would
119
+ * overflow maxWidth. Supports:
120
+ * - Trailing space hang (spaces don't trigger breaks)
121
+ * - overflow-wrap: break-word via grapheme widths
122
+ * - Soft hyphens (break opportunity, adds visible hyphen width)
123
+ * - Hard breaks (forced newline)
124
+ */
125
+ declare function computeLineBreaks(segments: PreparedSegment[], maxWidth: number, adapter: MeasurementAdapter, font: string, cache: Map<string, Map<string, number>>): LineBreaksResult;
126
+ /**
127
+ * Lay out the next single line starting from `cursor`, fitting into `slotWidth`.
128
+ *
129
+ * Unlike `computeLineBreaks`, which consumes whole text with one `maxWidth`,
130
+ * this is the cursor-based primitive needed when successive lines have different
131
+ * widths (multi-column flow, text wrapping around shape obstacles, mixed
132
+ * column+pullquote layouts).
133
+ *
134
+ * Returns `null` when the cursor is past all segments (text exhausted).
135
+ * At a hard-break with no preceding content, returns an empty line and advances
136
+ * the cursor past the break so the caller can continue.
137
+ *
138
+ * ```ts
139
+ * let cursor: LayoutCursor = { segmentIndex: 0, graphemeIndex: 0 };
140
+ * while (true) {
141
+ * const line = layoutNextLine(segments, cursor, availableWidth);
142
+ * if (line === null) break;
143
+ * render(line);
144
+ * cursor = line.end;
145
+ * }
146
+ * ```
147
+ */
148
+ declare function layoutNextLine(segments: PreparedSegment[], cursor: LayoutCursor, slotWidth: number, ctx?: LayoutNextLineContext): LayoutNextLineResult | null;
149
+ /**
150
+ * Subtract blocked horizontal intervals from a base interval, producing
151
+ * remaining ordered, non-overlapping slots wide enough to fit text.
152
+ *
153
+ * Pure geometry — no text dependency. Used by flow-layout to turn obstacle
154
+ * intersections into per-line layout slots.
155
+ *
156
+ * ```ts
157
+ * carveTextLineSlots({left: 0, right: 600}, [{left: 200, right: 280}])
158
+ * // → [{left: 0, right: 200}, {left: 280, right: 600}]
159
+ * ```
160
+ */
161
+ declare function carveTextLineSlots(base: Interval, blocked: Interval[], minSlotWidth?: number): Interval[];
162
+ /** Compute per-character x,y positions from line breaks and segments. */
163
+ declare function computeCharPositions(lineBreaks: LineBreaksResult, segments: PreparedSegment[], lineHeight: number): CharPosition[];
164
+ type ReactiveLayoutOptions = {
165
+ /** Measurement backend (required). */
166
+ adapter: MeasurementAdapter;
167
+ /** Graph name (default: "reactive-layout"). */
168
+ name?: string;
169
+ /** Initial text. */
170
+ text?: string;
171
+ /** Initial CSS font string. */
172
+ font?: string;
173
+ /** Initial line height in px. */
174
+ lineHeight?: number;
175
+ /** Initial max width in px (clamped to ≥ 0). */
176
+ maxWidth?: number;
177
+ };
178
+ /**
179
+ * Create a reactive text layout graph.
180
+ *
181
+ * ```
182
+ * Graph("reactive-layout")
183
+ * ├── node([], { initial: "text" })
184
+ * ├── node([], { initial: "font" })
185
+ * ├── node([], { initial: "line-height" })
186
+ * ├── node([], { initial: "max-width" })
187
+ * ├── derived("segments") — text + font → PreparedSegment[]
188
+ * ├── derived("line-breaks") — segments + max-width → LineBreaksResult
189
+ * ├── derived("height") — line-breaks → number
190
+ * └── derived("char-positions") — line-breaks + segments → CharPosition[]
191
+ * ```
192
+ */
193
+ declare function reactiveLayout(opts: ReactiveLayoutOptions): ReactiveLayoutBundle;
194
+
195
+ export { type CharPosition as C, type Interval as I, type LayoutCursor as L, type MeasurementAdapter as M, type PreparedSegment as P, type ReactiveLayoutBundle as R, type SegmentBreakKind as S, type LayoutLine as a, type LayoutNextLineContext as b, type LayoutNextLineResult as c, type LineBreaksResult as d, type ReactiveLayoutOptions as e, type SegmentMeasureStats as f, analyzeAndMeasure as g, carveTextLineSlots as h, computeCharPositions as i, computeLineBreaks as j, layoutNextLine as l, reactiveLayout as r };
@@ -0,0 +1,195 @@
1
+ import { Node } from '@graphrefly/pure-ts/core';
2
+ import { Graph } from '@graphrefly/pure-ts/graph';
3
+
4
+ /**
5
+ * Reactive text layout engine (roadmap §7.1 — Pretext parity).
6
+ *
7
+ * Pure-arithmetic text measurement and line breaking without DOM thrashing.
8
+ * Inspired by [Pretext](https://github.com/chenglou/pretext), rebuilt as a
9
+ * GraphReFly graph — inspectable via `describe()`, snapshotable, debuggable.
10
+ *
11
+ * Two-tier DX:
12
+ * - `reactiveLayout({ adapter, text?, font?, lineHeight?, maxWidth?, name? })` — convenience factory
13
+ * - `MeasurementAdapter` — pluggable backends (`measureSegment`; optional `clearCache`)
14
+ */
15
+
16
+ /** Pluggable measurement backend. */
17
+ interface MeasurementAdapter {
18
+ measureSegment(text: string, font: string): {
19
+ width: number;
20
+ };
21
+ /** Optional; adapters may omit for read-only / stateless measurement. */
22
+ clearCache?(): void;
23
+ }
24
+ /** Mutable counters for `analyzeAndMeasure` cache hit ratio (hits / (hits + misses)). */
25
+ type SegmentMeasureStats = {
26
+ hits: number;
27
+ misses: number;
28
+ };
29
+ /** Break kind for each segment (ported from Pretext analysis.ts). */
30
+ type SegmentBreakKind = "text" | "space" | "zero-width-break" | "soft-hyphen" | "hard-break";
31
+ /** A measured text segment ready for line breaking. */
32
+ type PreparedSegment = {
33
+ text: string;
34
+ width: number;
35
+ kind: SegmentBreakKind;
36
+ /** Grapheme widths for overflow-wrap: break-word (null if single grapheme). */
37
+ graphemeWidths: number[] | null;
38
+ };
39
+ /** A laid-out line with start/end cursors. */
40
+ type LayoutLine = {
41
+ text: string;
42
+ width: number;
43
+ startSegment: number;
44
+ startGrapheme: number;
45
+ endSegment: number;
46
+ endGrapheme: number;
47
+ };
48
+ /** Per-character position for hit testing. */
49
+ type CharPosition = {
50
+ x: number;
51
+ y: number;
52
+ width: number;
53
+ height: number;
54
+ line: number;
55
+ };
56
+ /** Full layout result from the line-breaks derived node. */
57
+ type LineBreaksResult = {
58
+ lines: LayoutLine[];
59
+ lineCount: number;
60
+ };
61
+ /**
62
+ * A position within `PreparedSegment[]` — segment + grapheme offset.
63
+ * `graphemeIndex: 0` at segment boundaries.
64
+ *
65
+ * Used by {@link layoutNextLine} for cursor-based line walking; needed when
66
+ * lines have varying widths (multi-column flow, text wrapping around obstacles).
67
+ */
68
+ type LayoutCursor = {
69
+ segmentIndex: number;
70
+ graphemeIndex: number;
71
+ };
72
+ /** A horizontal span `[left, right]` in pixels — used by flow-layout slot carving. */
73
+ type Interval = {
74
+ left: number;
75
+ right: number;
76
+ };
77
+ /** Result of a single `layoutNextLine` call. */
78
+ type LayoutNextLineResult = {
79
+ text: string;
80
+ width: number;
81
+ start: LayoutCursor;
82
+ end: LayoutCursor;
83
+ };
84
+ /** Optional context for `layoutNextLine` — enables soft-hyphen visible-hyphen rendering. */
85
+ type LayoutNextLineContext = {
86
+ adapter?: MeasurementAdapter;
87
+ font?: string;
88
+ cache?: Map<string, Map<string, number>>;
89
+ };
90
+ /** Result of the reactive layout graph's describe-accessible state. */
91
+ type ReactiveLayoutBundle = {
92
+ graph: Graph;
93
+ /** Set input text. */
94
+ setText: (text: string) => void;
95
+ /** Set CSS font string. */
96
+ setFont: (font: string) => void;
97
+ /** Set line height (px). */
98
+ setLineHeight: (lineHeight: number) => void;
99
+ /** Set max width constraint (px). */
100
+ setMaxWidth: (maxWidth: number) => void;
101
+ /** Segments node. */
102
+ segments: Node<PreparedSegment[]>;
103
+ /** Line breaks node. */
104
+ lineBreaks: Node<LineBreaksResult>;
105
+ /** Total height node. */
106
+ height: Node<number>;
107
+ /** Per-character positions node. */
108
+ charPositions: Node<CharPosition[]>;
109
+ };
110
+ /**
111
+ * Merge segmentation pieces: sticky punctuation, CJK per-grapheme splitting,
112
+ * and produce the final measured segment list.
113
+ */
114
+ declare function analyzeAndMeasure(text: string, font: string, adapter: MeasurementAdapter, cache: Map<string, Map<string, number>>, stats?: SegmentMeasureStats): PreparedSegment[];
115
+ /**
116
+ * Greedy line-breaking algorithm.
117
+ *
118
+ * Walks segments left to right, accumulating width. Breaks when a segment would
119
+ * overflow maxWidth. Supports:
120
+ * - Trailing space hang (spaces don't trigger breaks)
121
+ * - overflow-wrap: break-word via grapheme widths
122
+ * - Soft hyphens (break opportunity, adds visible hyphen width)
123
+ * - Hard breaks (forced newline)
124
+ */
125
+ declare function computeLineBreaks(segments: PreparedSegment[], maxWidth: number, adapter: MeasurementAdapter, font: string, cache: Map<string, Map<string, number>>): LineBreaksResult;
126
+ /**
127
+ * Lay out the next single line starting from `cursor`, fitting into `slotWidth`.
128
+ *
129
+ * Unlike `computeLineBreaks`, which consumes whole text with one `maxWidth`,
130
+ * this is the cursor-based primitive needed when successive lines have different
131
+ * widths (multi-column flow, text wrapping around shape obstacles, mixed
132
+ * column+pullquote layouts).
133
+ *
134
+ * Returns `null` when the cursor is past all segments (text exhausted).
135
+ * At a hard-break with no preceding content, returns an empty line and advances
136
+ * the cursor past the break so the caller can continue.
137
+ *
138
+ * ```ts
139
+ * let cursor: LayoutCursor = { segmentIndex: 0, graphemeIndex: 0 };
140
+ * while (true) {
141
+ * const line = layoutNextLine(segments, cursor, availableWidth);
142
+ * if (line === null) break;
143
+ * render(line);
144
+ * cursor = line.end;
145
+ * }
146
+ * ```
147
+ */
148
+ declare function layoutNextLine(segments: PreparedSegment[], cursor: LayoutCursor, slotWidth: number, ctx?: LayoutNextLineContext): LayoutNextLineResult | null;
149
+ /**
150
+ * Subtract blocked horizontal intervals from a base interval, producing
151
+ * remaining ordered, non-overlapping slots wide enough to fit text.
152
+ *
153
+ * Pure geometry — no text dependency. Used by flow-layout to turn obstacle
154
+ * intersections into per-line layout slots.
155
+ *
156
+ * ```ts
157
+ * carveTextLineSlots({left: 0, right: 600}, [{left: 200, right: 280}])
158
+ * // → [{left: 0, right: 200}, {left: 280, right: 600}]
159
+ * ```
160
+ */
161
+ declare function carveTextLineSlots(base: Interval, blocked: Interval[], minSlotWidth?: number): Interval[];
162
+ /** Compute per-character x,y positions from line breaks and segments. */
163
+ declare function computeCharPositions(lineBreaks: LineBreaksResult, segments: PreparedSegment[], lineHeight: number): CharPosition[];
164
+ type ReactiveLayoutOptions = {
165
+ /** Measurement backend (required). */
166
+ adapter: MeasurementAdapter;
167
+ /** Graph name (default: "reactive-layout"). */
168
+ name?: string;
169
+ /** Initial text. */
170
+ text?: string;
171
+ /** Initial CSS font string. */
172
+ font?: string;
173
+ /** Initial line height in px. */
174
+ lineHeight?: number;
175
+ /** Initial max width in px (clamped to ≥ 0). */
176
+ maxWidth?: number;
177
+ };
178
+ /**
179
+ * Create a reactive text layout graph.
180
+ *
181
+ * ```
182
+ * Graph("reactive-layout")
183
+ * ├── node([], { initial: "text" })
184
+ * ├── node([], { initial: "font" })
185
+ * ├── node([], { initial: "line-height" })
186
+ * ├── node([], { initial: "max-width" })
187
+ * ├── derived("segments") — text + font → PreparedSegment[]
188
+ * ├── derived("line-breaks") — segments + max-width → LineBreaksResult
189
+ * ├── derived("height") — line-breaks → number
190
+ * └── derived("char-positions") — line-breaks + segments → CharPosition[]
191
+ * ```
192
+ */
193
+ declare function reactiveLayout(opts: ReactiveLayoutOptions): ReactiveLayoutBundle;
194
+
195
+ export { type CharPosition as C, type Interval as I, type LayoutCursor as L, type MeasurementAdapter as M, type PreparedSegment as P, type ReactiveLayoutBundle as R, type SegmentBreakKind as S, type LayoutLine as a, type LayoutNextLineContext as b, type LayoutNextLineResult as c, type LineBreaksResult as d, type ReactiveLayoutOptions as e, type SegmentMeasureStats as f, analyzeAndMeasure as g, carveTextLineSlots as h, computeCharPositions as i, computeLineBreaks as j, layoutNextLine as l, reactiveLayout as r };
@@ -0,0 +1,125 @@
1
+ import { Node } from '@graphrefly/pure-ts/core';
2
+ import { N as NodeOrValue } from './_internal-B23BagFd.js';
3
+ import { B as BackoffStrategy, a as BackoffPreset } from './backoff-Bnb9OoPh.js';
4
+ import { S as StatusValue } from './status-U-rUI79b.js';
5
+
6
+ /**
7
+ * Retry — re-attempt a node on terminal failure.
8
+ *
9
+ * Two modes selected by the type of `input`:
10
+ * - **Source mode** (`Node<T>`): resubscribes the same node after each ERROR.
11
+ * Upstream must be `resubscribable: true` or retries are silent no-ops.
12
+ * - **Factory mode** (`() => Node<T>`): builds a fresh node per attempt.
13
+ *
14
+ * Shared with `circuitBreaker` / `rateLimiter`: `NodeOrValue<RetryOptions>`
15
+ * lets callers swap retry config reactively (re-validates on each attempt).
16
+ */
17
+
18
+ /**
19
+ * Lifecycle-shaped state companion emitted by {@link retry} (DS-13.5.B,
20
+ * locked 2026-05-01). Tracks the retry state machine's current status,
21
+ * the attempt counter, and the last scheduled delay (null before the
22
+ * first retry).
23
+ *
24
+ * @category extra/resilience
25
+ */
26
+ interface RetryState {
27
+ status: StatusValue;
28
+ attempt: number;
29
+ lastDelay_ns: number | null;
30
+ }
31
+ /**
32
+ * Bundle returned by {@link retry}: the retry-wrapped output node and its
33
+ * lifecycle state companion. Pre-1.0 break vs the prior `Node<T>` return.
34
+ *
35
+ * **Single-subscriber / pipeline-only contract (DS-13.5.B QA, N1, 2026-05-03).**
36
+ * The `retryState` companion is allocated once at factory time and shared
37
+ * across all subscribers to `node`. With one subscriber (the typical use
38
+ * case — wire `node` into your downstream chain, optionally observe
39
+ * `retryState` separately) the companion reflects a coherent timeline.
40
+ * With **two or more subscribers** to `node`, each subscriber re-runs the
41
+ * producer body and writes into the same `retryState`, including
42
+ * `publish("pending")` resets that can clobber an in-flight machine's
43
+ * `running`/`paused` state. Don't fan out `node` to multiple subscribers
44
+ * and rely on `retryState` accuracy unless you use
45
+ * {@link keepalive} / `share`-style consolidation.
46
+ *
47
+ * @category extra/resilience
48
+ */
49
+ interface RetryBundle<T> {
50
+ node: Node<T>;
51
+ retryState: Node<RetryState>;
52
+ }
53
+ type RetryOptions = {
54
+ /**
55
+ * Max retry attempts after each terminal `ERROR` (not counting the first failure).
56
+ *
57
+ * **Required when `backoff` is set.** Pass `Infinity` to opt in to unbounded retries
58
+ * — the explicit value rules out the silent-infinite-budget footgun (a flaky provider
59
+ * + exponential backoff + omitted `count` would previously default to ~2.1B retries).
60
+ */
61
+ count?: number;
62
+ /** Delay between attempts; strategies use **nanoseconds**. */
63
+ backoff?: BackoffStrategy | BackoffPreset;
64
+ /**
65
+ * Caller-supplied metadata merged into the produced node's `meta` (Tier 5.2
66
+ * D8 widening). Use {@link domainMeta} to tag the layer for `describe()`
67
+ * grouping. The primitive's `factoryTag("retry", …)` always wins against
68
+ * caller keys.
69
+ */
70
+ meta?: Record<string, unknown>;
71
+ };
72
+ /** Factory-mode-only options. `initial` seeds the outer node's cache before the first attempt. */
73
+ type RetryFactoryOptions<T> = RetryOptions & {
74
+ /** Initial cache value for the outer node before the factory runs the first time. */
75
+ initial?: T;
76
+ };
77
+ /**
78
+ * Retry operator — two modes selected by the type of `input`:
79
+ *
80
+ * **Source mode** (`input: Node<T>`): resubscribes to the same node after each terminal
81
+ * `ERROR`. The upstream should use `resubscribable: true` if it must emit again after `ERROR`.
82
+ *
83
+ * **Factory mode** (`input: () => Node<T>`): invokes the factory to build a fresh `Node<T>`
84
+ * on every connect / reconnect. Ideal for producers that capture per-attempt resources
85
+ * (sockets, clients, file handles) that become unusable after an error. Synchronous
86
+ * exceptions thrown by the factory are treated as terminal ERROR and run through the
87
+ * same retry pipeline as inner-node ERROR.
88
+ *
89
+ * @param input - Upstream node or factory that returns a fresh node per attempt.
90
+ * @param opts - `count` caps attempts (**required when `backoff` is set**; pass `Infinity` to opt in to unbounded); `backoff` supplies delay in **nanoseconds** (or a preset name); `initial` seeds the outer node cache (factory mode only).
91
+ * @returns Node that retries on error.
92
+ *
93
+ * @throws {RangeError} when `backoff` is provided without an explicit `count` (unbounded-retry footgun guard) or when `count < 0`.
94
+ *
95
+ * @remarks
96
+ * **Protocol:** Forwards unknown message tuples unchanged; handles `DIRTY`, `DATA`, `RESOLVED`, `COMPLETE`, `ERROR`.
97
+ *
98
+ * **Backoff floor:** every scheduled delay is floored at 1ms via `Math.max(1, delayNs / NS_PER_MS)` even when the strategy returns 0ns. This avoids 0-delay re-entrancy on the active stack frame on a tight ERROR loop. Strategies that return `null`/`undefined` stop retrying immediately and forward the original error.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * // Source mode — resubscribe the same node:
103
+ * import { ERROR, NS_PER_SEC, producer, retry, constant } from "@graphrefly/graphrefly-ts";
104
+ *
105
+ * const src = producer(
106
+ * (a) => { a.down([[ERROR, new Error("x")]]); },
107
+ * { resubscribable: true },
108
+ * );
109
+ * const out = retry(src, { count: 2, backoff: constant(0.25 * NS_PER_SEC) });
110
+ *
111
+ * // Factory mode — fresh node per attempt (e.g. reconnecting WebSocket):
112
+ * import { NS_PER_SEC, exponential, retry, fromWebSocket } from "@graphrefly/graphrefly-ts";
113
+ *
114
+ * const connected$ = retry(
115
+ * () => fromWebSocket(new WebSocket("wss://example/stream")),
116
+ * { count: 10, backoff: exponential({ baseNs: 1 * NS_PER_SEC }) },
117
+ * );
118
+ * ```
119
+ *
120
+ * @category extra
121
+ */
122
+ declare function retry<T>(input: Node<T>, opts?: NodeOrValue<RetryOptions>): RetryBundle<T>;
123
+ declare function retry<T>(input: () => Node<T>, opts?: NodeOrValue<RetryFactoryOptions<T>>): RetryBundle<T>;
124
+
125
+ export { type RetryBundle as R, type RetryFactoryOptions as a, type RetryOptions as b, type RetryState as c, retry as r };
@@ -0,0 +1,125 @@
1
+ import { Node } from '@graphrefly/pure-ts/core';
2
+ import { N as NodeOrValue } from './_internal-B23BagFd.cjs';
3
+ import { B as BackoffStrategy, a as BackoffPreset } from './backoff-Bnb9OoPh.cjs';
4
+ import { S as StatusValue } from './status-U-rUI79b.cjs';
5
+
6
+ /**
7
+ * Retry — re-attempt a node on terminal failure.
8
+ *
9
+ * Two modes selected by the type of `input`:
10
+ * - **Source mode** (`Node<T>`): resubscribes the same node after each ERROR.
11
+ * Upstream must be `resubscribable: true` or retries are silent no-ops.
12
+ * - **Factory mode** (`() => Node<T>`): builds a fresh node per attempt.
13
+ *
14
+ * Shared with `circuitBreaker` / `rateLimiter`: `NodeOrValue<RetryOptions>`
15
+ * lets callers swap retry config reactively (re-validates on each attempt).
16
+ */
17
+
18
+ /**
19
+ * Lifecycle-shaped state companion emitted by {@link retry} (DS-13.5.B,
20
+ * locked 2026-05-01). Tracks the retry state machine's current status,
21
+ * the attempt counter, and the last scheduled delay (null before the
22
+ * first retry).
23
+ *
24
+ * @category extra/resilience
25
+ */
26
+ interface RetryState {
27
+ status: StatusValue;
28
+ attempt: number;
29
+ lastDelay_ns: number | null;
30
+ }
31
+ /**
32
+ * Bundle returned by {@link retry}: the retry-wrapped output node and its
33
+ * lifecycle state companion. Pre-1.0 break vs the prior `Node<T>` return.
34
+ *
35
+ * **Single-subscriber / pipeline-only contract (DS-13.5.B QA, N1, 2026-05-03).**
36
+ * The `retryState` companion is allocated once at factory time and shared
37
+ * across all subscribers to `node`. With one subscriber (the typical use
38
+ * case — wire `node` into your downstream chain, optionally observe
39
+ * `retryState` separately) the companion reflects a coherent timeline.
40
+ * With **two or more subscribers** to `node`, each subscriber re-runs the
41
+ * producer body and writes into the same `retryState`, including
42
+ * `publish("pending")` resets that can clobber an in-flight machine's
43
+ * `running`/`paused` state. Don't fan out `node` to multiple subscribers
44
+ * and rely on `retryState` accuracy unless you use
45
+ * {@link keepalive} / `share`-style consolidation.
46
+ *
47
+ * @category extra/resilience
48
+ */
49
+ interface RetryBundle<T> {
50
+ node: Node<T>;
51
+ retryState: Node<RetryState>;
52
+ }
53
+ type RetryOptions = {
54
+ /**
55
+ * Max retry attempts after each terminal `ERROR` (not counting the first failure).
56
+ *
57
+ * **Required when `backoff` is set.** Pass `Infinity` to opt in to unbounded retries
58
+ * — the explicit value rules out the silent-infinite-budget footgun (a flaky provider
59
+ * + exponential backoff + omitted `count` would previously default to ~2.1B retries).
60
+ */
61
+ count?: number;
62
+ /** Delay between attempts; strategies use **nanoseconds**. */
63
+ backoff?: BackoffStrategy | BackoffPreset;
64
+ /**
65
+ * Caller-supplied metadata merged into the produced node's `meta` (Tier 5.2
66
+ * D8 widening). Use {@link domainMeta} to tag the layer for `describe()`
67
+ * grouping. The primitive's `factoryTag("retry", …)` always wins against
68
+ * caller keys.
69
+ */
70
+ meta?: Record<string, unknown>;
71
+ };
72
+ /** Factory-mode-only options. `initial` seeds the outer node's cache before the first attempt. */
73
+ type RetryFactoryOptions<T> = RetryOptions & {
74
+ /** Initial cache value for the outer node before the factory runs the first time. */
75
+ initial?: T;
76
+ };
77
+ /**
78
+ * Retry operator — two modes selected by the type of `input`:
79
+ *
80
+ * **Source mode** (`input: Node<T>`): resubscribes to the same node after each terminal
81
+ * `ERROR`. The upstream should use `resubscribable: true` if it must emit again after `ERROR`.
82
+ *
83
+ * **Factory mode** (`input: () => Node<T>`): invokes the factory to build a fresh `Node<T>`
84
+ * on every connect / reconnect. Ideal for producers that capture per-attempt resources
85
+ * (sockets, clients, file handles) that become unusable after an error. Synchronous
86
+ * exceptions thrown by the factory are treated as terminal ERROR and run through the
87
+ * same retry pipeline as inner-node ERROR.
88
+ *
89
+ * @param input - Upstream node or factory that returns a fresh node per attempt.
90
+ * @param opts - `count` caps attempts (**required when `backoff` is set**; pass `Infinity` to opt in to unbounded); `backoff` supplies delay in **nanoseconds** (or a preset name); `initial` seeds the outer node cache (factory mode only).
91
+ * @returns Node that retries on error.
92
+ *
93
+ * @throws {RangeError} when `backoff` is provided without an explicit `count` (unbounded-retry footgun guard) or when `count < 0`.
94
+ *
95
+ * @remarks
96
+ * **Protocol:** Forwards unknown message tuples unchanged; handles `DIRTY`, `DATA`, `RESOLVED`, `COMPLETE`, `ERROR`.
97
+ *
98
+ * **Backoff floor:** every scheduled delay is floored at 1ms via `Math.max(1, delayNs / NS_PER_MS)` even when the strategy returns 0ns. This avoids 0-delay re-entrancy on the active stack frame on a tight ERROR loop. Strategies that return `null`/`undefined` stop retrying immediately and forward the original error.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * // Source mode — resubscribe the same node:
103
+ * import { ERROR, NS_PER_SEC, producer, retry, constant } from "@graphrefly/graphrefly-ts";
104
+ *
105
+ * const src = producer(
106
+ * (a) => { a.down([[ERROR, new Error("x")]]); },
107
+ * { resubscribable: true },
108
+ * );
109
+ * const out = retry(src, { count: 2, backoff: constant(0.25 * NS_PER_SEC) });
110
+ *
111
+ * // Factory mode — fresh node per attempt (e.g. reconnecting WebSocket):
112
+ * import { NS_PER_SEC, exponential, retry, fromWebSocket } from "@graphrefly/graphrefly-ts";
113
+ *
114
+ * const connected$ = retry(
115
+ * () => fromWebSocket(new WebSocket("wss://example/stream")),
116
+ * { count: 10, backoff: exponential({ baseNs: 1 * NS_PER_SEC }) },
117
+ * );
118
+ * ```
119
+ *
120
+ * @category extra
121
+ */
122
+ declare function retry<T>(input: Node<T>, opts?: NodeOrValue<RetryOptions>): RetryBundle<T>;
123
+ declare function retry<T>(input: () => Node<T>, opts?: NodeOrValue<RetryFactoryOptions<T>>): RetryBundle<T>;
124
+
125
+ export { type RetryBundle as R, type RetryFactoryOptions as a, type RetryOptions as b, type RetryState as c, retry as r };