@graphrefly/graphrefly 0.45.0 → 0.47.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 +865 -0
  15. package/dist/base/composition/index.cjs.map +1 -0
  16. package/dist/base/composition/index.d.cts +468 -0
  17. package/dist/base/composition/index.d.ts +468 -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 +6390 -0
  21. package/dist/base/index.cjs.map +1 -0
  22. package/dist/base/index.d.cts +21 -0
  23. package/dist/base/index.d.ts +21 -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-22SG74BD.js +207 -0
  91. package/dist/chunk-22SG74BD.js.map +1 -0
  92. package/dist/chunk-255UCBG4.js +58 -0
  93. package/dist/chunk-255UCBG4.js.map +1 -0
  94. package/dist/chunk-2LO3EL4W.js +1 -0
  95. package/dist/chunk-2LO3EL4W.js.map +1 -0
  96. package/dist/chunk-2OB3CEJS.js +1065 -0
  97. package/dist/chunk-2OB3CEJS.js.map +1 -0
  98. package/dist/chunk-36NMM65U.js +144 -0
  99. package/dist/chunk-36NMM65U.js.map +1 -0
  100. package/dist/chunk-3CEXCBN6.js +1 -0
  101. package/dist/chunk-3CEXCBN6.js.map +1 -0
  102. package/dist/chunk-3MUSLI6E.js +105 -0
  103. package/dist/chunk-3MUSLI6E.js.map +1 -0
  104. package/dist/chunk-3PSLNJDU.js +884 -0
  105. package/dist/chunk-3PSLNJDU.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-5IMMNARC.js +1153 -0
  115. package/dist/chunk-5IMMNARC.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-EHRRQ4IC.js +211 -0
  145. package/dist/chunk-EHRRQ4IC.js.map +1 -0
  146. package/dist/chunk-EVYY4X5A.js +509 -0
  147. package/dist/chunk-EVYY4X5A.js.map +1 -0
  148. package/dist/chunk-FDFD67UO.js +1 -0
  149. package/dist/chunk-FDFD67UO.js.map +1 -0
  150. package/dist/chunk-FMPF42Q4.js +13 -0
  151. package/dist/chunk-FMPF42Q4.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-GWRNLJNW.js +2508 -0
  155. package/dist/chunk-GWRNLJNW.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-IHTWQEDR.js +169 -0
  159. package/dist/chunk-IHTWQEDR.js.map +1 -0
  160. package/dist/chunk-IJRR6YAI.js +128 -0
  161. package/dist/chunk-IJRR6YAI.js.map +1 -0
  162. package/dist/chunk-JGFRAFDL.js +221 -0
  163. package/dist/chunk-JGFRAFDL.js.map +1 -0
  164. package/dist/chunk-JKTC747G.js +725 -0
  165. package/dist/chunk-JKTC747G.js.map +1 -0
  166. package/dist/chunk-KN3H5CNT.js +11 -0
  167. package/dist/chunk-KN3H5CNT.js.map +1 -0
  168. package/dist/chunk-KPG3DGLA.js +1 -0
  169. package/dist/chunk-KPG3DGLA.js.map +1 -0
  170. package/dist/chunk-KRNQ6RGQ.js +1 -0
  171. package/dist/chunk-KRNQ6RGQ.js.map +1 -0
  172. package/dist/chunk-MLTPJMH6.js +417 -0
  173. package/dist/chunk-MLTPJMH6.js.map +1 -0
  174. package/dist/chunk-N3SZ7BMH.js +95 -0
  175. package/dist/chunk-N3SZ7BMH.js.map +1 -0
  176. package/dist/chunk-NDUD3IMO.js +540 -0
  177. package/dist/chunk-NDUD3IMO.js.map +1 -0
  178. package/dist/chunk-NY2PYHNC.js +873 -0
  179. package/dist/chunk-NY2PYHNC.js.map +1 -0
  180. package/dist/chunk-O3MT7DYI.js +225 -0
  181. package/dist/chunk-O3MT7DYI.js.map +1 -0
  182. package/dist/chunk-OCUDSN63.js +2386 -0
  183. package/dist/chunk-OCUDSN63.js.map +1 -0
  184. package/dist/chunk-OIWU3NYV.js +199 -0
  185. package/dist/chunk-OIWU3NYV.js.map +1 -0
  186. package/dist/chunk-OQUIJT7A.js +1 -0
  187. package/dist/chunk-OQUIJT7A.js.map +1 -0
  188. package/dist/chunk-P5LBT622.js +105 -0
  189. package/dist/chunk-P5LBT622.js.map +1 -0
  190. package/dist/chunk-PKGQG5QQ.js +519 -0
  191. package/dist/chunk-PKGQG5QQ.js.map +1 -0
  192. package/dist/chunk-PKPO3JTZ.js +561 -0
  193. package/dist/chunk-PKPO3JTZ.js.map +1 -0
  194. package/dist/chunk-PL5UDIQ5.js +118 -0
  195. package/dist/chunk-PL5UDIQ5.js.map +1 -0
  196. package/dist/chunk-PZWISPIQ.js +432 -0
  197. package/dist/chunk-PZWISPIQ.js.map +1 -0
  198. package/dist/chunk-Q3EYOCZB.js +510 -0
  199. package/dist/chunk-Q3EYOCZB.js.map +1 -0
  200. package/dist/chunk-QMBYUVRL.js +15 -0
  201. package/dist/chunk-QMBYUVRL.js.map +1 -0
  202. package/dist/chunk-RAGGHLCV.js +200 -0
  203. package/dist/chunk-RAGGHLCV.js.map +1 -0
  204. package/dist/chunk-RJOG4IJU.js +1039 -0
  205. package/dist/chunk-RJOG4IJU.js.map +1 -0
  206. package/dist/chunk-SOOKUYVM.js +403 -0
  207. package/dist/chunk-SOOKUYVM.js.map +1 -0
  208. package/dist/chunk-T5BN5KG7.js +1 -0
  209. package/dist/chunk-T5BN5KG7.js.map +1 -0
  210. package/dist/chunk-TNX5ZGDJ.js +574 -0
  211. package/dist/chunk-TNX5ZGDJ.js.map +1 -0
  212. package/dist/chunk-TP7244Y6.js +207 -0
  213. package/dist/chunk-TP7244Y6.js.map +1 -0
  214. package/dist/chunk-TSBFTJKM.js +57 -0
  215. package/dist/chunk-TSBFTJKM.js.map +1 -0
  216. package/dist/chunk-URQ2CBBF.js +143 -0
  217. package/dist/chunk-URQ2CBBF.js.map +1 -0
  218. package/dist/chunk-VLAGJZSL.js +1079 -0
  219. package/dist/chunk-VLAGJZSL.js.map +1 -0
  220. package/dist/chunk-W2BOPXTI.js +1 -0
  221. package/dist/chunk-W2BOPXTI.js.map +1 -0
  222. package/dist/chunk-Y52CS6YA.js +88 -0
  223. package/dist/chunk-Y52CS6YA.js.map +1 -0
  224. package/dist/chunk-YCBUWK77.js +92 -0
  225. package/dist/chunk-YCBUWK77.js.map +1 -0
  226. package/dist/chunk-YJ4U2D2C.js +314 -0
  227. package/dist/chunk-YJ4U2D2C.js.map +1 -0
  228. package/dist/chunk-Z4YXAUDN.js +239 -0
  229. package/dist/chunk-Z4YXAUDN.js.map +1 -0
  230. package/dist/chunk-Z65DVDEQ.js +146 -0
  231. package/dist/chunk-Z65DVDEQ.js.map +1 -0
  232. package/dist/chunk-Z6EGP5D7.js +92 -0
  233. package/dist/chunk-Z6EGP5D7.js.map +1 -0
  234. package/dist/chunk-ZT4WMQW4.js +1575 -0
  235. package/dist/chunk-ZT4WMQW4.js.map +1 -0
  236. package/dist/chunk-ZVXXDWIB.js +1282 -0
  237. package/dist/chunk-ZVXXDWIB.js.map +1 -0
  238. package/dist/compat/index.cjs +3150 -6
  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 +2291 -6
  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 +76 -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-B6pxYJzO.d.cts +36 -0
  301. package/dist/index-B6pxYJzO.d.ts +36 -0
  302. package/dist/index-BFsng6v1.d.cts +44 -0
  303. package/dist/index-BFsng6v1.d.ts +44 -0
  304. package/dist/index-B_p8tnvf.d.cts +770 -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-DLAxYaN5.d.cts +169 -0
  312. package/dist/index-DLAxYaN5.d.ts +169 -0
  313. package/dist/index-DeWbQzMe.d.cts +34 -0
  314. package/dist/index-DeWbQzMe.d.ts +34 -0
  315. package/dist/index-_HDSmPyp.d.ts +770 -0
  316. package/dist/index-dX9IzPqj.d.cts +86 -0
  317. package/dist/index-dX9IzPqj.d.ts +86 -0
  318. package/dist/index.cjs +26009 -0
  319. package/dist/index.cjs.map +1 -1
  320. package/dist/index.d.cts +55 -42
  321. package/dist/index.d.ts +55 -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-B25XqCbZ.d.cts +59 -0
  329. package/dist/observable-B25XqCbZ.d.ts +59 -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 +17614 -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 +1456 -0
  451. package/dist/utils/memory/index.cjs.map +1 -0
  452. package/dist/utils/memory/index.d.cts +660 -0
  453. package/dist/utils/memory/index.d.ts +660 -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 -241
  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,320 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/base/sources/node/index.ts
21
+ var node_exports = {};
22
+ __export(node_exports, {
23
+ fromFSWatch: () => fromFSWatch,
24
+ fromGitHook: () => fromGitHook,
25
+ fromSpawn: () => fromSpawn,
26
+ runProcess: () => runProcess
27
+ });
28
+ module.exports = __toCommonJS(node_exports);
29
+
30
+ // src/base/sources/node/fs-root.ts
31
+ var import_node_fs = require("fs");
32
+ var import_node_path = require("path");
33
+ var import_core = require("@graphrefly/pure-ts/core");
34
+ var import_extra = require("@graphrefly/pure-ts/extra");
35
+ function sourceOpts(opts) {
36
+ return { describeKind: "producer", ...opts };
37
+ }
38
+ function fromFSWatch(paths, opts) {
39
+ const list = Array.isArray(paths) ? paths : [paths];
40
+ if (list.length === 0) {
41
+ throw new RangeError("fromFSWatch expects at least one path");
42
+ }
43
+ const { recursive = true, debounce = 100, include, exclude, ...rest } = opts ?? {};
44
+ const includePatterns = include?.map(import_extra.globToRegExp) ?? [];
45
+ const excludePatterns = (exclude ?? ["**/node_modules/**", "**/.git/**", "**/dist/**"]).map(
46
+ import_extra.globToRegExp
47
+ );
48
+ return (0, import_core.node)((_data, a) => {
49
+ const pending = /* @__PURE__ */ new Map();
50
+ const watchers = [];
51
+ let stopped = false;
52
+ let terminalEmitted = false;
53
+ let generation = 0;
54
+ const closeWatchers = () => {
55
+ for (const watcher of watchers.splice(0)) watcher.close();
56
+ };
57
+ const emitError = (err) => {
58
+ if (terminalEmitted) return;
59
+ terminalEmitted = true;
60
+ stopped = true;
61
+ if (timer !== void 0) clearTimeout(timer);
62
+ timer = void 0;
63
+ pending.clear();
64
+ closeWatchers();
65
+ a.down([[import_core.ERROR, err]]);
66
+ };
67
+ let timer;
68
+ const flush = (token) => {
69
+ timer = void 0;
70
+ if (stopped || terminalEmitted) return;
71
+ if (pending.size === 0) return;
72
+ const batchMessages = [];
73
+ for (const evt of pending.values()) batchMessages.push([import_core.DATA, evt]);
74
+ pending.clear();
75
+ if (stopped || terminalEmitted || token !== generation) return;
76
+ a.down(batchMessages);
77
+ };
78
+ try {
79
+ for (const basePath of list) {
80
+ const watcher = (0, import_node_fs.watch)(
81
+ basePath,
82
+ { recursive },
83
+ (eventType, fileName) => {
84
+ if (stopped || terminalEmitted) return;
85
+ if (fileName == null) return;
86
+ const rel = String(fileName).replaceAll("\\", "/");
87
+ const abs = (0, import_node_path.resolve)(basePath, String(fileName));
88
+ const normalized = abs.replaceAll("\\", "/");
89
+ const root = (0, import_node_path.resolve)(basePath).replaceAll("\\", "/");
90
+ const relForMatch = rel.startsWith("./") ? rel.slice(2) : rel;
91
+ const included = includePatterns.length === 0 || (0, import_extra.matchesAnyPattern)(normalized, includePatterns) || (0, import_extra.matchesAnyPattern)(relForMatch, includePatterns);
92
+ if (!included) return;
93
+ const excluded = (0, import_extra.matchesAnyPattern)(normalized, excludePatterns) || (0, import_extra.matchesAnyPattern)(relForMatch, excludePatterns);
94
+ if (excluded) return;
95
+ let kind = "change";
96
+ if (eventType === "rename") {
97
+ try {
98
+ kind = (0, import_node_fs.existsSync)(normalized) ? "create" : "delete";
99
+ } catch {
100
+ kind = "rename";
101
+ }
102
+ }
103
+ pending.set(normalized, {
104
+ type: kind,
105
+ path: normalized,
106
+ root,
107
+ relative_path: relForMatch,
108
+ timestamp_ns: (0, import_core.wallClockNs)()
109
+ });
110
+ if (timer !== void 0) clearTimeout(timer);
111
+ const token = generation;
112
+ timer = setTimeout(() => flush(token), debounce);
113
+ }
114
+ );
115
+ watcher.on("error", (err) => emitError(err));
116
+ watchers.push(watcher);
117
+ }
118
+ } catch (err) {
119
+ emitError(err);
120
+ }
121
+ return () => {
122
+ stopped = true;
123
+ generation += 1;
124
+ if (timer !== void 0) clearTimeout(timer);
125
+ timer = void 0;
126
+ closeWatchers();
127
+ pending.clear();
128
+ };
129
+ }, sourceOpts(rest));
130
+ }
131
+
132
+ // src/base/sources/node/git-hook.ts
133
+ var import_core2 = require("@graphrefly/pure-ts/core");
134
+ var import_extra2 = require("@graphrefly/pure-ts/extra");
135
+ function fromGitHook(repoPath, opts) {
136
+ const { pollMs = 5e3, include, exclude, maxConsecutiveErrors = 1 } = opts ?? {};
137
+ const includePatterns = include?.map(import_extra2.globToRegExp) ?? [];
138
+ const excludePatterns = exclude?.map(import_extra2.globToRegExp) ?? [];
139
+ const { execFileSync } = require("child_process");
140
+ const gitQuery = (args) => execFileSync("git", args, { cwd: repoPath, encoding: "utf-8" }).trim();
141
+ let lastSeen;
142
+ let consecutiveErrors = 0;
143
+ return (0, import_extra2.switchMap)(
144
+ (0, import_extra2.fromTimer)(0, { period: pollMs }),
145
+ () => (0, import_core2.node)((_data, a) => {
146
+ try {
147
+ const head = gitQuery(["rev-parse", "HEAD"]);
148
+ if (!head) {
149
+ consecutiveErrors = 0;
150
+ return () => {
151
+ };
152
+ }
153
+ if (lastSeen === void 0) {
154
+ lastSeen = head;
155
+ consecutiveErrors = 0;
156
+ return () => {
157
+ };
158
+ }
159
+ if (head === lastSeen) {
160
+ consecutiveErrors = 0;
161
+ return () => {
162
+ };
163
+ }
164
+ let files = gitQuery(["diff", "--name-only", `${lastSeen}..${head}`]).split("\n").filter(Boolean);
165
+ if (includePatterns.length > 0) {
166
+ files = files.filter((f) => (0, import_extra2.matchesAnyPattern)(f, includePatterns));
167
+ }
168
+ if (excludePatterns.length > 0) {
169
+ files = files.filter((f) => !(0, import_extra2.matchesAnyPattern)(f, excludePatterns));
170
+ }
171
+ const message = gitQuery(["log", "-1", "--format=%s", head]);
172
+ const author = gitQuery(["log", "-1", "--format=%an", head]);
173
+ a.emit({
174
+ hook: "post-commit",
175
+ commit: head,
176
+ files,
177
+ message,
178
+ author,
179
+ timestamp_ns: (0, import_core2.wallClockNs)()
180
+ });
181
+ lastSeen = head;
182
+ consecutiveErrors = 0;
183
+ } catch (err) {
184
+ consecutiveErrors += 1;
185
+ if (consecutiveErrors >= maxConsecutiveErrors) {
186
+ a.down([[import_core2.ERROR, err]]);
187
+ }
188
+ }
189
+ return () => {
190
+ };
191
+ })
192
+ );
193
+ }
194
+
195
+ // src/base/sources/node/process.ts
196
+ var import_node_child_process = require("child_process");
197
+ var import_core3 = require("@graphrefly/pure-ts/core");
198
+ function fromSpawn(cmd, args, opts) {
199
+ return (0, import_core3.node)(
200
+ (_data, actions) => {
201
+ const child = (0, import_node_child_process.spawn)(cmd, args, {
202
+ cwd: opts?.cwd,
203
+ env: opts?.env,
204
+ shell: opts?.shell,
205
+ signal: opts?.signal,
206
+ stdio: opts?.stdio ?? "pipe"
207
+ });
208
+ let alive = true;
209
+ let exitInfo = null;
210
+ child.stdout?.on("data", (chunk) => {
211
+ if (!alive) return;
212
+ actions.down([[import_core3.DATA, { kind: "stdout", chunk }]]);
213
+ });
214
+ child.stderr?.on("data", (chunk) => {
215
+ if (!alive) return;
216
+ actions.down([[import_core3.DATA, { kind: "stderr", chunk }]]);
217
+ });
218
+ child.on("error", (err) => {
219
+ if (!alive) return;
220
+ alive = false;
221
+ actions.down([[import_core3.ERROR, err]]);
222
+ });
223
+ child.on("exit", (code, signal) => {
224
+ if (exitInfo == null) exitInfo = { code, signal };
225
+ });
226
+ child.on("close", () => {
227
+ if (!alive) return;
228
+ alive = false;
229
+ const info = exitInfo ?? { code: null, signal: null };
230
+ actions.down([
231
+ [import_core3.DATA, { kind: "exit", code: info.code, signal: info.signal }],
232
+ [import_core3.COMPLETE]
233
+ ]);
234
+ });
235
+ return () => {
236
+ if (alive) {
237
+ alive = false;
238
+ child.stdout?.removeAllListeners();
239
+ child.stderr?.removeAllListeners();
240
+ child.removeAllListeners("error");
241
+ child.removeAllListeners("exit");
242
+ child.removeAllListeners("close");
243
+ try {
244
+ child.kill("SIGTERM");
245
+ } catch {
246
+ }
247
+ }
248
+ };
249
+ },
250
+ { name: "from_spawn" }
251
+ );
252
+ }
253
+ function runProcess(cmd, args, opts) {
254
+ return (0, import_core3.node)(
255
+ (_data, actions) => {
256
+ const child = (0, import_node_child_process.spawn)(cmd, args, {
257
+ cwd: opts?.cwd,
258
+ env: opts?.env,
259
+ shell: opts?.shell,
260
+ signal: opts?.signal,
261
+ stdio: opts?.stdio ?? "pipe"
262
+ });
263
+ let alive = true;
264
+ const stdoutChunks = [];
265
+ const stderrChunks = [];
266
+ let exitInfo = null;
267
+ child.stdout?.on("data", (chunk) => {
268
+ if (!alive) return;
269
+ stdoutChunks.push(chunk);
270
+ });
271
+ child.stderr?.on("data", (chunk) => {
272
+ if (!alive) return;
273
+ stderrChunks.push(chunk);
274
+ });
275
+ child.on("error", (err) => {
276
+ if (!alive) return;
277
+ alive = false;
278
+ actions.down([[import_core3.ERROR, err]]);
279
+ });
280
+ child.on("exit", (code, signal) => {
281
+ if (exitInfo == null) exitInfo = { code, signal };
282
+ });
283
+ child.on("close", () => {
284
+ if (!alive) return;
285
+ alive = false;
286
+ const info = exitInfo ?? { code: null, signal: null };
287
+ const stdout = Buffer.concat(stdoutChunks).toString("utf8");
288
+ const stderr = Buffer.concat(stderrChunks).toString("utf8");
289
+ actions.down([
290
+ [
291
+ import_core3.DATA,
292
+ {
293
+ stdout,
294
+ stderr,
295
+ exitCode: info.code,
296
+ signal: info.signal
297
+ }
298
+ ],
299
+ [import_core3.COMPLETE]
300
+ ]);
301
+ });
302
+ return () => {
303
+ if (alive) {
304
+ alive = false;
305
+ child.stdout?.removeAllListeners();
306
+ child.stderr?.removeAllListeners();
307
+ child.removeAllListeners("error");
308
+ child.removeAllListeners("exit");
309
+ child.removeAllListeners("close");
310
+ try {
311
+ child.kill("SIGTERM");
312
+ } catch {
313
+ }
314
+ }
315
+ };
316
+ },
317
+ { name: "run_process" }
318
+ );
319
+ }
320
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/base/sources/node/index.ts","../../../../src/base/sources/node/fs-root.ts","../../../../src/base/sources/node/git-hook.ts","../../../../src/base/sources/node/process.ts"],"sourcesContent":["/**\n * Node-only sources — fs, git, git-hook, process.\n *\n * All entries in this subpath may import node:* builtins.\n * Import via @graphrefly/graphrefly/base/sources/node.\n *\n * @module\n */\n\nexport * from \"./fs.js\";\nexport * from \"./git.js\";\nexport * from \"./git-hook.js\";\nexport * from \"./process.js\";\n","/**\n * Filesystem-watching source. Isolated from `./sources.ts` so bundlers\n * targeting the browser can import browser-safe sources (`fromTimer`,\n * `fromRaf`, etc.) without pulling in `node:fs`/`node:path`.\n */\n\nimport { existsSync, watch } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport {\n\tDATA,\n\tERROR,\n\ttype Message,\n\ttype Node,\n\ttype NodeOptions,\n\tnode,\n\twallClockNs,\n} from \"@graphrefly/pure-ts/core\";\nimport { globToRegExp, matchesAnyPattern } from \"@graphrefly/pure-ts/extra\";\n\ntype ExtraOpts = Omit<NodeOptions<unknown>, \"describeKind\">;\n\nfunction sourceOpts<T = unknown>(opts?: ExtraOpts): NodeOptions<T> {\n\treturn { describeKind: \"producer\", ...opts } as NodeOptions<T>;\n}\n\nexport type FSEventType = \"change\" | \"rename\" | \"create\" | \"delete\";\nexport type FSEvent = {\n\ttype: FSEventType;\n\tpath: string;\n\troot: string;\n\trelative_path: string;\n\tsrc_path?: string;\n\tdest_path?: string;\n\ttimestamp_ns: number;\n};\n\nexport type FromFSWatchOptions = ExtraOpts & {\n\trecursive?: boolean;\n\tdebounce?: number;\n\tinclude?: string[];\n\texclude?: string[];\n};\n\n/**\n * Watches filesystem paths and emits debounced change events.\n *\n * Uses `fs.watch` only (no polling fallback). Teardown closes all watchers.\n *\n * @category extra\n */\nexport function fromFSWatch(paths: string | string[], opts?: FromFSWatchOptions): Node<FSEvent> {\n\tconst list = Array.isArray(paths) ? paths : [paths];\n\tif (list.length === 0) {\n\t\tthrow new RangeError(\"fromFSWatch expects at least one path\");\n\t}\n\tconst { recursive = true, debounce = 100, include, exclude, ...rest } = opts ?? {};\n\tconst includePatterns = include?.map(globToRegExp) ?? [];\n\tconst excludePatterns = (exclude ?? [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\"]).map(\n\t\tglobToRegExp,\n\t);\n\treturn node<FSEvent>((_data, a) => {\n\t\tconst pending = new Map<string, FSEvent>();\n\t\tconst watchers: ReturnType<typeof watch>[] = [];\n\t\tlet stopped = false;\n\t\tlet terminalEmitted = false;\n\t\tlet generation = 0;\n\t\tconst closeWatchers = () => {\n\t\t\tfor (const watcher of watchers.splice(0)) watcher.close();\n\t\t};\n\t\tconst emitError = (err: unknown) => {\n\t\t\tif (terminalEmitted) return;\n\t\t\tterminalEmitted = true;\n\t\t\tstopped = true;\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\ttimer = undefined;\n\t\t\tpending.clear();\n\t\t\tcloseWatchers();\n\t\t\ta.down([[ERROR, err]]);\n\t\t};\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst flush = (token: number) => {\n\t\t\ttimer = undefined;\n\t\t\tif (stopped || terminalEmitted) return;\n\t\t\tif (pending.size === 0) return;\n\t\t\tconst batchMessages: Message[] = [];\n\t\t\tfor (const evt of pending.values()) batchMessages.push([DATA, evt]);\n\t\t\tpending.clear();\n\t\t\tif (stopped || terminalEmitted || token !== generation) return;\n\t\t\ta.down(batchMessages);\n\t\t};\n\t\ttry {\n\t\t\tfor (const basePath of list) {\n\t\t\t\tconst watcher = watch(\n\t\t\t\t\tbasePath,\n\t\t\t\t\t{ recursive },\n\t\t\t\t\t(eventType: \"rename\" | \"change\", fileName: string | Buffer | null) => {\n\t\t\t\t\t\tif (stopped || terminalEmitted) return;\n\t\t\t\t\t\tif (fileName == null) return;\n\t\t\t\t\t\tconst rel = String(fileName).replaceAll(\"\\\\\", \"/\");\n\t\t\t\t\t\tconst abs = resolvePath(basePath, String(fileName));\n\t\t\t\t\t\tconst normalized = abs.replaceAll(\"\\\\\", \"/\");\n\t\t\t\t\t\tconst root = resolvePath(basePath).replaceAll(\"\\\\\", \"/\");\n\t\t\t\t\t\tconst relForMatch = rel.startsWith(\"./\") ? rel.slice(2) : rel;\n\t\t\t\t\t\tconst included =\n\t\t\t\t\t\t\tincludePatterns.length === 0 ||\n\t\t\t\t\t\t\tmatchesAnyPattern(normalized, includePatterns) ||\n\t\t\t\t\t\t\tmatchesAnyPattern(relForMatch, includePatterns);\n\t\t\t\t\t\tif (!included) return;\n\t\t\t\t\t\tconst excluded =\n\t\t\t\t\t\t\tmatchesAnyPattern(normalized, excludePatterns) ||\n\t\t\t\t\t\t\tmatchesAnyPattern(relForMatch, excludePatterns);\n\t\t\t\t\t\tif (excluded) return;\n\t\t\t\t\t\tlet kind: FSEventType = \"change\";\n\t\t\t\t\t\tif (eventType === \"rename\") {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tkind = existsSync(normalized) ? \"create\" : \"delete\";\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tkind = \"rename\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpending.set(normalized, {\n\t\t\t\t\t\t\ttype: kind,\n\t\t\t\t\t\t\tpath: normalized,\n\t\t\t\t\t\t\troot,\n\t\t\t\t\t\t\trelative_path: relForMatch,\n\t\t\t\t\t\t\ttimestamp_ns: wallClockNs(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\t\t\t\tconst token = generation;\n\t\t\t\t\t\ttimer = setTimeout(() => flush(token), debounce);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\twatcher.on(\"error\", (err) => emitError(err));\n\t\t\t\twatchers.push(watcher);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\temitError(err);\n\t\t}\n\t\treturn () => {\n\t\t\tstopped = true;\n\t\t\tgeneration += 1;\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\ttimer = undefined;\n\t\t\tcloseWatchers();\n\t\t\tpending.clear();\n\t\t};\n\t}, sourceOpts(rest));\n}\n","/**\n * Git hook source — Node-only reactive source that polls a repository's HEAD\n * and emits structured `GitEvent`s on every new commit.\n *\n * Isolated from `./adapters.ts` so that the universal `extra/index` barrel\n * stays browser-safe. Access via `@graphrefly/graphrefly/extra/node`, which\n * re-exports this module.\n *\n * @module\n */\n\nimport { ERROR, type Node, type NodeOptions, node, wallClockNs } from \"@graphrefly/pure-ts/core\";\nimport { fromTimer, globToRegExp, matchesAnyPattern, switchMap } from \"@graphrefly/pure-ts/extra\";\n\ntype ExtraOpts = Omit<NodeOptions, \"describeKind\">;\n\n/** Git hook type for {@link fromGitHook}. */\nexport type GitHookType = \"post-commit\" | \"post-merge\" | \"post-checkout\" | \"post-rewrite\";\n\n/** Structured git event emitted by {@link fromGitHook}. */\nexport type GitEvent = {\n\thook: GitHookType;\n\tcommit: string;\n\tfiles: string[];\n\tmessage: string;\n\tauthor: string;\n\ttimestamp_ns: number;\n};\n\n/** Options for {@link fromGitHook}. */\nexport type FromGitHookOptions = ExtraOpts & {\n\tpollMs?: number;\n\tinclude?: string[];\n\texclude?: string[];\n\t/**\n\t * Maximum consecutive poll errors before terminating the source. Prevents\n\t * error storms when the repository is unavailable (e.g. deleted, corrupt,\n\t * permissions lost). Default: `1` (terminate on first error — preserves\n\t * pre-switchMap back-compat). Raise it (or set `Infinity`) to keep\n\t * retrying indefinitely (legacy behavior).\n\t */\n\tmaxConsecutiveErrors?: number;\n};\n\n/**\n * Git change detection as a reactive source.\n *\n * @category extra\n */\nexport function fromGitHook(repoPath: string, opts?: FromGitHookOptions): Node<GitEvent> {\n\tconst { pollMs = 5000, include, exclude, maxConsecutiveErrors = 1 } = opts ?? {};\n\tconst includePatterns = include?.map(globToRegExp) ?? [];\n\tconst excludePatterns = exclude?.map(globToRegExp) ?? [];\n\tconst { execFileSync } = require(\"node:child_process\") as typeof import(\"node:child_process\");\n\n\tconst gitQuery = (args: string[]): string =>\n\t\texecFileSync(\"git\", args, { cwd: repoPath, encoding: \"utf-8\" }).trim();\n\n\t// Shared across ticks: the previous HEAD we committed to. Undefined on the\n\t// very first poll (we record the initial HEAD without emitting).\n\tlet lastSeen: string | undefined;\n\t// Circuit breaker: consecutive error count. Resets on any successful poll.\n\tlet consecutiveErrors = 0;\n\n\t// `fromTimer | switchMap(sync-git-diff)` — ticks drive the poll, switchMap\n\t// cancels any in-flight inner on next tick. First tick at t=0 records the\n\t// baseline HEAD silently; subsequent ticks emit `GitEvent` on HEAD change.\n\treturn switchMap(fromTimer(0, { period: pollMs }), () =>\n\t\tnode<GitEvent>((_data, a) => {\n\t\t\ttry {\n\t\t\t\tconst head = gitQuery([\"rev-parse\", \"HEAD\"]);\n\t\t\t\tif (!head) {\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\treturn () => {};\n\t\t\t\t}\n\t\t\t\tif (lastSeen === undefined) {\n\t\t\t\t\t// First poll: record baseline; stay idle until next tick\n\t\t\t\t\t// disposes this inner.\n\t\t\t\t\tlastSeen = head;\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\treturn () => {};\n\t\t\t\t}\n\t\t\t\tif (head === lastSeen) {\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\treturn () => {};\n\t\t\t\t}\n\t\t\t\tlet files = gitQuery([\"diff\", \"--name-only\", `${lastSeen}..${head}`])\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tif (includePatterns.length > 0) {\n\t\t\t\t\tfiles = files.filter((f) => matchesAnyPattern(f, includePatterns));\n\t\t\t\t}\n\t\t\t\tif (excludePatterns.length > 0) {\n\t\t\t\t\tfiles = files.filter((f) => !matchesAnyPattern(f, excludePatterns));\n\t\t\t\t}\n\t\t\t\tconst message = gitQuery([\"log\", \"-1\", \"--format=%s\", head]);\n\t\t\t\tconst author = gitQuery([\"log\", \"-1\", \"--format=%an\", head]);\n\t\t\t\ta.emit({\n\t\t\t\t\thook: \"post-commit\" as GitHookType,\n\t\t\t\t\tcommit: head,\n\t\t\t\t\tfiles,\n\t\t\t\t\tmessage,\n\t\t\t\t\tauthor,\n\t\t\t\t\ttimestamp_ns: wallClockNs(),\n\t\t\t\t});\n\t\t\t\tlastSeen = head;\n\t\t\t\tconsecutiveErrors = 0;\n\t\t\t} catch (err) {\n\t\t\t\tconsecutiveErrors += 1;\n\t\t\t\tif (consecutiveErrors >= maxConsecutiveErrors) {\n\t\t\t\t\ta.down([[ERROR, err]]);\n\t\t\t\t}\n\t\t\t\t// else: transient error — next tick will retry; don't spam ERROR.\n\t\t\t}\n\t\t\treturn () => {};\n\t\t}),\n\t);\n}\n","/**\n * Child-process reactive sources — Node-only.\n *\n * Isolated from `./sources.ts` so bundlers targeting the browser can import\n * browser-safe sources without pulling in `node:child_process`.\n *\n * Access via `@graphrefly/graphrefly/extra/node`, which re-exports this module.\n *\n * @module\n */\n\nimport { type SpawnOptions, spawn } from \"node:child_process\";\nimport { COMPLETE, DATA, ERROR, type Messages, type Node, node } from \"@graphrefly/pure-ts/core\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * SpawnEvent — discriminated stream emitted by {@link fromSpawn}.\n *\n * @category extra\n */\nexport type SpawnEvent =\n\t| { kind: \"stdout\"; chunk: Buffer }\n\t| { kind: \"stderr\"; chunk: Buffer }\n\t| { kind: \"exit\"; code: number | null; signal: NodeJS.Signals | null };\n\n/** Options for {@link fromSpawn}. Mirrors `child_process.SpawnOptions`. */\nexport interface FromSpawnOptions {\n\tcwd?: string;\n\tenv?: NodeJS.ProcessEnv;\n\tshell?: boolean | string;\n\t/**\n\t * Optional caller-owned AbortSignal. When fired, the subprocess is sent\n\t * SIGTERM (per `child_process.spawn` signal semantics). The producer's own\n\t * teardown also sends SIGTERM regardless of caller signal — so `switchMap`\n\t * supersede in `actuatorExecutor` cancels in-flight subprocesses without\n\t * the caller wiring extra signals.\n\t */\n\tsignal?: AbortSignal;\n\t/** Extra args forwarded to spawn — e.g. stdio configuration. */\n\tstdio?: \"pipe\" | readonly (\"pipe\" | \"ignore\" | \"inherit\")[];\n}\n\n// ---------------------------------------------------------------------------\n// fromSpawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `cmd args` as a child process and stream stdout/stderr/exit as a\n * single discriminated `SpawnEvent` stream.\n *\n * Lifecycle:\n * - Stdout/stderr chunks emit as `DATA { kind: \"stdout\"|\"stderr\", chunk }`.\n * - Process exit emits one final `DATA { kind: \"exit\", code, signal }` then\n * `COMPLETE`.\n * - Spawn-error (ENOENT, EPERM, …) emits `ERROR`.\n * - Producer teardown sends `SIGTERM` to the subprocess if it is still alive.\n *\n * **Multicast semantics:** `fromSpawn` returns a node backed by a single\n * `producer` activation — the subprocess is spawned once when the first\n * subscriber connects, and all subsequent subscribers share the same event\n * stream. Unsubscribing the last subscriber tears down the subprocess.\n *\n * @example\n * ```ts\n * import { fromSpawn } from \"@graphrefly/graphrefly/extra/node\";\n *\n * const stream = fromSpawn(\"git\", [\"log\", \"--oneline\"]);\n * stream.subscribe((msgs) => {\n * for (const [type, value] of msgs) {\n * if (type === DATA) console.log(value);\n * }\n * });\n * ```\n *\n * @category extra\n */\nexport function fromSpawn(\n\tcmd: string,\n\targs: readonly string[],\n\topts?: FromSpawnOptions,\n): Node<SpawnEvent> {\n\treturn node<SpawnEvent>(\n\t\t(_data, actions) => {\n\t\t\tconst child = spawn(cmd, args as string[], {\n\t\t\t\tcwd: opts?.cwd,\n\t\t\t\tenv: opts?.env,\n\t\t\t\tshell: opts?.shell,\n\t\t\t\tsignal: opts?.signal,\n\t\t\t\tstdio: (opts?.stdio as SpawnOptions[\"stdio\"]) ?? \"pipe\",\n\t\t\t});\n\n\t\t\tlet alive = true;\n\t\t\tlet exitInfo: { code: number | null; signal: NodeJS.Signals | null } | null = null;\n\n\t\t\tchild.stdout?.on(\"data\", (chunk: Buffer) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\tactions.down([[DATA, { kind: \"stdout\", chunk }]] satisfies Messages);\n\t\t\t});\n\n\t\t\tchild.stderr?.on(\"data\", (chunk: Buffer) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\tactions.down([[DATA, { kind: \"stderr\", chunk }]] satisfies Messages);\n\t\t\t});\n\n\t\t\tchild.on(\"error\", (err) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\talive = false;\n\t\t\t\tactions.down([[ERROR, err]] satisfies Messages);\n\t\t\t});\n\n\t\t\tchild.on(\"exit\", (code, signal) => {\n\t\t\t\t// Capture exit info, but defer terminal emission to \"close\" — by which\n\t\t\t\t// time all stdout/stderr \"data\" events have been delivered.\n\t\t\t\tif (exitInfo == null) exitInfo = { code, signal: signal as NodeJS.Signals | null };\n\t\t\t});\n\n\t\t\tchild.on(\"close\", () => {\n\t\t\t\tif (!alive) return;\n\t\t\t\talive = false;\n\t\t\t\tconst info = exitInfo ?? { code: null, signal: null };\n\t\t\t\tactions.down([\n\t\t\t\t\t[DATA, { kind: \"exit\", code: info.code, signal: info.signal }],\n\t\t\t\t\t[COMPLETE],\n\t\t\t\t] satisfies Messages);\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tif (alive) {\n\t\t\t\t\talive = false;\n\t\t\t\t\tchild.stdout?.removeAllListeners();\n\t\t\t\t\tchild.stderr?.removeAllListeners();\n\t\t\t\t\tchild.removeAllListeners(\"error\");\n\t\t\t\t\tchild.removeAllListeners(\"exit\");\n\t\t\t\t\tchild.removeAllListeners(\"close\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// already dead — ignore\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t{ name: \"from_spawn\" },\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// runProcess\n// ---------------------------------------------------------------------------\n\n/**\n * Run `cmd args` to completion and emit one DATA with aggregated output.\n *\n * Convenience over {@link fromSpawn} for the \"wait for the process to finish,\n * capture stdout/stderr as strings, get exit code\" case.\n *\n * Aggregation policy: stdout and stderr are concatenated as `Buffer`s and\n * decoded as utf-8 once at exit, so multi-byte sequences split across chunks\n * are handled correctly. Actuators that need byte-exact stdout should use\n * `fromSpawn` directly.\n *\n * @example\n * ```ts\n * import { runProcess } from \"@graphrefly/graphrefly/extra/node\";\n *\n * const result = runProcess(\"git\", [\"rev-parse\", \"HEAD\"]);\n * result.subscribe((msgs) => {\n * for (const [type, value] of msgs) {\n * if (type === DATA) console.log(value.stdout.trim());\n * }\n * });\n * ```\n *\n * @category extra\n */\nexport function runProcess(\n\tcmd: string,\n\targs: readonly string[],\n\topts?: FromSpawnOptions,\n): Node<{\n\tstdout: string;\n\tstderr: string;\n\texitCode: number | null;\n\tsignal: NodeJS.Signals | null;\n}> {\n\ttype Result = {\n\t\tstdout: string;\n\t\tstderr: string;\n\t\texitCode: number | null;\n\t\tsignal: NodeJS.Signals | null;\n\t};\n\treturn node<Result>(\n\t\t(_data, actions) => {\n\t\t\tconst child = spawn(cmd, args as string[], {\n\t\t\t\tcwd: opts?.cwd,\n\t\t\t\tenv: opts?.env,\n\t\t\t\tshell: opts?.shell,\n\t\t\t\tsignal: opts?.signal,\n\t\t\t\tstdio: (opts?.stdio as SpawnOptions[\"stdio\"]) ?? \"pipe\",\n\t\t\t});\n\n\t\t\tlet alive = true;\n\t\t\tconst stdoutChunks: Buffer[] = [];\n\t\t\tconst stderrChunks: Buffer[] = [];\n\t\t\tlet exitInfo: { code: number | null; signal: NodeJS.Signals | null } | null = null;\n\n\t\t\tchild.stdout?.on(\"data\", (chunk: Buffer) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\tstdoutChunks.push(chunk);\n\t\t\t});\n\n\t\t\tchild.stderr?.on(\"data\", (chunk: Buffer) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\tstderrChunks.push(chunk);\n\t\t\t});\n\n\t\t\tchild.on(\"error\", (err) => {\n\t\t\t\tif (!alive) return;\n\t\t\t\talive = false;\n\t\t\t\tactions.down([[ERROR, err]] satisfies Messages);\n\t\t\t});\n\n\t\t\tchild.on(\"exit\", (code, signal) => {\n\t\t\t\t// Capture exit info, but defer terminal emission to \"close\" — by which\n\t\t\t\t// time all stdout/stderr \"data\" events have been delivered.\n\t\t\t\tif (exitInfo == null) exitInfo = { code, signal: signal as NodeJS.Signals | null };\n\t\t\t});\n\n\t\t\tchild.on(\"close\", () => {\n\t\t\t\tif (!alive) return;\n\t\t\t\talive = false;\n\t\t\t\tconst info = exitInfo ?? { code: null, signal: null };\n\t\t\t\tconst stdout = Buffer.concat(stdoutChunks).toString(\"utf8\");\n\t\t\t\tconst stderr = Buffer.concat(stderrChunks).toString(\"utf8\");\n\t\t\t\tactions.down([\n\t\t\t\t\t[\n\t\t\t\t\t\tDATA,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstdout,\n\t\t\t\t\t\t\tstderr,\n\t\t\t\t\t\t\texitCode: info.code,\n\t\t\t\t\t\t\tsignal: info.signal,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t[COMPLETE],\n\t\t\t\t] satisfies Messages);\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tif (alive) {\n\t\t\t\t\talive = false;\n\t\t\t\t\tchild.stdout?.removeAllListeners();\n\t\t\t\t\tchild.stderr?.removeAllListeners();\n\t\t\t\t\tchild.removeAllListeners(\"error\");\n\t\t\t\t\tchild.removeAllListeners(\"exit\");\n\t\t\t\t\tchild.removeAllListeners(\"close\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// already dead — ignore\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t{ name: \"run_process\" },\n\t);\n}\n"],"mappings":"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","names":["resolvePath","import_core","import_extra","import_core"]}
@@ -0,0 +1,185 @@
1
+ import { NodeOptions, Node } from '@graphrefly/pure-ts/core';
2
+
3
+ /**
4
+ * Filesystem-watching source. Isolated from `./sources.ts` so bundlers
5
+ * targeting the browser can import browser-safe sources (`fromTimer`,
6
+ * `fromRaf`, etc.) without pulling in `node:fs`/`node:path`.
7
+ */
8
+
9
+ type ExtraOpts$1 = Omit<NodeOptions<unknown>, "describeKind">;
10
+ type FSEventType = "change" | "rename" | "create" | "delete";
11
+ type FSEvent = {
12
+ type: FSEventType;
13
+ path: string;
14
+ root: string;
15
+ relative_path: string;
16
+ src_path?: string;
17
+ dest_path?: string;
18
+ timestamp_ns: number;
19
+ };
20
+ type FromFSWatchOptions = ExtraOpts$1 & {
21
+ recursive?: boolean;
22
+ debounce?: number;
23
+ include?: string[];
24
+ exclude?: string[];
25
+ };
26
+ /**
27
+ * Watches filesystem paths and emits debounced change events.
28
+ *
29
+ * Uses `fs.watch` only (no polling fallback). Teardown closes all watchers.
30
+ *
31
+ * @category extra
32
+ */
33
+ declare function fromFSWatch(paths: string | string[], opts?: FromFSWatchOptions): Node<FSEvent>;
34
+
35
+ /**
36
+ * Git hook source — Node-only reactive source that polls a repository's HEAD
37
+ * and emits structured `GitEvent`s on every new commit.
38
+ *
39
+ * Isolated from `./adapters.ts` so that the universal `extra/index` barrel
40
+ * stays browser-safe. Access via `@graphrefly/graphrefly/extra/node`, which
41
+ * re-exports this module.
42
+ *
43
+ * @module
44
+ */
45
+
46
+ type ExtraOpts = Omit<NodeOptions, "describeKind">;
47
+ /** Git hook type for {@link fromGitHook}. */
48
+ type GitHookType = "post-commit" | "post-merge" | "post-checkout" | "post-rewrite";
49
+ /** Structured git event emitted by {@link fromGitHook}. */
50
+ type GitEvent = {
51
+ hook: GitHookType;
52
+ commit: string;
53
+ files: string[];
54
+ message: string;
55
+ author: string;
56
+ timestamp_ns: number;
57
+ };
58
+ /** Options for {@link fromGitHook}. */
59
+ type FromGitHookOptions = ExtraOpts & {
60
+ pollMs?: number;
61
+ include?: string[];
62
+ exclude?: string[];
63
+ /**
64
+ * Maximum consecutive poll errors before terminating the source. Prevents
65
+ * error storms when the repository is unavailable (e.g. deleted, corrupt,
66
+ * permissions lost). Default: `1` (terminate on first error — preserves
67
+ * pre-switchMap back-compat). Raise it (or set `Infinity`) to keep
68
+ * retrying indefinitely (legacy behavior).
69
+ */
70
+ maxConsecutiveErrors?: number;
71
+ };
72
+ /**
73
+ * Git change detection as a reactive source.
74
+ *
75
+ * @category extra
76
+ */
77
+ declare function fromGitHook(repoPath: string, opts?: FromGitHookOptions): Node<GitEvent>;
78
+
79
+ /**
80
+ * Child-process reactive sources — Node-only.
81
+ *
82
+ * Isolated from `./sources.ts` so bundlers targeting the browser can import
83
+ * browser-safe sources without pulling in `node:child_process`.
84
+ *
85
+ * Access via `@graphrefly/graphrefly/extra/node`, which re-exports this module.
86
+ *
87
+ * @module
88
+ */
89
+
90
+ /**
91
+ * SpawnEvent — discriminated stream emitted by {@link fromSpawn}.
92
+ *
93
+ * @category extra
94
+ */
95
+ type SpawnEvent = {
96
+ kind: "stdout";
97
+ chunk: Buffer;
98
+ } | {
99
+ kind: "stderr";
100
+ chunk: Buffer;
101
+ } | {
102
+ kind: "exit";
103
+ code: number | null;
104
+ signal: NodeJS.Signals | null;
105
+ };
106
+ /** Options for {@link fromSpawn}. Mirrors `child_process.SpawnOptions`. */
107
+ interface FromSpawnOptions {
108
+ cwd?: string;
109
+ env?: NodeJS.ProcessEnv;
110
+ shell?: boolean | string;
111
+ /**
112
+ * Optional caller-owned AbortSignal. When fired, the subprocess is sent
113
+ * SIGTERM (per `child_process.spawn` signal semantics). The producer's own
114
+ * teardown also sends SIGTERM regardless of caller signal — so `switchMap`
115
+ * supersede in `actuatorExecutor` cancels in-flight subprocesses without
116
+ * the caller wiring extra signals.
117
+ */
118
+ signal?: AbortSignal;
119
+ /** Extra args forwarded to spawn — e.g. stdio configuration. */
120
+ stdio?: "pipe" | readonly ("pipe" | "ignore" | "inherit")[];
121
+ }
122
+ /**
123
+ * Spawn `cmd args` as a child process and stream stdout/stderr/exit as a
124
+ * single discriminated `SpawnEvent` stream.
125
+ *
126
+ * Lifecycle:
127
+ * - Stdout/stderr chunks emit as `DATA { kind: "stdout"|"stderr", chunk }`.
128
+ * - Process exit emits one final `DATA { kind: "exit", code, signal }` then
129
+ * `COMPLETE`.
130
+ * - Spawn-error (ENOENT, EPERM, …) emits `ERROR`.
131
+ * - Producer teardown sends `SIGTERM` to the subprocess if it is still alive.
132
+ *
133
+ * **Multicast semantics:** `fromSpawn` returns a node backed by a single
134
+ * `producer` activation — the subprocess is spawned once when the first
135
+ * subscriber connects, and all subsequent subscribers share the same event
136
+ * stream. Unsubscribing the last subscriber tears down the subprocess.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * import { fromSpawn } from "@graphrefly/graphrefly/extra/node";
141
+ *
142
+ * const stream = fromSpawn("git", ["log", "--oneline"]);
143
+ * stream.subscribe((msgs) => {
144
+ * for (const [type, value] of msgs) {
145
+ * if (type === DATA) console.log(value);
146
+ * }
147
+ * });
148
+ * ```
149
+ *
150
+ * @category extra
151
+ */
152
+ declare function fromSpawn(cmd: string, args: readonly string[], opts?: FromSpawnOptions): Node<SpawnEvent>;
153
+ /**
154
+ * Run `cmd args` to completion and emit one DATA with aggregated output.
155
+ *
156
+ * Convenience over {@link fromSpawn} for the "wait for the process to finish,
157
+ * capture stdout/stderr as strings, get exit code" case.
158
+ *
159
+ * Aggregation policy: stdout and stderr are concatenated as `Buffer`s and
160
+ * decoded as utf-8 once at exit, so multi-byte sequences split across chunks
161
+ * are handled correctly. Actuators that need byte-exact stdout should use
162
+ * `fromSpawn` directly.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * import { runProcess } from "@graphrefly/graphrefly/extra/node";
167
+ *
168
+ * const result = runProcess("git", ["rev-parse", "HEAD"]);
169
+ * result.subscribe((msgs) => {
170
+ * for (const [type, value] of msgs) {
171
+ * if (type === DATA) console.log(value.stdout.trim());
172
+ * }
173
+ * });
174
+ * ```
175
+ *
176
+ * @category extra
177
+ */
178
+ declare function runProcess(cmd: string, args: readonly string[], opts?: FromSpawnOptions): Node<{
179
+ stdout: string;
180
+ stderr: string;
181
+ exitCode: number | null;
182
+ signal: NodeJS.Signals | null;
183
+ }>;
184
+
185
+ export { type FSEvent, type FSEventType, type FromFSWatchOptions, type FromGitHookOptions, type FromSpawnOptions, type GitEvent, type GitHookType, type SpawnEvent, fromFSWatch, fromGitHook, fromSpawn, runProcess };