@nicia-ai/typegraph 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 (384) hide show
  1. package/dist/backend/drizzle/indexes.cjs +11 -11
  2. package/dist/backend/drizzle/indexes.d.cts +1 -1
  3. package/dist/backend/drizzle/indexes.d.ts +1 -1
  4. package/dist/backend/drizzle/indexes.js +7 -7
  5. package/dist/backend/index.cjs +53 -54
  6. package/dist/backend/index.d.cts +3 -3
  7. package/dist/backend/index.d.ts +3 -3
  8. package/dist/backend/index.js +13 -14
  9. package/dist/backend/postgres/index.cjs +29 -30
  10. package/dist/backend/postgres/index.d.cts +7 -7
  11. package/dist/backend/postgres/index.d.ts +7 -7
  12. package/dist/backend/postgres/index.js +16 -17
  13. package/dist/backend/postgres/pglite-store.cjs +48 -42
  14. package/dist/backend/postgres/pglite-store.cjs.map +1 -1
  15. package/dist/backend/postgres/pglite-store.d.cts +15 -9
  16. package/dist/backend/postgres/pglite-store.d.ts +15 -9
  17. package/dist/backend/postgres/pglite-store.js +44 -38
  18. package/dist/backend/postgres/pglite-store.js.map +1 -1
  19. package/dist/backend/postgres/pglite.cjs +18 -19
  20. package/dist/backend/postgres/pglite.d.cts +4 -4
  21. package/dist/backend/postgres/pglite.d.ts +4 -4
  22. package/dist/backend/postgres/pglite.js +17 -18
  23. package/dist/backend/sqlite/index.cjs +26 -27
  24. package/dist/backend/sqlite/index.d.cts +6 -6
  25. package/dist/backend/sqlite/index.d.ts +6 -6
  26. package/dist/backend/sqlite/index.js +14 -15
  27. package/dist/backend/sqlite/libsql.cjs +21 -22
  28. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  29. package/dist/backend/sqlite/libsql.d.cts +15 -8
  30. package/dist/backend/sqlite/libsql.d.ts +15 -8
  31. package/dist/backend/sqlite/libsql.js +17 -18
  32. package/dist/backend/sqlite/libsql.js.map +1 -1
  33. package/dist/backend/sqlite/local-store.cjs +49 -43
  34. package/dist/backend/sqlite/local-store.cjs.map +1 -1
  35. package/dist/backend/sqlite/local-store.d.cts +15 -10
  36. package/dist/backend/sqlite/local-store.d.ts +15 -10
  37. package/dist/backend/sqlite/local-store.js +45 -39
  38. package/dist/backend/sqlite/local-store.js.map +1 -1
  39. package/dist/backend/sqlite/local.cjs +19 -20
  40. package/dist/backend/sqlite/local.d.cts +3 -3
  41. package/dist/backend/sqlite/local.d.ts +3 -3
  42. package/dist/backend/sqlite/local.js +17 -18
  43. package/dist/{chunk-S3ZRKJHY.js → chunk-2LG2XB2M.js} +3 -3
  44. package/dist/{chunk-S3ZRKJHY.js.map → chunk-2LG2XB2M.js.map} +1 -1
  45. package/dist/{chunk-7PF2L3H6.cjs → chunk-2NA5DYLO.cjs} +4 -4
  46. package/dist/{chunk-7PF2L3H6.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
  47. package/dist/{chunk-VVQM4CZD.cjs → chunk-3DHZCOT7.cjs} +20 -20
  48. package/dist/{chunk-VVQM4CZD.cjs.map → chunk-3DHZCOT7.cjs.map} +1 -1
  49. package/dist/{chunk-JXUTCSXX.cjs → chunk-4UGOKMI5.cjs} +250 -158
  50. package/dist/chunk-4UGOKMI5.cjs.map +1 -0
  51. package/dist/{chunk-RFRM3Q5K.js → chunk-5262ZMTR.js} +14 -5
  52. package/dist/chunk-5262ZMTR.js.map +1 -0
  53. package/dist/{chunk-QRNYDV5Z.js → chunk-5763DULU.js} +214 -69
  54. package/dist/chunk-5763DULU.js.map +1 -0
  55. package/dist/{chunk-BGYJW37L.js → chunk-5UVRGXD3.js} +277 -7
  56. package/dist/chunk-5UVRGXD3.js.map +1 -0
  57. package/dist/{chunk-QR24DJDF.cjs → chunk-62ZP23AW.cjs} +15 -15
  58. package/dist/{chunk-QR24DJDF.cjs.map → chunk-62ZP23AW.cjs.map} +1 -1
  59. package/dist/{chunk-S4KQ5LV4.js → chunk-775A4ZMN.js} +40 -6
  60. package/dist/chunk-775A4ZMN.js.map +1 -0
  61. package/dist/{chunk-J2ICGNHO.cjs → chunk-7BQXPCGN.cjs} +830 -169
  62. package/dist/chunk-7BQXPCGN.cjs.map +1 -0
  63. package/dist/{chunk-FJMPR3OH.cjs → chunk-7EO3TCQB.cjs} +33 -7
  64. package/dist/chunk-7EO3TCQB.cjs.map +1 -0
  65. package/dist/{chunk-UCQ3BFSY.cjs → chunk-7GT72YHH.cjs} +682 -332
  66. package/dist/chunk-7GT72YHH.cjs.map +1 -0
  67. package/dist/{chunk-DXEEHSGN.js → chunk-7VQXLT5O.js} +436 -43
  68. package/dist/chunk-7VQXLT5O.js.map +1 -0
  69. package/dist/{chunk-ID4WXTKL.js → chunk-7Z5OR7KO.js} +2360 -605
  70. package/dist/chunk-7Z5OR7KO.js.map +1 -0
  71. package/dist/chunk-A4OC4DVN.cjs +12 -0
  72. package/dist/{chunk-4SZ6XPTG.cjs.map → chunk-A4OC4DVN.cjs.map} +1 -1
  73. package/dist/{chunk-TDXIBCGY.cjs → chunk-A7J2YDDI.cjs} +5 -3
  74. package/dist/chunk-A7J2YDDI.cjs.map +1 -0
  75. package/dist/{chunk-55ITBQJI.js → chunk-AKLS3BYZ.js} +56 -5
  76. package/dist/chunk-AKLS3BYZ.js.map +1 -0
  77. package/dist/{chunk-D7PG5D5K.js → chunk-AMKPPFUO.js} +32 -6
  78. package/dist/chunk-AMKPPFUO.js.map +1 -0
  79. package/dist/{chunk-WUFASQUO.js → chunk-ASTI57H3.js} +3 -3
  80. package/dist/{chunk-WUFASQUO.js.map → chunk-ASTI57H3.js.map} +1 -1
  81. package/dist/{chunk-4QIKLIGG.js → chunk-BKCUOV7A.js} +15 -5
  82. package/dist/chunk-BKCUOV7A.js.map +1 -0
  83. package/dist/{chunk-JQXSZHF2.cjs → chunk-BSFJMMV3.cjs} +134 -7
  84. package/dist/chunk-BSFJMMV3.cjs.map +1 -0
  85. package/dist/{chunk-4GUTQPVO.js → chunk-C23WSN5E.js} +185 -24
  86. package/dist/chunk-C23WSN5E.js.map +1 -0
  87. package/dist/{chunk-QLUXRWKL.js → chunk-CBTIUB76.js} +3 -3
  88. package/dist/{chunk-QLUXRWKL.js.map → chunk-CBTIUB76.js.map} +1 -1
  89. package/dist/chunk-CNV4TXJG.js +58 -0
  90. package/dist/chunk-CNV4TXJG.js.map +1 -0
  91. package/dist/{chunk-QB6VMOJ2.cjs → chunk-CXBHOOIQ.cjs} +45 -10
  92. package/dist/chunk-CXBHOOIQ.cjs.map +1 -0
  93. package/dist/{chunk-FL5UQRES.js → chunk-DCQVHAYQ.js} +5 -5
  94. package/dist/{chunk-FL5UQRES.js.map → chunk-DCQVHAYQ.js.map} +1 -1
  95. package/dist/chunk-DLNROMQ7.js +306 -0
  96. package/dist/chunk-DLNROMQ7.js.map +1 -0
  97. package/dist/chunk-DYATYRY4.js +47 -0
  98. package/dist/chunk-DYATYRY4.js.map +1 -0
  99. package/dist/chunk-E4WNQBEF.cjs +217 -0
  100. package/dist/chunk-E4WNQBEF.cjs.map +1 -0
  101. package/dist/{chunk-G6Q5UM7U.js → chunk-FWJKWH6U.js} +5 -3
  102. package/dist/chunk-FWJKWH6U.js.map +1 -0
  103. package/dist/{chunk-VTN3C3CH.js → chunk-HFHTMECK.js} +7 -7
  104. package/dist/{chunk-VTN3C3CH.js.map → chunk-HFHTMECK.js.map} +1 -1
  105. package/dist/{chunk-FLEQ2HBK.js → chunk-I5MOXA4H.js} +20 -14
  106. package/dist/chunk-I5MOXA4H.js.map +1 -0
  107. package/dist/{chunk-4MB3AQAQ.js → chunk-J3WZ3FA2.js} +77 -3
  108. package/dist/chunk-J3WZ3FA2.js.map +1 -0
  109. package/dist/{chunk-UR7W5YQK.js → chunk-JBQQ7THH.js} +5 -3
  110. package/dist/chunk-JBQQ7THH.js.map +1 -0
  111. package/dist/chunk-JIVMTW7W.js +3393 -0
  112. package/dist/chunk-JIVMTW7W.js.map +1 -0
  113. package/dist/{chunk-TKP5T34P.js → chunk-JXA2ZP2Q.js} +6 -16
  114. package/dist/chunk-JXA2ZP2Q.js.map +1 -0
  115. package/dist/{chunk-GYA4JRP5.js → chunk-JXXDZTMN.js} +2 -2
  116. package/dist/chunk-JXXDZTMN.js.map +1 -0
  117. package/dist/chunk-JZUR7ZWE.js +254 -0
  118. package/dist/chunk-JZUR7ZWE.js.map +1 -0
  119. package/dist/{chunk-42PYUGLS.js → chunk-K5ELX2GT.js} +108 -8
  120. package/dist/chunk-K5ELX2GT.js.map +1 -0
  121. package/dist/{chunk-D54WH24V.cjs → chunk-LBJKZXDE.cjs} +115 -13
  122. package/dist/chunk-LBJKZXDE.cjs.map +1 -0
  123. package/dist/{chunk-4MEWSUVM.cjs → chunk-M4BDU5RX.cjs} +12 -12
  124. package/dist/chunk-M4BDU5RX.cjs.map +1 -0
  125. package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
  126. package/dist/chunk-MSY7FSX4.js.map +1 -0
  127. package/dist/{chunk-H7VE3FL4.cjs → chunk-MUK4BU7K.cjs} +519 -125
  128. package/dist/chunk-MUK4BU7K.cjs.map +1 -0
  129. package/dist/{chunk-D56XG4EI.cjs → chunk-MXJDTH5B.cjs} +56 -45
  130. package/dist/chunk-MXJDTH5B.cjs.map +1 -0
  131. package/dist/{chunk-ZI6VQSZA.cjs → chunk-N3257XE6.cjs} +724 -577
  132. package/dist/chunk-N3257XE6.cjs.map +1 -0
  133. package/dist/chunk-N66HCGCY.cjs +57 -0
  134. package/dist/chunk-N66HCGCY.cjs.map +1 -0
  135. package/dist/{chunk-CPEL3YIR.cjs → chunk-NFCVHQ5P.cjs} +55 -22
  136. package/dist/chunk-NFCVHQ5P.cjs.map +1 -0
  137. package/dist/{chunk-C4F7VJ5D.cjs → chunk-NI72YOJB.cjs} +84 -2
  138. package/dist/chunk-NI72YOJB.cjs.map +1 -0
  139. package/dist/{chunk-BNS75YNF.cjs → chunk-NK5Q7UNE.cjs} +10 -20
  140. package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
  141. package/dist/{chunk-YMTXMPV6.js → chunk-NMWDXFPH.js} +4 -4
  142. package/dist/{chunk-YMTXMPV6.js.map → chunk-NMWDXFPH.js.map} +1 -1
  143. package/dist/{chunk-TKORQCG4.js → chunk-NQ6BRJBE.js} +386 -862
  144. package/dist/chunk-NQ6BRJBE.js.map +1 -0
  145. package/dist/chunk-OH5E5KIO.js +2057 -0
  146. package/dist/chunk-OH5E5KIO.js.map +1 -0
  147. package/dist/chunk-ONU3HIED.cjs +2082 -0
  148. package/dist/chunk-ONU3HIED.cjs.map +1 -0
  149. package/dist/{chunk-NAAMUYMS.cjs → chunk-PNN7RHVR.cjs} +58 -48
  150. package/dist/chunk-PNN7RHVR.cjs.map +1 -0
  151. package/dist/{chunk-6DCB664D.js → chunk-PQBQG7IM.js} +3 -3
  152. package/dist/{chunk-6DCB664D.js.map → chunk-PQBQG7IM.js.map} +1 -1
  153. package/dist/{chunk-ACSVZPK7.cjs → chunk-PWLJ77UV.cjs} +5 -3
  154. package/dist/chunk-PWLJ77UV.cjs.map +1 -0
  155. package/dist/chunk-Q7Q4WSLJ.cjs +328 -0
  156. package/dist/chunk-Q7Q4WSLJ.cjs.map +1 -0
  157. package/dist/{chunk-FQ7ZPOTZ.js → chunk-QLRESYPU.js} +637 -493
  158. package/dist/chunk-QLRESYPU.js.map +1 -0
  159. package/dist/{chunk-Q6EDCUXV.js → chunk-QWX5YA3K.js} +554 -204
  160. package/dist/chunk-QWX5YA3K.js.map +1 -0
  161. package/dist/{chunk-5EKPX6QU.js → chunk-RJS7DECT.js} +8 -9
  162. package/dist/chunk-RJS7DECT.js.map +1 -0
  163. package/dist/{chunk-Z3WO6MND.cjs → chunk-RMQLSPA2.cjs} +297 -27
  164. package/dist/chunk-RMQLSPA2.cjs.map +1 -0
  165. package/dist/{chunk-SJDMVITW.cjs → chunk-RT5ZY4XA.cjs} +6 -5
  166. package/dist/chunk-RT5ZY4XA.cjs.map +1 -0
  167. package/dist/{chunk-4GUBTVPV.js → chunk-T4XNKYXB.js} +780 -126
  168. package/dist/chunk-T4XNKYXB.js.map +1 -0
  169. package/dist/{chunk-YDWLUT5V.cjs → chunk-TQR4KBY2.cjs} +323 -178
  170. package/dist/chunk-TQR4KBY2.cjs.map +1 -0
  171. package/dist/chunk-TTAITEPJ.cjs +755 -0
  172. package/dist/chunk-TTAITEPJ.cjs.map +1 -0
  173. package/dist/{chunk-OOA273IJ.cjs → chunk-U5SON7R2.cjs} +27 -27
  174. package/dist/{chunk-OOA273IJ.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
  175. package/dist/{chunk-IX64T5OL.cjs → chunk-U63GDNRC.cjs} +32 -26
  176. package/dist/chunk-U63GDNRC.cjs.map +1 -0
  177. package/dist/{chunk-WDBXJOU5.cjs → chunk-UDISNXDL.cjs} +56 -47
  178. package/dist/chunk-UDISNXDL.cjs.map +1 -0
  179. package/dist/{chunk-EFEOOCJ3.js → chunk-UV3SN74I.js} +5 -5
  180. package/dist/{chunk-EFEOOCJ3.js.map → chunk-UV3SN74I.js.map} +1 -1
  181. package/dist/{chunk-U5W4LKZV.cjs → chunk-VCRRKBLN.cjs} +9 -9
  182. package/dist/{chunk-U5W4LKZV.cjs.map → chunk-VCRRKBLN.cjs.map} +1 -1
  183. package/dist/{chunk-ISLPNELU.js → chunk-VGTJPTIC.js} +16 -5
  184. package/dist/chunk-VGTJPTIC.js.map +1 -0
  185. package/dist/chunk-VQH4VAWD.cjs +12 -0
  186. package/dist/{chunk-B3F2D3SP.cjs.map → chunk-VQH4VAWD.cjs.map} +1 -1
  187. package/dist/{chunk-SNXVDZAJ.js → chunk-W6OG3HDG.js} +5 -4
  188. package/dist/chunk-W6OG3HDG.js.map +1 -0
  189. package/dist/chunk-WDGA7IYB.js +207 -0
  190. package/dist/chunk-WDGA7IYB.js.map +1 -0
  191. package/dist/chunk-WEVQJ5LH.js +736 -0
  192. package/dist/chunk-WEVQJ5LH.js.map +1 -0
  193. package/dist/{chunk-EKFUG4G7.cjs → chunk-XBYVV3MP.cjs} +60 -5
  194. package/dist/chunk-XBYVV3MP.cjs.map +1 -0
  195. package/dist/{chunk-5GAONX5G.cjs → chunk-XCAGZAKP.cjs} +7 -7
  196. package/dist/{chunk-5GAONX5G.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
  197. package/dist/{chunk-YOALGKRE.cjs → chunk-XDF2UPEQ.cjs} +3521 -1766
  198. package/dist/chunk-XDF2UPEQ.cjs.map +1 -0
  199. package/dist/{chunk-J7LXTUTP.cjs → chunk-XMQSEJCF.cjs} +604 -1094
  200. package/dist/chunk-XMQSEJCF.cjs.map +1 -0
  201. package/dist/chunk-XNLIZYRZ.cjs +3432 -0
  202. package/dist/chunk-XNLIZYRZ.cjs.map +1 -0
  203. package/dist/{chunk-KMXWZLQX.cjs → chunk-XNSI2FJO.cjs} +99 -100
  204. package/dist/chunk-XNSI2FJO.cjs.map +1 -0
  205. package/dist/chunk-XQSCL77R.cjs +60 -0
  206. package/dist/chunk-XQSCL77R.cjs.map +1 -0
  207. package/dist/{chunk-SVJ5GEXW.cjs → chunk-XUO3KQFO.cjs} +2 -2
  208. package/dist/chunk-XUO3KQFO.cjs.map +1 -0
  209. package/dist/{chunk-F4NHQHEZ.cjs → chunk-YAAM3M2S.cjs} +10 -10
  210. package/dist/{chunk-F4NHQHEZ.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
  211. package/dist/{chunk-RUQS6M7G.js → chunk-YBFHZUXX.js} +6 -6
  212. package/dist/chunk-YBFHZUXX.js.map +1 -0
  213. package/dist/{chunk-PVUI6KGR.js → chunk-YDFDBE6D.js} +93 -6
  214. package/dist/chunk-YDFDBE6D.js.map +1 -0
  215. package/dist/{chunk-P7GTYOLB.cjs → chunk-YVWGEQJE.cjs} +297 -135
  216. package/dist/chunk-YVWGEQJE.cjs.map +1 -0
  217. package/dist/{chunk-QT6V3YRH.js → chunk-YWGVVALJ.js} +3 -3
  218. package/dist/{chunk-QT6V3YRH.js.map → chunk-YWGVVALJ.js.map} +1 -1
  219. package/dist/core/index.cjs +40 -40
  220. package/dist/core/index.d.cts +4 -5
  221. package/dist/core/index.d.ts +4 -5
  222. package/dist/core/index.js +8 -8
  223. package/dist/{ddl-BG4J805L.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
  224. package/dist/{ddl-CgiS9QLj.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
  225. package/dist/graph-extension/index.cjs +26 -22
  226. package/dist/graph-extension/index.d.cts +16 -6
  227. package/dist/graph-extension/index.d.ts +16 -6
  228. package/dist/graph-extension/index.js +7 -7
  229. package/dist/graph-merge/index.cjs +2459 -654
  230. package/dist/graph-merge/index.cjs.map +1 -1
  231. package/dist/graph-merge/index.d.cts +170 -33
  232. package/dist/graph-merge/index.d.ts +170 -33
  233. package/dist/graph-merge/index.js +2269 -467
  234. package/dist/graph-merge/index.js.map +1 -1
  235. package/dist/{index-C3y_98iN.d.cts → index-BSHvKfok.d.ts} +221 -10
  236. package/dist/{index-BBxZCUdu.d.ts → index-DxaYCv8Y.d.cts} +221 -10
  237. package/dist/index.cjs +330 -268
  238. package/dist/index.cjs.map +1 -1
  239. package/dist/index.d.cts +590 -576
  240. package/dist/index.d.ts +590 -576
  241. package/dist/index.js +73 -49
  242. package/dist/index.js.map +1 -1
  243. package/dist/indexes/index.cjs +17 -17
  244. package/dist/indexes/index.d.cts +4 -4
  245. package/dist/indexes/index.d.ts +4 -4
  246. package/dist/indexes/index.js +10 -10
  247. package/dist/interchange/index.cjs +165 -51
  248. package/dist/interchange/index.cjs.map +1 -1
  249. package/dist/interchange/index.d.cts +261 -16
  250. package/dist/interchange/index.d.ts +261 -16
  251. package/dist/interchange/index.js +128 -25
  252. package/dist/interchange/index.js.map +1 -1
  253. package/dist/{manager-YoLEfcc1.d.ts → manager-CfZAimti.d.ts} +36 -5
  254. package/dist/{manager-KS7CGQQT.d.cts → manager-HGk6E_HW.d.cts} +36 -5
  255. package/dist/{materialize-indexes-Bhhyb1B3.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
  256. package/dist/{materialize-indexes-OHRWypW6.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
  257. package/dist/{postgres-DpkW3R5Y.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
  258. package/dist/{postgres-DwqyIniy.d.ts → postgres-e7a9TdvR.d.ts} +1961 -439
  259. package/dist/profiler/index.cjs +15 -15
  260. package/dist/profiler/index.d.cts +9 -10
  261. package/dist/profiler/index.d.ts +9 -10
  262. package/dist/profiler/index.js +4 -4
  263. package/dist/provenance/index.cjs +46 -48
  264. package/dist/provenance/index.cjs.map +1 -1
  265. package/dist/provenance/index.d.cts +7 -7
  266. package/dist/provenance/index.d.ts +7 -7
  267. package/dist/provenance/index.js +12 -14
  268. package/dist/provenance/index.js.map +1 -1
  269. package/dist/schema/index.cjs +50 -48
  270. package/dist/schema/index.d.cts +9 -16
  271. package/dist/schema/index.d.ts +9 -16
  272. package/dist/schema/index.js +23 -21
  273. package/dist/{searchable-DLWEfC4a.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
  274. package/dist/{searchable-CIZL8Hyw.d.cts → searchable-CIje5XYD.d.cts} +1 -2
  275. package/dist/{sqlite-DY0WODUK.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
  276. package/dist/{sqlite-L-VIRzqA.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
  277. package/dist/{store-view-66p92IPi.d.ts → store-DawaWWjJ.d.ts} +1280 -767
  278. package/dist/{store-view-A85FFRnk.d.cts → store-RwTJx8LX.d.cts} +1280 -767
  279. package/dist/{temporal-BNbjXqer.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
  280. package/dist/{temporal-Bob6Nfbp.d.ts → temporal-BtM4UALv.d.ts} +1 -1
  281. package/dist/{types-DeORZhxn.d.cts → types-CoIx8HX5.d.cts} +1 -1
  282. package/dist/{types-Ch9a0Dx6.d.ts → types-HkveCCx0.d.cts} +726 -5
  283. package/dist/{types-Ch9a0Dx6.d.cts → types-HkveCCx0.d.ts} +726 -5
  284. package/dist/{types-ClCzT-dT.d.ts → types-KFfk-8Ah.d.ts} +1 -1
  285. package/dist/{where-DPw52ksb.d.cts → where--fk7_0kv.d.cts} +1 -1
  286. package/dist/{where-kWUZPvEA.d.ts → where-ws5hf-Ov.d.ts} +1 -1
  287. package/package.json +1 -1
  288. package/dist/chunk-2L54C2C2.js +0 -144
  289. package/dist/chunk-2L54C2C2.js.map +0 -1
  290. package/dist/chunk-35S6P5ZU.js +0 -27
  291. package/dist/chunk-35S6P5ZU.js.map +0 -1
  292. package/dist/chunk-42PYUGLS.js.map +0 -1
  293. package/dist/chunk-4GUBTVPV.js.map +0 -1
  294. package/dist/chunk-4GUTQPVO.js.map +0 -1
  295. package/dist/chunk-4MB3AQAQ.js.map +0 -1
  296. package/dist/chunk-4MEWSUVM.cjs.map +0 -1
  297. package/dist/chunk-4QIKLIGG.js.map +0 -1
  298. package/dist/chunk-4SZ6XPTG.cjs +0 -12
  299. package/dist/chunk-55ITBQJI.js.map +0 -1
  300. package/dist/chunk-5EKPX6QU.js.map +0 -1
  301. package/dist/chunk-6RYPD3NJ.cjs +0 -1282
  302. package/dist/chunk-6RYPD3NJ.cjs.map +0 -1
  303. package/dist/chunk-764JHTLT.cjs +0 -15
  304. package/dist/chunk-764JHTLT.cjs.map +0 -1
  305. package/dist/chunk-ACSVZPK7.cjs.map +0 -1
  306. package/dist/chunk-B3F2D3SP.cjs +0 -12
  307. package/dist/chunk-BGYJW37L.js.map +0 -1
  308. package/dist/chunk-BNS75YNF.cjs.map +0 -1
  309. package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
  310. package/dist/chunk-CBKG6HEP.js +0 -1263
  311. package/dist/chunk-CBKG6HEP.js.map +0 -1
  312. package/dist/chunk-CPEL3YIR.cjs.map +0 -1
  313. package/dist/chunk-D54WH24V.cjs.map +0 -1
  314. package/dist/chunk-D56XG4EI.cjs.map +0 -1
  315. package/dist/chunk-D7PG5D5K.js.map +0 -1
  316. package/dist/chunk-DI74SMXS.cjs +0 -29
  317. package/dist/chunk-DI74SMXS.cjs.map +0 -1
  318. package/dist/chunk-DK2S42XB.js +0 -77
  319. package/dist/chunk-DK2S42XB.js.map +0 -1
  320. package/dist/chunk-DRACN6XG.js +0 -27
  321. package/dist/chunk-DRACN6XG.js.map +0 -1
  322. package/dist/chunk-DXEEHSGN.js.map +0 -1
  323. package/dist/chunk-EKFUG4G7.cjs.map +0 -1
  324. package/dist/chunk-EQ7JKLZO.cjs +0 -157
  325. package/dist/chunk-EQ7JKLZO.cjs.map +0 -1
  326. package/dist/chunk-FJMPR3OH.cjs.map +0 -1
  327. package/dist/chunk-FLEQ2HBK.js.map +0 -1
  328. package/dist/chunk-FQ7ZPOTZ.js.map +0 -1
  329. package/dist/chunk-G6Q5UM7U.js.map +0 -1
  330. package/dist/chunk-GYA4JRP5.js.map +0 -1
  331. package/dist/chunk-H7VE3FL4.cjs.map +0 -1
  332. package/dist/chunk-ID4WXTKL.js.map +0 -1
  333. package/dist/chunk-ISLPNELU.js.map +0 -1
  334. package/dist/chunk-ITE4IXAK.js +0 -25
  335. package/dist/chunk-ITE4IXAK.js.map +0 -1
  336. package/dist/chunk-IX64T5OL.cjs.map +0 -1
  337. package/dist/chunk-J2ICGNHO.cjs.map +0 -1
  338. package/dist/chunk-J7LXTUTP.cjs.map +0 -1
  339. package/dist/chunk-JQXSZHF2.cjs.map +0 -1
  340. package/dist/chunk-JXUTCSXX.cjs.map +0 -1
  341. package/dist/chunk-KCO5EFJU.js +0 -79
  342. package/dist/chunk-KCO5EFJU.js.map +0 -1
  343. package/dist/chunk-KKYELPZ2.cjs +0 -83
  344. package/dist/chunk-KKYELPZ2.cjs.map +0 -1
  345. package/dist/chunk-KMXWZLQX.cjs.map +0 -1
  346. package/dist/chunk-MIJKEVV7.js.map +0 -1
  347. package/dist/chunk-NAAMUYMS.cjs.map +0 -1
  348. package/dist/chunk-P7GTYOLB.cjs.map +0 -1
  349. package/dist/chunk-PVUI6KGR.js.map +0 -1
  350. package/dist/chunk-Q6EDCUXV.js.map +0 -1
  351. package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
  352. package/dist/chunk-QC4MCOFV.cjs +0 -83
  353. package/dist/chunk-QC4MCOFV.cjs.map +0 -1
  354. package/dist/chunk-QMQLUA66.js +0 -12
  355. package/dist/chunk-QMQLUA66.js.map +0 -1
  356. package/dist/chunk-QRNYDV5Z.js.map +0 -1
  357. package/dist/chunk-RFRM3Q5K.js.map +0 -1
  358. package/dist/chunk-RUQS6M7G.js.map +0 -1
  359. package/dist/chunk-S4KQ5LV4.js.map +0 -1
  360. package/dist/chunk-SJDMVITW.cjs.map +0 -1
  361. package/dist/chunk-SNXVDZAJ.js.map +0 -1
  362. package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
  363. package/dist/chunk-TDXIBCGY.cjs.map +0 -1
  364. package/dist/chunk-TKORQCG4.js.map +0 -1
  365. package/dist/chunk-TKP5T34P.js.map +0 -1
  366. package/dist/chunk-TRF4EBJT.cjs +0 -30
  367. package/dist/chunk-TRF4EBJT.cjs.map +0 -1
  368. package/dist/chunk-UCQ3BFSY.cjs.map +0 -1
  369. package/dist/chunk-UR7W5YQK.js.map +0 -1
  370. package/dist/chunk-V34A6R5V.js +0 -134
  371. package/dist/chunk-V34A6R5V.js.map +0 -1
  372. package/dist/chunk-WDAVPX46.js +0 -81
  373. package/dist/chunk-WDAVPX46.js.map +0 -1
  374. package/dist/chunk-WDBXJOU5.cjs.map +0 -1
  375. package/dist/chunk-YDWLUT5V.cjs.map +0 -1
  376. package/dist/chunk-YOALGKRE.cjs.map +0 -1
  377. package/dist/chunk-Z3WO6MND.cjs.map +0 -1
  378. package/dist/chunk-ZDH3DX3C.cjs +0 -30
  379. package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
  380. package/dist/chunk-ZI6VQSZA.cjs.map +0 -1
  381. package/dist/chunk-ZTAJL4DT.cjs +0 -85
  382. package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
  383. package/dist/define-graph-BGrJahvp.d.ts +0 -173
  384. package/dist/define-graph-alREY2wj.d.cts +0 -173
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/interchange/types.ts","../src/interchange/export.ts","../src/interchange/import.ts"],"names":["z","isCanonicalIsoDate","storeBackend","getNodeKinds","getEdgeKinds","nowIso","rowPropsToObject","requireDefined","runInWriteTransaction","createNodeBatchValidationBackend","primeBatchValidationCaches","isLiveNodeRow","applyNodeUpdate","checkUniquenessConstraints","applyNodeInsertSideEffectsBatch","UniquenessError","validateOptionalCanonicalIsoDate","applyNodeInsertSideEffects","validateEdgeEndpoints","result"],"mappings":"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","file":"chunk-6RYPD3NJ.cjs","sourcesContent":["/**\n * Graph interchange format types.\n *\n * Defines Zod schemas for importing and exporting graph data.\n * The format is designed to be:\n * - JSON-serializable for API transport\n * - Validated via Zod at runtime\n * - Exportable as JSON Schema for LLM/API documentation\n */\nimport { z } from \"zod\";\n\nimport { isCanonicalIsoDate } from \"../utils/date\";\n\n// ============================================================\n// Format Version\n// ============================================================\n\n/**\n * Current interchange format version.\n * Increment for breaking changes to the format.\n */\nexport const FORMAT_VERSION = \"1.0\" as const;\n\n/**\n * A stored validity-window timestamp (`validFrom` / `validTo`). Must be a\n * canonical fixed-width UTC ISO-8601 string (`YYYY-MM-DDTHH:mm:ss.sssZ`) — the\n * same contract `create` / `update` enforce — because temporal filters compare\n * it as text against the `asOf` read coordinate, and a variable-width value\n * (date-only, offset, missing/variable milliseconds) would mis-sort and\n * silently include or exclude the wrong rows. Convert non-canonical inputs with\n * `new Date(value).toISOString()`.\n */\nconst ValidityTimestampSchema = z.iso\n .datetime()\n .refine((value) => isCanonicalIsoDate(value), {\n message:\n \"Expected canonical UTC ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ); convert with new Date(value).toISOString().\",\n });\n\n// ============================================================\n// Node Interchange\n// ============================================================\n\n/**\n * Interchange format for a node.\n *\n * Properties are stored as a record to allow schema-agnostic transport.\n * Validation against the actual schema happens during import.\n */\nexport const InterchangeNodeSchema = z.object({\n kind: z.string().min(1),\n id: z.string().min(1),\n properties: z.record(z.string(), z.unknown()),\n /**\n * `undefined` (key absent): not requested (`includeTemporal: false`) —\n * import defaults it to the import's own creation timestamp. `null`:\n * requested and confirmed the row has no lower bound (e.g. a legacy row\n * predating the \"omitted validFrom defaults to creation time\" fix) —\n * import preserves that open-left validity instead of re-stamping it.\n */\n validFrom: ValidityTimestampSchema.nullable().optional(),\n validTo: ValidityTimestampSchema.optional(),\n meta: z\n .object({\n version: z.number().int().positive().optional(),\n createdAt: z.iso.datetime().optional(),\n updatedAt: z.iso.datetime().optional(),\n })\n .optional(),\n});\n\nexport type InterchangeNode = z.infer<typeof InterchangeNodeSchema>;\n\n// ============================================================\n// Edge Interchange\n// ============================================================\n\n/**\n * Interchange format for an edge.\n *\n * Endpoint references are objects with kind and id, rather than\n * composite strings, for clarity and type safety.\n */\nexport const InterchangeEdgeSchema = z.object({\n kind: z.string().min(1),\n id: z.string().min(1),\n from: z.object({\n kind: z.string().min(1),\n id: z.string().min(1),\n }),\n to: z.object({\n kind: z.string().min(1),\n id: z.string().min(1),\n }),\n properties: z.record(z.string(), z.unknown()).default({}),\n /** See {@link InterchangeNodeSchema}'s `validFrom` for the null/undefined contract. */\n validFrom: ValidityTimestampSchema.nullable().optional(),\n validTo: ValidityTimestampSchema.optional(),\n meta: z\n .object({\n createdAt: z.iso.datetime().optional(),\n updatedAt: z.iso.datetime().optional(),\n })\n .optional(),\n});\n\nexport type InterchangeEdge = z.infer<typeof InterchangeEdgeSchema>;\n\n// ============================================================\n// Import Configuration\n// ============================================================\n\n/**\n * Strategy for handling conflicts when a node/edge ID already exists.\n *\n * - `skip`: Keep existing, ignore incoming\n * - `update`: Merge incoming properties into existing\n * - `error`: Throw an error on conflict\n */\nexport const ConflictStrategySchema = z.enum([\"skip\", \"update\", \"error\"]);\nexport type ConflictStrategy = z.infer<typeof ConflictStrategySchema>;\n\n/**\n * Strategy for handling properties not defined in the schema.\n *\n * - `error`: Throw a validation error\n * - `strip`: Remove unknown properties silently\n * - `allow`: Pass through to storage (relies on backend behavior)\n */\nexport const UnknownPropertyStrategySchema = z.enum([\n \"error\",\n \"strip\",\n \"allow\",\n]);\nexport type UnknownPropertyStrategy = z.infer<\n typeof UnknownPropertyStrategySchema\n>;\n\n/**\n * Options for importing graph data.\n */\nexport const ImportOptionsSchema = z.object({\n /** How to handle existing nodes/edges with the same ID */\n onConflict: ConflictStrategySchema,\n /** How to handle properties not in the schema */\n onUnknownProperty: UnknownPropertyStrategySchema.default(\"error\"),\n /** Whether to validate that edge endpoints exist */\n validateReferences: z.boolean().default(true),\n /**\n * Number of items to process in each batch. Each batch pays fixed\n * per-round-trip costs (existence probe, unique check, one multi-row\n * insert), so undersized batches dominate import time on client/server\n * engines: measured on PostgreSQL, 20k nodes + 5k edges import in\n * 1,515ms at 100 vs 781ms at 1,000. Above ~1,000 the multi-row insert\n * itself dominates and larger batches stop paying; SQLite is\n * insensitive to the value (in-process, no round trips). The backend\n * further splits inserts by its bind-parameter budget, so a large\n * batch never overruns driver limits.\n */\n batchSize: z.number().int().positive().default(1000),\n /**\n * Refresh planner statistics (ANALYZE) after an import that created or\n * updated rows. Bulk loads otherwise run against stale statistics until\n * the engine catches up on its own. Default: true.\n */\n refreshStatistics: z.boolean().optional(),\n /**\n * How a streamed import reacts when one chunk reports entity-level errors.\n * `abort` is the safe default: earlier chunks are already committed, so\n * callers must not mistake a partial stream for a successful retryable load.\n * `continue` is reserved for explicit best-effort ingestion.\n */\n onStreamChunkError: z.enum([\"abort\", \"continue\"]).default(\"abort\"),\n});\n\n/**\n * Caller-facing options: fields with schema defaults are optional.\n * `importGraph` parses these once at its boundary; internal stages\n * consume {@link ResolvedImportOptions} with every default applied.\n */\nexport type ImportOptions = z.input<typeof ImportOptionsSchema>;\n\n/** {@link ImportOptions} after schema parsing — all defaults resolved. */\nexport type ResolvedImportOptions = z.infer<typeof ImportOptionsSchema>;\n\n// ============================================================\n// Graph Data Source\n// ============================================================\n\n/**\n * Source metadata for graph data.\n *\n * Uses discriminated union to capture different origin types:\n * - `typegraph-export`: Exported from a TypeGraph store\n * - `external`: From a third-party system\n */\nexport const GraphDataSourceSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"typegraph-export\"),\n graphId: z.string(),\n schemaVersion: z.number().int().positive(),\n }),\n z.object({\n type: z.literal(\"external\"),\n description: z.string().optional(),\n }),\n]);\n\nexport type GraphDataSource = z.infer<typeof GraphDataSourceSchema>;\n\n// ============================================================\n// Graph Data Envelope\n// ============================================================\n\n/**\n * Complete graph data interchange format.\n *\n * The envelope contains metadata about the data source and format version,\n * plus arrays of nodes and edges to import.\n */\nexport const GraphDataSchema = z.object({\n formatVersion: z.literal(FORMAT_VERSION),\n exportedAt: z.iso.datetime(),\n source: GraphDataSourceSchema,\n nodes: z.array(InterchangeNodeSchema),\n edges: z.array(InterchangeEdgeSchema),\n});\n\nexport type GraphData = z.infer<typeof GraphDataSchema>;\n\n/** The metadata envelope emitted before streamed graph entities. */\nexport const GraphDataHeaderSchema = GraphDataSchema.omit({\n nodes: true,\n edges: true,\n});\n\nexport type GraphDataHeader = z.infer<typeof GraphDataHeaderSchema>;\n\n/**\n * One bounded unit in the streamed interchange protocol. Nodes always precede\n * edges, so an importer can validate endpoints from rows already written to its\n * target without retaining all prior nodes in memory.\n */\nexport const GraphInterchangeChunkSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"header\"), header: GraphDataHeaderSchema }),\n z.object({ type: z.literal(\"nodes\"), nodes: z.array(InterchangeNodeSchema) }),\n z.object({ type: z.literal(\"edges\"), edges: z.array(InterchangeEdgeSchema) }),\n]);\n\nexport type GraphInterchangeChunk = z.infer<typeof GraphInterchangeChunkSchema>;\n\n// ============================================================\n// Import Result\n// ============================================================\n\n/**\n * An error that occurred during import.\n */\nexport const ImportErrorSchema = z.object({\n entityType: z.enum([\"node\", \"edge\"]),\n kind: z.string(),\n id: z.string(),\n error: z.string(),\n});\n\nexport type ImportError = z.infer<typeof ImportErrorSchema>;\n\n/**\n * Result of an import operation.\n *\n * Contains counts of created/updated/skipped entities and any errors.\n */\nexport const ImportResultSchema = z.object({\n success: z.boolean(),\n nodes: z.object({\n created: z.number().int().nonnegative(),\n updated: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n }),\n edges: z.object({\n created: z.number().int().nonnegative(),\n updated: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n }),\n errors: z.array(ImportErrorSchema),\n});\n\nexport type ImportResult = z.infer<typeof ImportResultSchema>;\n\n// ============================================================\n// Export Options\n// ============================================================\n\n/**\n * Options for exporting graph data.\n */\nexport const ExportOptionsSchema = z.object({\n /** Filter to specific node kinds (undefined = all) */\n nodeKinds: z.array(z.string()).optional(),\n /** Filter to specific edge kinds (undefined = all) */\n edgeKinds: z.array(z.string()).optional(),\n /** Include temporal fields (validFrom, validTo) */\n includeTemporal: z.boolean().default(false),\n /** Include metadata (version, timestamps) */\n includeMeta: z.boolean().default(false),\n /** Include soft-deleted records */\n includeDeleted: z.boolean().default(false),\n});\n\n/** Export options with defaults applied (output type) */\nexport type ExportOptions = z.infer<typeof ExportOptionsSchema>;\n\n/** Export options as accepted by exportGraph (input type with optional defaults) */\nexport type ExportOptionsInput = z.input<typeof ExportOptionsSchema>;\n\n/**\n * Export options for {@link exportGraphStream}. `batchSize` bounds the number\n * of node or edge entities retained for one yielded chunk.\n */\nexport const ExportStreamOptionsSchema = ExportOptionsSchema.extend({\n batchSize: z.number().int().positive().default(1000),\n});\n\nexport type ExportStreamOptions = z.infer<typeof ExportStreamOptionsSchema>;\nexport type ExportStreamOptionsInput = z.input<\n typeof ExportStreamOptionsSchema\n>;\n","/**\n * Graph data export functionality.\n *\n * Exports nodes and edges from a store to the interchange format.\n */\nimport { type GraphBackend, rowPropsToObject } from \"../backend/types\";\nimport {\n getEdgeKinds,\n getNodeKinds,\n type GraphDef,\n} from \"../core/define-graph\";\nimport { storeBackend } from \"../store/runtime-port\";\nimport { type Store } from \"../store/store\";\nimport { nowIso } from \"../utils/date\";\nimport { requireDefined } from \"../utils/presence\";\nimport {\n type ExportOptionsInput,\n type ExportStreamOptionsInput,\n ExportStreamOptionsSchema,\n FORMAT_VERSION,\n type GraphData,\n type GraphDataHeader,\n type GraphInterchangeChunk,\n type InterchangeEdge,\n type InterchangeNode,\n} from \"./types\";\n\n// ============================================================\n// Export Function\n// ============================================================\n\n/**\n * Export graph data from a store.\n *\n * @param store - The graph store to export from\n * @param options - Export configuration\n * @returns Graph data in interchange format\n *\n * @example\n * ```typescript\n * const data = await exportGraph(store, {\n * nodeKinds: [\"Person\", \"Organization\"],\n * includeMeta: true,\n * });\n *\n * // Write to file\n * await fs.writeFile(\"backup.json\", JSON.stringify(data, null, 2));\n * ```\n */\nexport async function exportGraph<G extends GraphDef>(\n store: Store<G>,\n options?: ExportOptionsInput,\n): Promise<GraphData> {\n const nodes: InterchangeNode[] = [];\n const edges: InterchangeEdge[] = [];\n let header: GraphDataHeader | undefined;\n for await (const chunk of exportGraphStream(store, options)) {\n switch (chunk.type) {\n case \"header\": {\n header = chunk.header;\n break;\n }\n case \"nodes\": {\n nodes.push(...chunk.nodes);\n break;\n }\n case \"edges\": {\n edges.push(...chunk.edges);\n break;\n }\n }\n }\n if (header === undefined) {\n throw new Error(\"Graph export stream ended before emitting its header.\");\n }\n return { ...header, nodes, edges };\n}\n\n/**\n * Exports a graph as bounded node and edge chunks. The stream always yields one\n * header, then every node chunk, then every edge chunk. Consumers that write to\n * a network, file, or fresh working copy can process one chunk at a time rather\n * than materializing a graph-sized {@link GraphData} value.\n */\nexport async function* exportGraphStream<G extends GraphDef>(\n store: Store<G>,\n options?: ExportStreamOptionsInput,\n): AsyncIterable<GraphInterchangeChunk> {\n const resolved = ExportStreamOptionsSchema.parse(options ?? {});\n const graphId = store.graphId;\n const backend = storeBackend(store);\n const nodeKinds = resolved.nodeKinds ?? getNodeKinds(store.graph);\n const edgeKinds = resolved.edgeKinds ?? getEdgeKinds(store.graph);\n const schemaVersion = await backend.getActiveSchema(graphId);\n\n yield {\n type: \"header\",\n header: {\n formatVersion: FORMAT_VERSION,\n exportedAt: nowIso(),\n source: {\n type: \"typegraph-export\",\n graphId,\n schemaVersion: schemaVersion?.version ?? 1,\n },\n },\n };\n\n for (const kind of nodeKinds) {\n yield* exportNodeChunks(backend, graphId, kind, resolved);\n }\n for (const kind of edgeKinds) {\n yield* exportEdgeChunks(backend, graphId, kind, resolved);\n }\n}\n\n// ============================================================\n// Node Export\n// ============================================================\n\ntype ExportOptions_ = Readonly<{\n includeTemporal: boolean;\n includeMeta: boolean;\n includeDeleted: boolean;\n}>;\n\nasync function* exportNodeChunks(\n backend: GraphBackend,\n graphId: string,\n kind: string,\n options: ExportOptions_ & Readonly<{ batchSize: number }>,\n): AsyncIterable<GraphInterchangeChunk> {\n let after: string | undefined;\n for (;;) {\n const rows = await backend.findNodesByKind({\n graphId,\n kind,\n excludeDeleted: !options.includeDeleted,\n orderBy: \"id\",\n limit: options.batchSize,\n ...(after === undefined ? {} : { after }),\n });\n if (rows.length === 0) return;\n const nodes = rows.map((row) => {\n const node: InterchangeNode = {\n kind: row.kind,\n id: row.id,\n properties: rowPropsToObject(row.props),\n };\n\n if (options.includeTemporal) {\n // validFrom is always emitted (as `null` when the row has no lower\n // bound) so import can tell \"confirmed open-left\" apart from \"not\n // requested\" and preserve it instead of defaulting to import time —\n // see the schema doc on InterchangeNodeSchema.validFrom. validTo has\n // no such ambiguity (it was never defaulted), so it stays gated.\n // `null` (not `undefined`) is the wire-protocol signal here — JSON has\n // no other way to say \"explicitly cleared\" vs. \"field absent\".\n const validFrom =\n // eslint-disable-next-line unicorn/no-null\n row.valid_from ?? null;\n (node as { validFrom?: string | null }).validFrom = validFrom;\n if (row.valid_to) {\n (node as { validTo?: string }).validTo = row.valid_to;\n }\n }\n\n if (options.includeMeta) {\n (node as { meta?: InterchangeNode[\"meta\"] }).meta = {\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n\n return node;\n });\n yield { type: \"nodes\", nodes };\n if (rows.length < options.batchSize) return;\n after = requireDefined(rows.at(-1)).id;\n }\n}\n\n// ============================================================\n// Edge Export\n// ============================================================\n\nasync function* exportEdgeChunks(\n backend: GraphBackend,\n graphId: string,\n kind: string,\n options: ExportOptions_ & Readonly<{ batchSize: number }>,\n): AsyncIterable<GraphInterchangeChunk> {\n let after: string | undefined;\n for (;;) {\n const rows = await backend.findEdgesByKind({\n graphId,\n kind,\n excludeDeleted: !options.includeDeleted,\n orderBy: \"id\",\n limit: options.batchSize,\n ...(after === undefined ? {} : { after }),\n });\n if (rows.length === 0) return;\n const edges = rows.map((row) => {\n const edge: InterchangeEdge = {\n kind: row.kind,\n id: row.id,\n from: {\n kind: row.from_kind,\n id: row.from_id,\n },\n to: {\n kind: row.to_kind,\n id: row.to_id,\n },\n properties: rowPropsToObject(row.props),\n };\n\n if (options.includeTemporal) {\n // See exportNodesOfKind's validFrom comment: always emitted (as\n // `null` when open-left) so import can distinguish \"confirmed no\n // lower bound\" from \"not requested\".\n const validFrom =\n // eslint-disable-next-line unicorn/no-null\n row.valid_from ?? null;\n (edge as { validFrom?: string | null }).validFrom = validFrom;\n if (row.valid_to) {\n (edge as { validTo?: string }).validTo = row.valid_to;\n }\n }\n\n if (options.includeMeta) {\n (edge as { meta?: InterchangeEdge[\"meta\"] }).meta = {\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n\n return edge;\n });\n yield { type: \"edges\", edges };\n if (rows.length < options.batchSize) return;\n after = requireDefined(rows.at(-1)).id;\n }\n}\n","/**\n * Graph data import functionality.\n *\n * Imports nodes and edges from the interchange format into a store,\n * with configurable conflict resolution and validation.\n */\nimport type { z } from \"zod\";\n\nimport {\n type GraphBackend,\n isLiveNodeRow,\n rowPropsToObject,\n type TransactionBackend,\n} from \"../backend/types\";\nimport { validateEdgeEndpoints } from \"../constraints\";\nimport {\n getEdgeKinds,\n getNodeKinds,\n type GraphDef,\n} from \"../core/define-graph\";\nimport { type EdgeRegistration, type NodeRegistration } from \"../core/types\";\nimport { UniquenessError } from \"../errors\";\nimport { type KindRegistry } from \"../registry/kind-registry\";\nimport {\n createNodeBatchValidationBackend,\n type NodeCreateDraft,\n primeBatchValidationCaches,\n} from \"../store/operations/node-operations\";\nimport {\n applyNodeInsertSideEffects,\n applyNodeInsertSideEffectsBatch,\n applyNodeUpdate,\n} from \"../store/operations/node-write-pipeline\";\nimport { runInWriteTransaction } from \"../store/operations/write-transaction\";\nimport { type GraphWriteLock } from \"../store/recorded-capture/clock\";\nimport { storeBackend } from \"../store/runtime-port\";\nimport { type Store } from \"../store/store\";\nimport { checkUniquenessConstraints } from \"../store/uniqueness\";\nimport { validateOptionalCanonicalIsoDate } from \"../utils/date\";\nimport {\n type GraphData,\n type GraphDataHeader,\n type GraphInterchangeChunk,\n type ImportError,\n type ImportOptions,\n ImportOptionsSchema,\n type ImportResult,\n type InterchangeEdge,\n type InterchangeNode,\n type ResolvedImportOptions,\n type UnknownPropertyStrategy,\n} from \"./types\";\n\n// ============================================================\n// Import Function\n// ============================================================\n\n/**\n * Import graph data into a store.\n *\n * Nodes are imported first to satisfy edge reference validation.\n * The import runs within a transaction for atomicity when supported.\n *\n * @param store - The graph store to import into\n * @param data - Graph data in interchange format\n * @param options - Import configuration\n * @returns Import statistics and any errors\n *\n * @example\n * ```typescript\n * const result = await importGraph(store, data, {\n * onConflict: \"update\",\n * onUnknownProperty: \"strip\",\n * });\n *\n * console.log(`Created ${result.nodes.created} nodes`);\n * ```\n */\nexport async function importGraph<G extends GraphDef>(\n store: Store<G>,\n data: GraphData,\n rawOptions: ImportOptions,\n): Promise<ImportResult> {\n // Parse ONCE at the public boundary: schema defaults (batchSize, ...)\n // only exist after parsing, and every internal stage reads them\n // directly.\n const options = ImportOptionsSchema.parse(rawOptions);\n const result = emptyImportResult();\n\n const errors: ImportError[] = [];\n const graph = store.graph;\n const graphId = store.graphId;\n const backend = storeBackend(store);\n const registry = store.registry;\n\n // Build lookup maps for schema validation\n const nodeSchemas = buildNodeSchemaMap(graph);\n const edgeSchemas = buildEdgeSchemaMap(graph);\n\n // Track imported node IDs for reference validation\n const importedNodeIds = new Set<string>();\n\n // One transaction on a transactional backend; runs directly otherwise, with\n // the per-graph write lock taken before any row work — see\n // runInWriteTransaction for the shared lock-before-rows contract every\n // writer follows.\n await runInWriteTransaction(\n {\n graphId,\n schemaVersion: store.introspect().schemaVersion,\n historyEnabled: store.historyEnabled,\n revisionTrackingEnabled: store.revisionTrackingEnabled,\n revisionSchema: store.revisionSchema,\n },\n backend,\n async (target, lock) => {\n await processNodes(\n target,\n graphId,\n registry,\n data.nodes,\n nodeSchemas,\n options,\n result,\n errors,\n importedNodeIds,\n lock,\n );\n await processEdges(\n target,\n graphId,\n registry,\n data.edges,\n edgeSchemas,\n nodeSchemas,\n options,\n result,\n errors,\n importedNodeIds,\n );\n },\n );\n\n // A bulk load runs against stale planner statistics until ANALYZE runs\n // (documented regressions: 0.5ms → 5ms traversals on Postgres, 0.9ms →\n // 23ms fulltext on SQLite), so a mutating import refreshes them once,\n // after the transaction commits.\n //\n // Best-effort: by this point the import is committed, so a failed\n // statistics refresh must not convert the completed (non-atomic on some\n // backends, non-retryable) import into a thrown failure — it degrades to\n // a warning, and the caller can run `store.refreshStatistics()`.\n await refreshStatisticsAfterImport(store, options, result, \"importGraph\");\n\n return {\n ...result,\n success: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Imports a header-first stream of bounded interchange chunks.\n *\n * Each chunk is committed through the same {@link importGraph} implementation\n * as an in-memory import, so validation and conflict semantics stay identical.\n * Chunks are individually atomic on transactional backends; a consumer needing\n * all-or-nothing behavior can import into a disposable working-copy backend and\n * publish it only after this function succeeds.\n *\n * Nodes must precede edges. Once a node chunk commits, edge validation reads the\n * target store rather than retaining every imported node id in memory.\n */\nexport async function importGraphStream<G extends GraphDef>(\n store: Store<G>,\n chunks: AsyncIterable<GraphInterchangeChunk>,\n rawOptions: ImportOptions,\n): Promise<ImportResult> {\n const options = ImportOptionsSchema.parse(rawOptions);\n const result = emptyImportResult();\n let header: GraphDataHeader | undefined;\n let receivedEdges = false;\n\n for await (const chunk of chunks) {\n switch (chunk.type) {\n case \"header\": {\n if (header !== undefined) {\n throw new Error(\n \"Graph interchange stream emitted more than one header.\",\n );\n }\n header = chunk.header;\n break;\n }\n case \"nodes\": {\n if (header === undefined) {\n throw new Error(\"Graph interchange stream must start with a header.\");\n }\n if (receivedEdges) {\n throw new Error(\n \"Graph interchange stream cannot emit nodes after edges.\",\n );\n }\n if (chunk.nodes.length === 0) break;\n mergeImportResult(\n result,\n await importGraph(store, graphDataForChunk(header, chunk.nodes, []), {\n ...options,\n refreshStatistics: false,\n }),\n );\n throwIfStreamChunkFailed(result, options);\n break;\n }\n case \"edges\": {\n if (header === undefined) {\n throw new Error(\"Graph interchange stream must start with a header.\");\n }\n receivedEdges = true;\n if (chunk.edges.length === 0) break;\n mergeImportResult(\n result,\n await importGraph(store, graphDataForChunk(header, [], chunk.edges), {\n ...options,\n refreshStatistics: false,\n }),\n );\n throwIfStreamChunkFailed(result, options);\n break;\n }\n }\n }\n\n if (header === undefined) {\n throw new Error(\"Graph interchange stream ended before emitting a header.\");\n }\n await refreshStatisticsAfterImport(\n store,\n options,\n result,\n \"importGraphStream\",\n );\n return { ...result, success: result.errors.length === 0 };\n}\n\nfunction throwIfStreamChunkFailed(\n result: ImportResult,\n options: ResolvedImportOptions,\n): void {\n if (options.onStreamChunkError === \"continue\" || result.errors.length === 0) {\n return;\n }\n throw new Error(\n \"Graph interchange stream aborted after a chunk reported import errors. \" +\n 'Earlier chunks remain committed; use onStreamChunkError: \"continue\" for best-effort ingestion.',\n );\n}\n\nfunction emptyImportResult(): ImportResult {\n return {\n success: true,\n nodes: { created: 0, updated: 0, skipped: 0 },\n edges: { created: 0, updated: 0, skipped: 0 },\n errors: [],\n };\n}\n\nfunction graphDataForChunk(\n header: GraphDataHeader,\n nodes: GraphData[\"nodes\"],\n edges: GraphData[\"edges\"],\n): GraphData {\n return { ...header, nodes, edges };\n}\nfunction mergeImportResult(target: ImportResult, source: ImportResult): void {\n target.nodes.created += source.nodes.created;\n target.nodes.updated += source.nodes.updated;\n target.nodes.skipped += source.nodes.skipped;\n target.edges.created += source.edges.created;\n target.edges.updated += source.edges.updated;\n target.edges.skipped += source.edges.skipped;\n target.errors.push(...source.errors);\n}\n\nasync function refreshStatisticsAfterImport<G extends GraphDef>(\n store: Store<G>,\n options: ResolvedImportOptions,\n result: ImportResult,\n surface: \"importGraph\" | \"importGraphStream\",\n): Promise<void> {\n const mutationCount =\n result.nodes.created +\n result.nodes.updated +\n result.edges.created +\n result.edges.updated;\n if ((options.refreshStatistics ?? true) && mutationCount > 0) {\n try {\n await store.refreshStatistics();\n } catch (error) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.warn === \"function\"\n ) {\n console.warn(\n `[typegraph] ${surface} committed its rows but the follow-up ` +\n \"statistics refresh failed; run store.refreshStatistics() to \" +\n \"give the planner fresh statistics.\",\n error,\n );\n }\n }\n }\n}\n\n// ============================================================\n// Schema Maps\n// ============================================================\n\ntype NodeSchemaEntry = Readonly<{\n registration: NodeRegistration;\n schema: z.ZodObject<z.ZodRawShape>;\n}>;\n\ntype EdgeSchemaEntry = Readonly<{\n registration: EdgeRegistration;\n schema: z.ZodObject<z.ZodRawShape>;\n}>;\n\nfunction buildNodeSchemaMap(\n graph: GraphDef,\n): ReadonlyMap<string, NodeSchemaEntry> {\n const map = new Map<string, NodeSchemaEntry>();\n\n for (const kindName of getNodeKinds(graph)) {\n const registration = graph.nodes[kindName] as NodeRegistration;\n map.set(kindName, {\n registration,\n schema: registration.type.schema,\n });\n }\n\n return map;\n}\n\nfunction buildEdgeSchemaMap(\n graph: GraphDef,\n): ReadonlyMap<string, EdgeSchemaEntry> {\n const map = new Map<string, EdgeSchemaEntry>();\n\n for (const kindName of getEdgeKinds(graph)) {\n const registration = graph.edges[kindName] as EdgeRegistration;\n map.set(kindName, {\n registration,\n schema: registration.type.schema,\n });\n }\n\n return map;\n}\n\n// ============================================================\n// Node Processing\n// ============================================================\n\nasync function processNodes(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n nodes: readonly InterchangeNode[],\n schemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n result: ImportResult,\n errors: ImportError[],\n importedNodeIds: Set<string>,\n lock: GraphWriteLock,\n): Promise<void> {\n const batchSize = options.batchSize;\n\n for (let index = 0; index < nodes.length; index += batchSize) {\n const batch = nodes.slice(index, index + batchSize);\n await processNodeSlice(\n backend,\n graphId,\n registry,\n batch,\n schemas,\n options,\n result,\n errors,\n importedNodeIds,\n lock,\n );\n }\n}\n\nfunction recordNodeOutcome(\n node: InterchangeNode,\n outcome: ProcessResult,\n result: ImportResult,\n errors: ImportError[],\n importedNodeIds: Set<string>,\n): void {\n switch (outcome.status) {\n case \"created\": {\n result.nodes.created++;\n importedNodeIds.add(makeNodeKey(node.kind, node.id));\n break;\n }\n case \"updated\": {\n result.nodes.updated++;\n importedNodeIds.add(makeNodeKey(node.kind, node.id));\n break;\n }\n case \"skipped\": {\n result.nodes.skipped++;\n // A live skipped row is still a valid edge endpoint; a tombstone\n // is not.\n if (outcome.liveTarget) {\n importedNodeIds.add(makeNodeKey(node.kind, node.id));\n }\n break;\n }\n case \"error\": {\n errors.push({\n entityType: \"node\",\n kind: node.kind,\n id: node.id,\n error: outcome.error,\n });\n break;\n }\n }\n}\n\ntype NodeImportCandidate = Readonly<{\n node: InterchangeNode;\n schemaEntry: NodeSchemaEntry;\n props: Record<string, unknown>;\n draft: NodeCreateDraft;\n}>;\n\n/**\n * Processes one batchSize slice of nodes with batched round trips:\n * one `getNodes` per kind for existence, one `checkUniqueBatch` per\n * (constraint, kind) for uniqueness pre-checks (both priming the shared\n * batch validation caches), then one multi-row insert and one batched\n * side-effect pass for the accepted creates. Per-row semantics are\n * unchanged — conflicts route by `onConflict`, a uniqueness conflict is a\n * per-row error entry, and rows repeating an id already seen in the slice\n * defer to the per-row path after the flush (so they observe the first\n * occurrence's row exactly as the sequential implementation did).\n */\nasync function processNodeSlice(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n batch: readonly InterchangeNode[],\n schemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n result: ImportResult,\n errors: ImportError[],\n importedNodeIds: Set<string>,\n lock: GraphWriteLock,\n): Promise<void> {\n const record = (node: InterchangeNode, outcome: ProcessResult): void => {\n recordNodeOutcome(node, outcome, result, errors, importedNodeIds);\n };\n\n // Pass 1 (synchronous): kind + property + validity validation, and\n // in-slice duplicate deferral.\n const candidates: NodeImportCandidate[] = [];\n const deferred: InterchangeNode[] = [];\n const seenKeys = new Set<string>();\n for (const node of batch) {\n const schemaEntry = schemas.get(node.kind);\n if (!schemaEntry) {\n record(node, {\n status: \"error\",\n error: `Unknown node kind: ${node.kind}`,\n });\n continue;\n }\n const propsResult = validateProperties(\n node.properties,\n schemaEntry.schema,\n options.onUnknownProperty,\n );\n if (!propsResult.success) {\n record(node, { status: \"error\", error: propsResult.error });\n continue;\n }\n const validityError = validateValidityWindow(node);\n if (validityError !== undefined) {\n record(node, { status: \"error\", error: validityError });\n continue;\n }\n const key = makeNodeKey(node.kind, node.id);\n if (seenKeys.has(key)) {\n deferred.push(node);\n continue;\n }\n seenKeys.add(key);\n candidates.push({\n node,\n schemaEntry,\n props: propsResult.data,\n draft: {\n kind: node.kind,\n id: node.id,\n nodeKind: schemaEntry.registration.type,\n uniqueConstraints: schemaEntry.registration.unique ?? [],\n validatedProps: propsResult.data,\n // NodeCreateDraft.validFrom is string | undefined (never null) — it\n // only feeds batch validation-cache priming, which never inspects\n // it, so normalizing the explicit-NULL sentinel away here is inert.\n // The actual insert (buildImportInsertParams) reads node.validFrom\n // directly and preserves the null.\n validFrom: node.validFrom ?? undefined,\n validTo: node.validTo,\n },\n });\n }\n\n // Prime the validation caches with batched reads, then route each row\n // against memory in input order.\n const {\n backend: validationBackend,\n registerPendingNode,\n registerPendingUniqueEntries,\n registerAppliedNodeUpdate,\n seedNodeRow,\n seedUniqueRow,\n } = createNodeBatchValidationBackend(graphId, registry, backend);\n await primeBatchValidationCaches(\n { graphId, registry },\n candidates.map((candidate) => candidate.draft),\n backend,\n { seedNodeRow, seedUniqueRow },\n );\n\n const writeContext = { graphId, registry, lock };\n const accepted: NodeImportCandidate[] = [];\n for (const candidate of candidates) {\n const { node, schemaEntry, props } = candidate;\n const uniqueConstraints = schemaEntry.registration.unique ?? [];\n const existing = await validationBackend.getNode(\n graphId,\n node.kind,\n node.id,\n );\n\n if (existing) {\n switch (options.onConflict) {\n case \"skip\": {\n record(node, {\n status: \"skipped\",\n liveTarget: isLiveNodeRow(existing),\n });\n break;\n }\n case \"error\": {\n record(node, {\n status: \"error\",\n error: `Node already exists: ${node.kind}:${node.id}`,\n });\n break;\n }\n case \"update\": {\n if (!isLiveNodeRow(existing)) {\n // Import never resurrects a tombstone — see processNode.\n record(node, { status: \"skipped\", liveTarget: false });\n break;\n }\n const updateResult = await catchUniquenessError(() =>\n applyNodeUpdate(\n writeContext,\n {\n existing,\n schema: schemaEntry.registration.type.schema,\n validatedProps: props,\n uniqueConstraints,\n ...(node.validTo !== undefined && { validTo: node.validTo }),\n },\n // The pending-aware overlay, not the raw backend: the update's\n // uniqueness pre-check must see a unique value already reserved by\n // an unflushed create EARLIER in this slice, so it degrades to a\n // per-row error exactly as the sequential path does — rather than\n // claiming the key on the real backend and colliding with that\n // create at flush (which would throw and roll back the whole\n // import). Writes still delegate to the real backend.\n validationBackend,\n ),\n );\n if (updateResult.ok) {\n // The update mutated the real backend's uniqueness rows directly;\n // reconcile the shared prime caches so a later create in this\n // slice sees the post-update reservation state (matching the\n // sequential path). See registerAppliedNodeUpdate.\n registerAppliedNodeUpdate(\n node.kind,\n node.id,\n rowPropsToObject(existing.props),\n props,\n uniqueConstraints,\n );\n }\n record(\n node,\n updateResult.ok ?\n { status: \"updated\" }\n : { status: \"error\", error: updateResult.error },\n );\n break;\n }\n }\n continue;\n }\n\n const uniquenessResult = await catchUniquenessError(() =>\n checkUniquenessConstraints(\n { graphId, registry, backend: validationBackend },\n node.kind,\n node.id,\n props,\n uniqueConstraints,\n ),\n );\n if (!uniquenessResult.ok) {\n record(node, { status: \"error\", error: uniquenessResult.error });\n continue;\n }\n\n registerPendingNode(buildImportInsertParams(graphId, candidate));\n registerPendingUniqueEntries(node.kind, node.id, props, uniqueConstraints);\n accepted.push(candidate);\n }\n\n // Flush the accepted creates: one multi-row insert, then the batched\n // side effects (uniqueness entries, fulltext, embeddings).\n if (accepted.length > 0) {\n const insertParamsList = accepted.map((candidate) =>\n buildImportInsertParams(graphId, candidate),\n );\n if (backend.insertNodesBatch === undefined) {\n for (const params of insertParamsList) {\n await backend.insertNode(params);\n }\n } else {\n await backend.insertNodesBatch(insertParamsList);\n }\n await applyNodeInsertSideEffectsBatch(\n writeContext,\n accepted.map((candidate) => ({\n kind: candidate.node.kind,\n id: candidate.node.id,\n schema: candidate.schemaEntry.registration.type.schema,\n props: candidate.props,\n uniqueConstraints: candidate.schemaEntry.registration.unique ?? [],\n })),\n backend,\n );\n for (const candidate of accepted) {\n record(candidate.node, { status: \"created\" });\n }\n }\n\n // In-slice duplicate ids run per-row AFTER the flush so they observe the\n // first occurrence's committed row, exactly as the sequential path did.\n for (const node of deferred) {\n record(\n node,\n await processNode(\n backend,\n graphId,\n registry,\n node,\n schemas,\n options,\n lock,\n ),\n );\n }\n}\n\nfunction buildImportInsertParams(\n graphId: string,\n candidate: NodeImportCandidate,\n): Parameters<GraphBackend[\"insertNode\"]>[0] {\n const { node, props } = candidate;\n return {\n graphId,\n kind: node.kind,\n id: node.id,\n props,\n ...(node.validFrom !== undefined && { validFrom: node.validFrom }),\n ...(node.validTo !== undefined && { validTo: node.validTo }),\n };\n}\n\ntype ProcessResult =\n | { status: \"created\" }\n | { status: \"updated\" }\n /**\n * `liveTarget` distinguishes \"skipped because a LIVE row already exists\"\n * (a valid edge endpoint) from \"skipped because the row is a tombstone\"\n * (which must NOT be recorded as available — a live edge pointing at a\n * soft-deleted node violates the endpoint-liveness invariant the\n * collection API enforces).\n */\n | { status: \"skipped\"; liveTarget: boolean }\n | { status: \"error\"; error: string };\n\ntype UniquenessGuardResult<T> =\n Readonly<{ ok: true; value: T }> | Readonly<{ ok: false; error: string }>;\n\n/**\n * Runs `fn` and reports a `UniquenessError` as a per-row result instead of\n * letting it abort the whole import — the same recovery both the node\n * uniqueness pre-check and the update path need. Any other error still\n * propagates.\n */\nasync function catchUniquenessError<T>(\n fn: () => Promise<T>,\n): Promise<UniquenessGuardResult<T>> {\n try {\n return { ok: true, value: await fn() };\n } catch (error) {\n if (error instanceof UniquenessError) {\n return { ok: false, error: error.message };\n }\n throw error;\n }\n}\n\n/**\n * Validates an entity's validity-window timestamps against the canonical\n * fixed-width UTC ISO-8601 contract that `create` / `update` enforce, so no\n * import write path can persist a non-canonical `valid_from` / `valid_to` that\n * later mis-sorts as text against an `asOf` read coordinate. The interchange\n * schema enforces the same contract at the parse boundary, but `importGraph`\n * accepts a pre-typed `GraphData` and does not re-parse it, so this is the\n * guarantee for callers that bypass the schema. Returns a per-row error message\n * (recorded in the import result) instead of throwing, so one malformed row\n * does not abort the whole import.\n */\nfunction validateValidityWindow(\n entity: Readonly<{\n validFrom?: string | null | undefined;\n validTo?: string | undefined;\n }>,\n): string | undefined {\n try {\n // null is a confirmed open-left window (see InterchangeNodeSchema's\n // validFrom doc), not a value to format-check — treat it like\n // \"not provided\" here, same as the canonical-date validator does.\n validateOptionalCanonicalIsoDate(\n entity.validFrom ?? undefined,\n \"validFrom\",\n );\n validateOptionalCanonicalIsoDate(entity.validTo, \"validTo\");\n return undefined;\n } catch (error) {\n return error instanceof Error ? error.message : String(error);\n }\n}\n\nasync function processNode(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n node: InterchangeNode,\n schemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n lock: GraphWriteLock,\n): Promise<ProcessResult> {\n // Validate kind exists\n const schemaEntry = schemas.get(node.kind);\n if (!schemaEntry) {\n return { status: \"error\", error: `Unknown node kind: ${node.kind}` };\n }\n\n // Validate and transform properties\n const propsResult = validateProperties(\n node.properties,\n schemaEntry.schema,\n options.onUnknownProperty,\n );\n\n if (!propsResult.success) {\n return { status: \"error\", error: propsResult.error };\n }\n\n const validityError = validateValidityWindow(node);\n if (validityError !== undefined) {\n return { status: \"error\", error: validityError };\n }\n\n const { registration } = schemaEntry;\n const uniqueConstraints = registration.unique ?? [];\n const writeContext = { graphId, registry, lock };\n\n // Check if node already exists\n const existing = await backend.getNode(graphId, node.kind, node.id);\n\n if (existing) {\n switch (options.onConflict) {\n case \"skip\": {\n return { status: \"skipped\", liveTarget: isLiveNodeRow(existing) };\n }\n case \"error\": {\n return {\n status: \"error\",\n error: `Node already exists: ${node.kind}:${node.id}`,\n };\n }\n case \"update\": {\n if (!isLiveNodeRow(existing)) {\n // A soft-deleted node is not updatable: import never resurrects a\n // tombstone, and running the live-row update pipeline here would\n // recreate uniqueness/embedding/fulltext rows for a node that\n // stays invisible — a uniqueness reservation held by a tombstoned\n // node would block live creates of the same value.\n return { status: \"skipped\", liveTarget: false };\n }\n // Route through the shared write step so the update maintains\n // uniqueness entries, embeddings, and fulltext — the collection API's\n // integrity, which a raw backend.updateNode would skip. A uniqueness\n // conflict is reported per-row (updateUniquenessEntries throws before\n // the row is written, so no partial write escapes).\n const updateResult = await catchUniquenessError(() =>\n applyNodeUpdate(\n writeContext,\n {\n existing,\n schema: registration.type.schema,\n validatedProps: propsResult.data,\n uniqueConstraints,\n ...(node.validTo !== undefined && { validTo: node.validTo }),\n },\n backend,\n ),\n );\n if (!updateResult.ok) {\n return { status: \"error\", error: updateResult.error };\n }\n return { status: \"updated\" };\n }\n }\n }\n\n // Create new node. Pre-check uniqueness (as the collection create does) so a\n // conflict is a per-row error rather than an orphaned node row, then apply the\n // integrity side effects the raw backend.insertNode would otherwise bypass.\n const uniquenessResult = await catchUniquenessError(() =>\n checkUniquenessConstraints(\n { graphId, registry, backend },\n node.kind,\n node.id,\n propsResult.data,\n uniqueConstraints,\n ),\n );\n if (!uniquenessResult.ok) {\n return { status: \"error\", error: uniquenessResult.error };\n }\n\n await backend.insertNode({\n graphId,\n kind: node.kind,\n id: node.id,\n props: propsResult.data,\n ...(node.validFrom !== undefined && { validFrom: node.validFrom }),\n ...(node.validTo !== undefined && { validTo: node.validTo }),\n });\n await applyNodeInsertSideEffects(\n writeContext,\n {\n kind: node.kind,\n id: node.id,\n schema: registration.type.schema,\n props: propsResult.data,\n uniqueConstraints,\n },\n backend,\n );\n\n return { status: \"created\" };\n}\n\n// ============================================================\n// Edge Processing\n// ============================================================\n\nasync function processEdges(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n edges: readonly InterchangeEdge[],\n edgeSchemas: ReadonlyMap<string, EdgeSchemaEntry>,\n nodeSchemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n result: ImportResult,\n errors: ImportError[],\n importedNodeIds: Set<string>,\n): Promise<void> {\n const batchSize = options.batchSize;\n\n for (let index = 0; index < edges.length; index += batchSize) {\n const batch = edges.slice(index, index + batchSize);\n await processEdgeSlice(\n backend,\n graphId,\n registry,\n batch,\n edgeSchemas,\n nodeSchemas,\n options,\n result,\n errors,\n importedNodeIds,\n );\n }\n}\n\nfunction recordEdgeOutcome(\n edge: InterchangeEdge,\n outcome: ProcessResult,\n result: ImportResult,\n errors: ImportError[],\n): void {\n switch (outcome.status) {\n case \"created\": {\n result.edges.created++;\n break;\n }\n case \"updated\": {\n result.edges.updated++;\n break;\n }\n case \"skipped\": {\n result.edges.skipped++;\n break;\n }\n case \"error\": {\n errors.push({\n entityType: \"edge\",\n kind: edge.kind,\n id: edge.id,\n error: outcome.error,\n });\n break;\n }\n }\n}\n\ntype EdgeImportCandidate = Readonly<{\n edge: InterchangeEdge;\n props: Record<string, unknown>;\n}>;\n\n/**\n * Processes one batchSize slice of edges with batched round trips: one\n * `getNodes` per endpoint kind for reference liveness, one `getEdges` for\n * existence, and one multi-row insert for the accepted creates. Per-row\n * semantics are unchanged; duplicate ids within a slice defer to the\n * per-row path after the flush.\n */\nasync function processEdgeSlice(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n batch: readonly InterchangeEdge[],\n edgeSchemas: ReadonlyMap<string, EdgeSchemaEntry>,\n nodeSchemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n result: ImportResult,\n errors: ImportError[],\n importedNodeIds: Set<string>,\n): Promise<void> {\n const record = (edge: InterchangeEdge, outcome: ProcessResult): void => {\n recordEdgeOutcome(edge, outcome, result, errors);\n };\n\n // Pass 1 (synchronous): kind, endpoint-kind, endpoint-assignability,\n // property, and validity validation, plus in-slice duplicate deferral.\n const candidates: EdgeImportCandidate[] = [];\n const deferred: InterchangeEdge[] = [];\n const seenIds = new Set<string>();\n for (const edge of batch) {\n const schemaEntry = edgeSchemas.get(edge.kind);\n if (!schemaEntry) {\n record(edge, {\n status: \"error\",\n error: `Unknown edge kind: ${edge.kind}`,\n });\n continue;\n }\n if (!nodeSchemas.has(edge.from.kind)) {\n record(edge, {\n status: \"error\",\n error: `Unknown from node kind: ${edge.from.kind}`,\n });\n continue;\n }\n if (!nodeSchemas.has(edge.to.kind)) {\n record(edge, {\n status: \"error\",\n error: `Unknown to node kind: ${edge.to.kind}`,\n });\n continue;\n }\n const endpointError = validateEdgeEndpoints(\n edge.kind,\n edge.from.kind,\n edge.to.kind,\n schemaEntry.registration,\n registry,\n );\n if (endpointError !== undefined) {\n record(edge, { status: \"error\", error: endpointError.message });\n continue;\n }\n const propsResult = validateProperties(\n edge.properties,\n schemaEntry.schema,\n options.onUnknownProperty,\n );\n if (!propsResult.success) {\n record(edge, { status: \"error\", error: propsResult.error });\n continue;\n }\n const validityError = validateValidityWindow(edge);\n if (validityError !== undefined) {\n record(edge, { status: \"error\", error: validityError });\n continue;\n }\n if (seenIds.has(edge.id)) {\n deferred.push(edge);\n continue;\n }\n seenIds.add(edge.id);\n candidates.push({ edge, props: propsResult.data });\n }\n\n // Batch the endpoint-liveness reads: one getNodes per endpoint kind for\n // every key the import itself didn't create. Falls back to per-row\n // getNode inside the routing loop when the backend lacks getNodes.\n const liveEndpointKeys = new Set<string>();\n const checkedEndpointKeys = new Set<string>();\n if (options.validateReferences && backend.getNodes !== undefined) {\n const idsByKind = new Map<string, Set<string>>();\n for (const { edge } of candidates) {\n for (const endpoint of [edge.from, edge.to]) {\n const key = makeNodeKey(endpoint.kind, endpoint.id);\n if (importedNodeIds.has(key) || checkedEndpointKeys.has(key)) continue;\n checkedEndpointKeys.add(key);\n const ids = idsByKind.get(endpoint.kind) ?? new Set<string>();\n ids.add(endpoint.id);\n idsByKind.set(endpoint.kind, ids);\n }\n }\n for (const [kind, ids] of idsByKind) {\n const rows = await backend.getNodes(graphId, kind, [...ids]);\n for (const row of rows) {\n if (isLiveNodeRow(row)) {\n liveEndpointKeys.add(makeNodeKey(kind, row.id));\n }\n }\n }\n }\n\n const endpointIsLive = async (endpoint: {\n kind: string;\n id: string;\n }): Promise<boolean> => {\n const key = makeNodeKey(endpoint.kind, endpoint.id);\n if (importedNodeIds.has(key)) return true;\n if (checkedEndpointKeys.has(key)) return liveEndpointKeys.has(key);\n const row = await backend.getNode(graphId, endpoint.kind, endpoint.id);\n return row !== undefined && isLiveNodeRow(row);\n };\n\n // Batch the existence reads. Falls back to per-row getEdge when the\n // backend lacks getEdges.\n const existingById = new Map<\n string,\n Awaited<ReturnType<GraphBackend[\"getEdge\"]>>\n >();\n if (candidates.length > 0 && backend.getEdges !== undefined) {\n const rows = await backend.getEdges(\n graphId,\n candidates.map((candidate) => candidate.edge.id),\n );\n for (const row of rows) {\n existingById.set(row.id, row);\n }\n for (const { edge } of candidates) {\n if (!existingById.has(edge.id)) existingById.set(edge.id, undefined);\n }\n }\n\n const accepted: EdgeImportCandidate[] = [];\n for (const candidate of candidates) {\n const { edge, props } = candidate;\n\n if (options.validateReferences) {\n if (!(await endpointIsLive(edge.from))) {\n record(edge, {\n status: \"error\",\n error: `From node not found: ${edge.from.kind}:${edge.from.id}`,\n });\n continue;\n }\n if (!(await endpointIsLive(edge.to))) {\n record(edge, {\n status: \"error\",\n error: `To node not found: ${edge.to.kind}:${edge.to.id}`,\n });\n continue;\n }\n }\n\n const existing =\n existingById.has(edge.id) ?\n existingById.get(edge.id)\n : await backend.getEdge(graphId, edge.id);\n\n if (existing) {\n switch (options.onConflict) {\n case \"skip\": {\n record(edge, {\n status: \"skipped\",\n liveTarget: existing.deleted_at === undefined,\n });\n break;\n }\n case \"error\": {\n record(edge, {\n status: \"error\",\n error: `Edge already exists: ${edge.id}`,\n });\n break;\n }\n case \"update\": {\n if (existing.deleted_at !== undefined) {\n record(edge, { status: \"skipped\", liveTarget: false });\n break;\n }\n await backend.updateEdge({\n graphId,\n id: edge.id,\n props,\n ...(edge.validTo !== undefined && { validTo: edge.validTo }),\n });\n record(edge, { status: \"updated\" });\n break;\n }\n }\n continue;\n }\n\n accepted.push(candidate);\n }\n\n if (accepted.length > 0) {\n const insertParamsList = accepted.map(({ edge, props }) => ({\n graphId,\n id: edge.id,\n kind: edge.kind,\n fromKind: edge.from.kind,\n fromId: edge.from.id,\n toKind: edge.to.kind,\n toId: edge.to.id,\n props,\n ...(edge.validFrom !== undefined && { validFrom: edge.validFrom }),\n ...(edge.validTo !== undefined && { validTo: edge.validTo }),\n }));\n if (backend.insertEdgesBatch === undefined) {\n for (const params of insertParamsList) {\n await backend.insertEdge(params);\n }\n } else {\n await backend.insertEdgesBatch(insertParamsList);\n }\n for (const candidate of accepted) {\n record(candidate.edge, { status: \"created\" });\n }\n }\n\n for (const edge of deferred) {\n record(\n edge,\n await processEdge(\n backend,\n graphId,\n registry,\n edge,\n edgeSchemas,\n nodeSchemas,\n options,\n importedNodeIds,\n ),\n );\n }\n}\n\nasync function processEdge(\n backend: GraphBackend | TransactionBackend,\n graphId: string,\n registry: KindRegistry,\n edge: InterchangeEdge,\n edgeSchemas: ReadonlyMap<string, EdgeSchemaEntry>,\n nodeSchemas: ReadonlyMap<string, NodeSchemaEntry>,\n options: ResolvedImportOptions,\n importedNodeIds: Set<string>,\n): Promise<ProcessResult> {\n // Validate edge kind exists\n const schemaEntry = edgeSchemas.get(edge.kind);\n if (!schemaEntry) {\n return { status: \"error\", error: `Unknown edge kind: ${edge.kind}` };\n }\n\n // Validate endpoint kinds exist\n if (!nodeSchemas.has(edge.from.kind)) {\n return {\n status: \"error\",\n error: `Unknown from node kind: ${edge.from.kind}`,\n };\n }\n if (!nodeSchemas.has(edge.to.kind)) {\n return { status: \"error\", error: `Unknown to node kind: ${edge.to.kind}` };\n }\n\n // Validate endpoint kinds are allowed for this edge type. Uses the shared,\n // subclass-aware check (registry.isAssignableTo) that the collection API uses,\n // so an edge whose endpoint is a subclass of a declared kind — legal in the\n // store and emitted verbatim by export — imports cleanly instead of being\n // rejected by an exact-kind comparison.\n const endpointError = validateEdgeEndpoints(\n edge.kind,\n edge.from.kind,\n edge.to.kind,\n schemaEntry.registration,\n registry,\n );\n if (endpointError !== undefined) {\n return { status: \"error\", error: endpointError.message };\n }\n\n // Validate references exist (in DB or in import batch)\n if (options.validateReferences) {\n const fromKey = makeNodeKey(edge.from.kind, edge.from.id);\n const toKey = makeNodeKey(edge.to.kind, edge.to.id);\n\n // Check import batch first, then DB. The DB row must be LIVE: getNode\n // returns tombstones, and inserting an edge whose endpoint is\n // soft-deleted would bypass the endpoint-liveness invariant the\n // collection API enforces.\n if (!importedNodeIds.has(fromKey)) {\n const fromExists = await backend.getNode(\n graphId,\n edge.from.kind,\n edge.from.id,\n );\n if (fromExists === undefined || !isLiveNodeRow(fromExists)) {\n return {\n status: \"error\",\n error: `From node not found: ${edge.from.kind}:${edge.from.id}`,\n };\n }\n }\n\n if (!importedNodeIds.has(toKey)) {\n const toExists = await backend.getNode(graphId, edge.to.kind, edge.to.id);\n if (toExists === undefined || !isLiveNodeRow(toExists)) {\n return {\n status: \"error\",\n error: `To node not found: ${edge.to.kind}:${edge.to.id}`,\n };\n }\n }\n }\n\n // Validate and transform properties\n const propsResult = validateProperties(\n edge.properties,\n schemaEntry.schema,\n options.onUnknownProperty,\n );\n\n if (!propsResult.success) {\n return { status: \"error\", error: propsResult.error };\n }\n\n const validityError = validateValidityWindow(edge);\n if (validityError !== undefined) {\n return { status: \"error\", error: validityError };\n }\n\n // Check if edge already exists\n const existing = await backend.getEdge(graphId, edge.id);\n\n if (existing) {\n switch (options.onConflict) {\n case \"skip\": {\n return {\n status: \"skipped\",\n liveTarget: existing.deleted_at === undefined,\n };\n }\n case \"error\": {\n return { status: \"error\", error: `Edge already exists: ${edge.id}` };\n }\n case \"update\": {\n // Same contract as nodes: import never resurrects a tombstone, and\n // the backend's update targets live rows only.\n if (existing.deleted_at !== undefined) {\n return { status: \"skipped\", liveTarget: false };\n }\n await backend.updateEdge({\n graphId,\n id: edge.id,\n props: propsResult.data,\n ...(edge.validTo !== undefined && { validTo: edge.validTo }),\n });\n return { status: \"updated\" };\n }\n }\n }\n\n // Create new edge\n await backend.insertEdge({\n graphId,\n id: edge.id,\n kind: edge.kind,\n fromKind: edge.from.kind,\n fromId: edge.from.id,\n toKind: edge.to.kind,\n toId: edge.to.id,\n props: propsResult.data,\n ...(edge.validFrom !== undefined && { validFrom: edge.validFrom }),\n ...(edge.validTo !== undefined && { validTo: edge.validTo }),\n });\n\n return { status: \"created\" };\n}\n\n// ============================================================\n// Property Validation\n// ============================================================\n\ntype ValidationResult =\n | { success: true; data: Record<string, unknown> }\n | { success: false; error: string };\n\nfunction validateProperties(\n properties: Record<string, unknown>,\n schema: z.ZodObject<z.ZodRawShape>,\n unknownStrategy: UnknownPropertyStrategy,\n): ValidationResult {\n try {\n // Get the schema's known keys\n const knownKeys = new Set(Object.keys(schema.shape));\n\n // Check for unknown properties\n const unknownKeys = Object.keys(properties).filter(\n (key) => !knownKeys.has(key),\n );\n\n if (unknownKeys.length > 0) {\n switch (unknownStrategy) {\n case \"error\": {\n return {\n success: false,\n error: `Unknown properties: ${unknownKeys.join(\", \")}`,\n };\n }\n case \"strip\": {\n // Remove unknown properties\n const stripped: Record<string, unknown> = {};\n for (const key of knownKeys) {\n if (key in properties) {\n stripped[key] = properties[key];\n }\n }\n // Validate stripped properties\n const result = schema.safeParse(stripped);\n if (!result.success) {\n return {\n success: false,\n error: formatZodError(result.error),\n };\n }\n return {\n success: true,\n data: result.data,\n };\n }\n case \"allow\": {\n // Validate the known fields, then return the ORIGINAL properties\n // verbatim — unknown keys preserved, known values byte-for-byte.\n // Exported data already carries post-transform values, so\n // re-applying schema transforms here would corrupt every\n // export→import round trip whose transforms are not idempotent.\n // \"allow\" is the fidelity-preserving strategy; \"strip\" (and the\n // create path) remain the normalizing ones.\n const result = schema.safeParse(properties);\n if (!result.success) {\n return {\n success: false,\n error: formatZodError(result.error),\n };\n }\n return { success: true, data: properties };\n }\n }\n }\n\n // No unknown properties - standard validation\n const result = schema.safeParse(properties);\n if (!result.success) {\n return { success: false, error: formatZodError(result.error) };\n }\n\n return { success: true, data: result.data };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: `Validation error: ${message}` };\n }\n}\n\nfunction formatZodError(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.join(\".\");\n return path ? `${path}: ${issue.message}` : issue.message;\n })\n .join(\"; \");\n}\n\n// ============================================================\n// Helpers\n// ============================================================\n\nfunction makeNodeKey(kind: string, id: string): string {\n return `${kind}:${id}`;\n}\n"]}
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- // src/utils/presence.ts
4
- function isPresent(value) {
5
- return value !== null && value !== void 0;
6
- }
7
- function requireDefined(value, message = "Expected a defined value.") {
8
- if (value === void 0 || value === null) throw new TypeError(message);
9
- return value;
10
- }
11
-
12
- exports.isPresent = isPresent;
13
- exports.requireDefined = requireDefined;
14
- //# sourceMappingURL=chunk-764JHTLT.cjs.map
15
- //# sourceMappingURL=chunk-764JHTLT.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/presence.ts"],"names":[],"mappings":";;;AAGO,SAAS,UAAU,KAAA,EAAyB;AACjD,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACrC;AAOO,SAAS,cAAA,CACd,KAAA,EACA,OAAA,GAAU,2BAAA,EACM;AAChB,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,MAAM,MAAM,IAAI,UAAU,OAAO,CAAA;AACtE,EAAA,OAAO,KAAA;AACT","file":"chunk-764JHTLT.cjs","sourcesContent":["/**\n * Predicate for values that are materially present in database rows.\n */\nexport function isPresent(value: unknown): boolean {\n return value !== null && value !== undefined;\n}\n\n/**\n * Narrows a value after a runtime presence check. Prefer this to a non-null\n * assertion: an invalid invariant fails at the point where it is assumed,\n * with a stable error instead of propagating `undefined` into unrelated code.\n */\nexport function requireDefined<T>(\n value: T,\n message = \"Expected a defined value.\",\n): NonNullable<T> {\n if (value === undefined || value === null) throw new TypeError(message);\n return value;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/canonical.ts"],"names":[],"mappings":";;;AAiBO,SAAS,cAAA,CAAe,MAAc,KAAA,EAAyB;AACpE,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,UAAS,EAAG;AAC/C,MAAA,MAAA,CAAO,GAAG,CAAA,GAAK,KAAA,CAAkC,GAAG,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAaO,SAAS,cAAA,CAAe,GAAY,CAAA,EAAqB;AAC9D,EAAA,OACE,IAAA,CAAK,UAAU,CAAA,EAAG,cAAc,MAAM,IAAA,CAAK,SAAA,CAAU,GAAG,cAAc,CAAA;AAE1E","file":"chunk-ACSVZPK7.cjs","sourcesContent":["/**\n * Canonical-form helpers for deterministic schema serialization.\n *\n * Used by both content-hashing (`computeSchemaHash`) and structural diffing\n * (`computeSchemaDiff`) to ensure that semantically-equivalent objects with\n * differently-ordered keys produce identical canonical strings.\n */\n\n/**\n * `JSON.stringify` replacer that sorts object keys recursively.\n *\n * Apply via `JSON.stringify(value, sortedReplacer)` to obtain output in\n * which sibling keys at every depth appear in lexicographic order.\n *\n * Arrays are passed through unchanged — array order is semantically\n * meaningful and must not be normalized.\n */\nexport function sortedReplacer(_key: string, value: unknown): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value).toSorted()) {\n sorted[key] = (value as Record<string, unknown>)[key];\n }\n return sorted;\n }\n return value;\n}\n\n/**\n * Compare two values for canonical-form equality.\n *\n * Returns `true` when both values produce identical JSON under `sortedReplacer`\n * — i.e., they have the same JSON structure regardless of object key order.\n * Used by diff machinery to detect semantic changes in JSON-shaped fields.\n *\n * Note: callers must handle `undefined` themselves — `JSON.stringify(undefined)`\n * returns `undefined`, so two `undefined` inputs would compare equal here, which\n * may or may not be the desired semantics depending on context.\n */\nexport function canonicalEqual(a: unknown, b: unknown): boolean {\n return (\n JSON.stringify(a, sortedReplacer) === JSON.stringify(b, sortedReplacer)\n );\n}\n"]}
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkJ2ICGNHO_cjs = require('./chunk-J2ICGNHO.cjs');
4
-
5
- // src/graph-extension/define-graph-extension.ts
6
- function defineGraphExtension(input) {
7
- return chunkJ2ICGNHO_cjs.unwrap(chunkJ2ICGNHO_cjs.validateGraphExtension(input, { strict: true }));
8
- }
9
-
10
- exports.defineGraphExtension = defineGraphExtension;
11
- //# sourceMappingURL=chunk-B3F2D3SP.cjs.map
12
- //# sourceMappingURL=chunk-B3F2D3SP.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/backend/drizzle/columns/fulltext.ts","../src/backend/drizzle/schema/postgres.ts","../src/backend/drizzle/schema/sqlite.ts","../src/backend/drizzle/ddl.ts"],"names":["nodes","edges","recordedNodes","recordedEdges","recordedClock","uniques","schemaVersions","fulltext","DEFAULT_TABLE_NAMES","text","integer","primaryKey","index","uniqueIndex","sql","tables","getSqliteTableConfig","getPgTableConfig"],"mappings":"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","file":"chunk-BGYJW37L.js","sourcesContent":["/**\n * Custom Drizzle column types for the PostgreSQL `tsvectorStrategy`\n * fulltext table (`tsvector` + `regconfig`). Lets drizzle-kit\n * introspect the typed fulltext table the same way it introspects\n * `nodes`, `edges`, etc. Alternate strategies (pg_trgm, ParadeDB,\n * pgroonga) carry their own DDL via `FulltextStrategy.ownedTables()`\n * and don't use these columns.\n */\nimport { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * PostgreSQL `regconfig` column type — a registered text-search\n * configuration name (e.g. `'english'::regconfig`). Identical wire\n * format to `text`, but the `regconfig` SQL type lets a generated\n * column reference it inside `to_tsvector(\"language\", \"content\")`\n * as an immutable expression.\n */\nexport const regconfig = customType<{\n data: string;\n driverData: string;\n}>({\n dataType: () => \"regconfig\",\n});\n\n/**\n * PostgreSQL `tsvector` column type. Represents a parsed,\n * dictionary-normalized document; the GIN index that\n * `tsvectorFulltextTable` declares makes `@@ tsquery` lookups cheap.\n *\n * The on-the-wire driver representation is the canonical text form\n * (`'word1':1 'word2':2`); this type is read-only in practice — the\n * value is computed by a `GENERATED ALWAYS AS (...) STORED` clause —\n * so no `toDriver` mapping is provided.\n */\nexport const tsvector = customType<{\n data: string;\n driverData: string;\n}>({\n dataType: () => \"tsvector\",\n});\n","/**\n * Drizzle PostgreSQL schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Uses PostgreSQL-native types: JSONB, TIMESTAMPTZ, BOOLEAN, VECTOR.\n *\n * The embeddings table uses pgvector's native VECTOR type. Ensure the\n * extension is enabled before creating tables:\n *\n * ```sql\n * CREATE EXTENSION IF NOT EXISTS vector;\n * ```\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n *\n * // Custom table names\n * import { createPostgresTables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n * const tables = createPostgresTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n bigint,\n boolean,\n index,\n integer,\n jsonb,\n pgTable,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n} from \"drizzle-orm/pg-core\";\n\nimport {\n buildPostgresEdgeIndexBuilders,\n buildPostgresNodeIndexBuilders,\n buildPostgresSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport { assertNoSystemIndexNameCollision } from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\nimport { regconfig, tsvector } from \"../columns/fulltext\";\n\n/**\n * Table name configuration.\n */\nexport type PostgresTableNames = Readonly<{\n nodes: string;\n edges: string;\n recordedNodes: string;\n recordedEdges: string;\n recordedClock: string;\n revisionOrigins: string;\n uniques: string;\n schemaVersions: string;\n fulltext: string;\n indexMaterializations: string;\n contributionMaterializations: string;\n kindRemovals: string;\n reconciliationMarkers: string;\n}>;\n\nexport type CreatePostgresTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: PostgresTableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n recordedNodes: \"typegraph_recorded_nodes\",\n recordedEdges: \"typegraph_recorded_edges\",\n recordedClock: \"typegraph_recorded_clock\",\n revisionOrigins: \"typegraph_revision_origins\",\n uniques: \"typegraph_node_uniques\",\n schemaVersions: \"typegraph_schema_versions\",\n fulltext: \"typegraph_node_fulltext\",\n indexMaterializations: \"typegraph_index_materializations\",\n contributionMaterializations: \"typegraph_contribution_materializations\",\n kindRemovals: \"typegraph_kind_removals\",\n reconciliationMarkers: \"typegraph_reconciliation_markers\",\n};\n\n/**\n * Creates PostgreSQL table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createPostgresTables(\n names: Partial<PostgresTableNames> = {},\n options: CreatePostgresTablesOptions = {},\n) {\n const n: PostgresTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n assertNoSystemIndexNameCollision(indexes, n);\n\n const nodes = pgTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: jsonb(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n // for both dialects + the runtime materializer).\n ...buildPostgresSystemIndexBuilders(\"nodes\", n.nodes, t),\n ...buildPostgresNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = pgTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: jsonb(\"props\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n ...buildPostgresSystemIndexBuilders(\"edges\", n.edges, t),\n ...buildPostgresEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const recordedNodes = pgTable(\n n.recordedNodes,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: jsonb(\"props\").notNull(),\n version: integer(\"version\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: jsonb(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildPostgresSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n ],\n );\n\n const recordedEdges = pgTable(\n n.recordedEdges,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: jsonb(\"props\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: jsonb(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildPostgresSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n ],\n );\n\n const recordedClock = pgTable(\n n.recordedClock,\n {\n graphId: text(\"graph_id\").notNull(),\n revision: bigint(\"revision\", { mode: \"number\" }).notNull(),\n recordedAt: timestamp(\"recorded_at\", { withTimezone: true }).notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const revisionOrigins = pgTable(\n n.revisionOrigins,\n {\n graphId: text(\"graph_id\").notNull(),\n origin: text(\"origin\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const uniques = pgTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n const schemaVersions = pgTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: jsonb(\"schema_doc\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n isActive: boolean(\"is_active\").notNull().default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n // Partial unique index enforcing the \"at most one active version\n // per graph\" invariant at the storage layer. Defense in depth\n // against buggy backend implementations or out-of-band writes.\n // Forces the deactivate-then-activate ordering used by\n // `commitSchemaVersion` and `setActiveVersion`.\n uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n .on(t.graphId)\n .where(sql`${t.isActive} = TRUE`),\n ],\n );\n\n /**\n * Per-deployment record of which declared indexes have been\n * materialized against this database. Owned and written by\n * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n * index names are physical, database-global identifiers — `graphId`\n * is provenance, not identity.\n */\n const indexMaterializations = pgTable(\n n.indexMaterializations,\n {\n indexName: text(\"index_name\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n entity: text(\"entity\").notNull(),\n kind: text(\"kind\").notNull(),\n signature: text(\"signature\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n // Cross-caller build claim: while `building_since` is fresh (within\n // the lease), exactly one materializer owns this index's CREATE\n // INDEX CONCURRENTLY. Serializes same-index CIC across processes —\n // two concurrent expression-index CICs deadlock each other (no\n // safe-snapshot exemption). NULL when no build is in flight.\n buildingSince: timestamp(\"building_since\", { withTimezone: true }),\n claimToken: text(\"claim_token\"),\n },\n (t) => [primaryKey({ columns: [t.indexName] })],\n );\n\n /**\n * Per-deployment record of extension kinds removed via\n * `store.removeKinds()` whose data has not yet been cleaned up by\n * `store.materializeRemovals()`. Same per-deployment rationale as\n * `indexMaterializations`: two replicas of the same `schema_doc` may\n * be at different stages of the data-cleanup phase. Keyed on\n * `(graph_id, kind_name, entity, schema_version)` — each remove\n * operation is its own row. `entity` separates a node and an edge\n * that share a kind name; the `schema_version` discriminator keeps a\n * re-add-then-re-remove cycle from collapsing onto the prior row,\n * where the COALESCE-on-failure rule would preserve the earlier\n * `removed_at` and silently skip the new pending cleanup.\n */\n const kindRemovals = pgTable(\n n.kindRemovals,\n {\n graphId: text(\"graph_id\").notNull(),\n kindName: text(\"kind_name\").notNull(),\n entity: text(\"entity\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n removedAt: timestamp(\"removed_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n }),\n ],\n );\n\n /**\n * Per-deployment high-water mark for `materializeRemovals`\n * reconciliation: the schema version up to which the historical\n * \"did every removal land in `kindRemovals`?\" walk has been\n * verified. Subsequent calls walk only versions newer than this\n * marker, instead of re-walking from version 1 every time.\n */\n const reconciliationMarkers = pgTable(\n n.reconciliationMarkers,\n {\n graphId: text(\"graph_id\").notNull(),\n reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n /**\n * Per-deployment durable marker that a strategy-owned table\n * contribution (#129 — fulltext today) has been materialized against\n * this database (#135). The single source of truth replacing the old\n * in-memory per-backend `fulltextEnsured` latch: \"is fulltext storage\n * materialized?\" is now a queryable database fact, written only by\n * the async boot path and read (cached) by the fulltext hot-path\n * gate.\n *\n * Keyed on `(graph_id, logical_name, owner, table_name)` — unlike\n * `indexMaterializations` (physical index name is database-global),\n * a contribution's identity is graph-scoped: two graphs can each own\n * a logically-identical fulltext table. `signature` is deliberately\n * NOT in the key: a same-identity row with a different signature is\n * detectable drift, surfaced as a loud error rather than a silent\n * re-materialize. `materialized_at` is null until the first success;\n * the COALESCE-on-failure rule preserves it across failed retries,\n * mirroring `indexMaterializations`.\n */\n const contributionMaterializations = pgTable(\n n.contributionMaterializations,\n {\n graphId: text(\"graph_id\").notNull(),\n logicalName: text(\"logical_name\").notNull(),\n owner: text(\"owner\").notNull(),\n tableName: text(\"table_name\").notNull(),\n signature: text(\"signature\").notNull(),\n materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n }),\n ],\n );\n\n /**\n * Drizzle pg-core table for the default `tsvectorStrategy` so\n * drizzle-kit can introspect the fulltext table alongside the\n * others. Mirrors `tsvectorStrategy.ownedTables(...).createDdl` —\n * the typed shape and the strategy DDL must stay in sync (drift\n * sentinel lives in `tests/typed-fulltext-table.test.ts`).\n *\n * Why `regconfig` + GENERATED: `to_tsvector(\"language\", \"content\")`\n * needs an immutable language to qualify for use inside a\n * `STORED` generated column, so Postgres can own the\n * `content → tsv` invariant.\n *\n * Alternate strategies (pg_trgm, ParadeDB, pgroonga) bring their\n * own DDL; `generatePostgresDDL` skips this typed table for them\n * and defers to the active strategy's `ownedTables(...).createDdl`.\n * Drizzle-kit consumers on non-default strategies must override\n * `tables.fulltext` in their schema barrel.\n */\n const fulltext = pgTable(\n n.fulltext,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n content: text(\"content\").notNull(),\n language: regconfig(\"language\").notNull(),\n tsv: tsvector(\"tsv\")\n .generatedAlwaysAs(sql`to_tsvector(\"language\", \"content\")`)\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.nodeKind, t.nodeId] }),\n index(`${n.fulltext}_tsv_idx`).using(\"gin\", t.tsv),\n index(`${n.fulltext}_kind_idx`).on(t.graphId, t.nodeKind),\n ],\n );\n\n return {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n revisionOrigins,\n uniques,\n schemaVersions,\n indexMaterializations,\n contributionMaterializations,\n kindRemovals,\n reconciliationMarkers,\n fulltext,\n fulltextTableName: n.fulltext,\n } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createPostgresTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n uniques,\n schemaVersions,\n fulltext,\n} = tables;\n\n/**\n * Type representing the tables object returned by createPostgresTables.\n */\nexport type PostgresTables = ReturnType<typeof createPostgresTables>;\n","/**\n * Drizzle SQLite schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Users import these tables into their Drizzle schema and use drizzle-kit\n * for migrations.\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n *\n * // Custom table names\n * import { createSqliteTables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n * const tables = createSqliteTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n index,\n integer,\n primaryKey,\n sqliteTable,\n text,\n uniqueIndex,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n buildSqliteEdgeIndexBuilders,\n buildSqliteNodeIndexBuilders,\n buildSqliteSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport { assertNoSystemIndexNameCollision } from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\n\n/**\n * Table name configuration.\n */\nexport type SqliteTableNames = Readonly<{\n nodes: string;\n edges: string;\n recordedNodes: string;\n recordedEdges: string;\n recordedClock: string;\n revisionOrigins: string;\n uniques: string;\n schemaVersions: string;\n fulltext: string;\n indexMaterializations: string;\n contributionMaterializations: string;\n kindRemovals: string;\n reconciliationMarkers: string;\n}>;\n\n/**\n * Physical name of the legacy single shared embeddings table, dropped in\n * the cross-backend vector cutover (the clean cut of #157). Strategies now\n * own per-`(nodeKind, fieldPath)` typed storage. Retained only so the\n * one-time migration utility can address and drain the old table.\n */\nexport const LEGACY_EMBEDDINGS_TABLE_NAME = \"typegraph_node_embeddings\";\n\nexport type CreateSqliteTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: SqliteTableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n recordedNodes: \"typegraph_recorded_nodes\",\n recordedEdges: \"typegraph_recorded_edges\",\n recordedClock: \"typegraph_recorded_clock\",\n revisionOrigins: \"typegraph_revision_origins\",\n uniques: \"typegraph_node_uniques\",\n schemaVersions: \"typegraph_schema_versions\",\n fulltext: \"typegraph_node_fulltext\",\n indexMaterializations: \"typegraph_index_materializations\",\n contributionMaterializations: \"typegraph_contribution_materializations\",\n kindRemovals: \"typegraph_kind_removals\",\n reconciliationMarkers: \"typegraph_reconciliation_markers\",\n};\n\n/**\n * Creates SQLite table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createSqliteTables(\n names: Partial<SqliteTableNames> = {},\n options: CreateSqliteTablesOptions = {},\n) {\n const n: SqliteTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n assertNoSystemIndexNameCollision(indexes, n);\n\n const nodes = sqliteTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: text(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n // for both dialects + the runtime materializer).\n ...buildSqliteSystemIndexBuilders(\"nodes\", n.nodes, t),\n ...buildSqliteNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = sqliteTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: text(\"props\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n ...buildSqliteSystemIndexBuilders(\"edges\", n.edges, t),\n ...buildSqliteEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const recordedNodes = sqliteTable(\n n.recordedNodes,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: text(\"props\").notNull(),\n version: integer(\"version\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n recordedFrom: integer(\"recorded_from\").notNull(),\n recordedTo: integer(\"recorded_to\").notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: text(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildSqliteSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n ],\n );\n\n const recordedEdges = sqliteTable(\n n.recordedEdges,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: text(\"props\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n recordedFrom: integer(\"recorded_from\").notNull(),\n recordedTo: integer(\"recorded_to\").notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: text(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildSqliteSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n ],\n );\n\n const recordedClock = sqliteTable(\n n.recordedClock,\n {\n graphId: text(\"graph_id\").notNull(),\n revision: integer(\"revision\").notNull(),\n recordedAt: text(\"recorded_at\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const revisionOrigins = sqliteTable(\n n.revisionOrigins,\n {\n graphId: text(\"graph_id\").notNull(),\n origin: text(\"origin\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const uniques = sqliteTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n const schemaVersions = sqliteTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: text(\"schema_doc\").notNull(),\n createdAt: text(\"created_at\").notNull(),\n isActive: integer(\"is_active\", { mode: \"boolean\" })\n .notNull()\n .default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n // Partial unique index enforcing the \"at most one active version\n // per graph\" invariant at the storage layer. Defense in depth\n // against buggy backend implementations or out-of-band writes.\n // Forces the deactivate-then-activate ordering used by\n // `commitSchemaVersion` and `setActiveVersion`.\n uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n .on(t.graphId)\n .where(sql`${t.isActive} = 1`),\n ],\n );\n\n /**\n * Per-deployment record of which declared indexes have been\n * materialized against this database. Owned and written by\n * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n * index names are physical, database-global identifiers — `graphId`\n * is provenance, not identity.\n */\n const indexMaterializations = sqliteTable(\n n.indexMaterializations,\n {\n indexName: text(\"index_name\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n entity: text(\"entity\").notNull(),\n kind: text(\"kind\").notNull(),\n signature: text(\"signature\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n materializedAt: text(\"materialized_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [primaryKey({ columns: [t.indexName] })],\n );\n\n /**\n * Per-deployment record of extension kinds removed via\n * `store.removeKinds()` whose data has not yet been cleaned up by\n * `store.materializeRemovals()`. Keyed on `(graph_id, kind_name,\n * entity, schema_version)` — each remove operation is its own row.\n * `entity` separates a node and an edge that share a kind name; the\n * `schema_version` discriminator keeps a re-add-then-re-remove cycle\n * (Foo removed at v=N, re-added, then removed again at v=N+2) from\n * collapsing onto the prior row, where the COALESCE-on-failure rule\n * would preserve the earlier `removed_at` and silently skip the new\n * pending cleanup. `removed_at` is null until the data-cleanup pass\n * succeeds; the pending set is \"rows where removed_at IS NULL\".\n */\n const kindRemovals = sqliteTable(\n n.kindRemovals,\n {\n graphId: text(\"graph_id\").notNull(),\n kindName: text(\"kind_name\").notNull(),\n entity: text(\"entity\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n removedAt: text(\"removed_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n }),\n ],\n );\n\n /**\n * Per-deployment high-water mark for the `materializeRemovals`\n * reconciliation walk. One row per `graph_id` carrying the schema\n * version up to which the historical \"did every removal land in\n * `kindRemovals`?\" walk has been verified. Lets subsequent calls\n * skip already-checked transitions instead of re-walking from\n * version 1 every time.\n */\n const reconciliationMarkers = sqliteTable(\n n.reconciliationMarkers,\n {\n graphId: text(\"graph_id\").notNull(),\n reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n /**\n * Per-deployment durable marker that a strategy-owned table\n * contribution (#129 — the FTS5 virtual table today) has been\n * materialized against this database (#135). Replaces the in-memory\n * per-backend `fulltextEnsured` latch with a queryable database fact.\n * Keyed on `(graph_id, logical_name, owner, table_name)`; `signature`\n * stays out of the key so same-identity drift is a loud error, not a\n * silent re-materialize. Same COALESCE-on-failure preservation rule\n * as `indexMaterializations`.\n */\n const contributionMaterializations = sqliteTable(\n n.contributionMaterializations,\n {\n graphId: text(\"graph_id\").notNull(),\n logicalName: text(\"logical_name\").notNull(),\n owner: text(\"owner\").notNull(),\n tableName: text(\"table_name\").notNull(),\n signature: text(\"signature\").notNull(),\n materializedAt: text(\"materialized_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n }),\n ],\n );\n\n return {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n revisionOrigins,\n uniques,\n schemaVersions,\n indexMaterializations,\n contributionMaterializations,\n kindRemovals,\n reconciliationMarkers,\n /**\n * The fulltext storage is a FTS5 virtual table which Drizzle cannot\n * represent. DDL is emitted as raw SQL and operations query it via\n * `sql.raw()`.\n */\n fulltextTableName: n.fulltext,\n } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createSqliteTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n uniques,\n schemaVersions,\n} = tables;\n\n/**\n * Type representing the tables object returned by createSqliteTables.\n */\nexport type SqliteTables = ReturnType<typeof createSqliteTables>;\n","/**\n * DDL generation utilities for TypeGraph backends.\n *\n * Provides utilities for generating DDL statements from Drizzle\n * table definitions. This ensures migrations match production schema.\n */\nimport { is } from \"drizzle-orm\";\nimport {\n getTableConfig as getPgTableConfig,\n type PgColumn,\n PgTable,\n type PgTableWithColumns,\n} from \"drizzle-orm/pg-core\";\nimport {\n getTableConfig as getSqliteTableConfig,\n type SQLiteColumn,\n SQLiteTable,\n type SQLiteTableWithColumns,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n fts5Strategy,\n type FulltextStrategy,\n tsvectorStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n BASE_CONTRIBUTION_OWNER,\n type StrategyTableContribution,\n type TableContribution,\n} from \"../table-contribution\";\nimport {\n type PostgresTables,\n tables as postgresTables,\n} from \"./schema/postgres\";\nimport { type SqliteTables, tables as sqliteTables } from \"./schema/sqlite\";\n\n// Narrow interfaces for Drizzle column internals not exposed in public types.\n// These are accessed only in DDL generation for migration scripts.\ntype TimestampColumnConfig = Readonly<{\n config?: Readonly<{ withTimezone?: boolean }>;\n}>;\ntype CustomColumnType = Readonly<{\n getSQLType?: () => string;\n}>;\n\n// ============================================================\n// SQLite DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to SQLite types.\n */\nfunction getSqliteColumnType(column: SQLiteColumn): string {\n switch (column.columnType) {\n case \"SQLiteText\": {\n return \"TEXT\";\n }\n case \"SQLiteInteger\": {\n return \"INTEGER\";\n }\n case \"SQLiteReal\": {\n return \"REAL\";\n }\n case \"SQLiteBlob\": {\n return \"BLOB\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for SQLite.\n */\nfunction formatDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle SQLite table definition.\n */\nexport function generateSqliteCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string {\n const config = getSqliteTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [\n `\"${column.name}\"`,\n getSqliteColumnType(column as SQLiteColumn),\n ];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Gets the column name from an index column, handling both Column and SQL types.\n */\nfunction renderIndexColumn(col: unknown): string {\n if (col && typeof col === \"object\" && \"name\" in col) {\n return `\"${(col as { name: string }).name}\"`;\n }\n\n const sql = tryInlineSql(col);\n if (sql !== undefined) {\n return sql;\n }\n\n return \"unknown\";\n}\n\nfunction tryInlineSql(value: unknown): string | undefined {\n if (value && typeof value === \"object\" && \"getSQL\" in value) {\n const maybe = value as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return inlineSql(maybe.getSQL());\n }\n }\n\n return inlineSql(value);\n}\n\nfunction flattenSqlChunk(chunk: unknown): string {\n if (typeof chunk === \"string\") {\n return chunk;\n }\n\n if (typeof chunk === \"object\" && chunk !== null) {\n // Drizzle column references (SQLiteText, PgText, etc.) carry the\n // column name directly. Match these BEFORE the `getSQL` fallback —\n // a column's `.getSQL()` wraps the column back inside a SQL object\n // that points to itself, which would recurse infinitely.\n if (\"name\" in chunk && typeof chunk.name === \"string\") {\n return `\"${(chunk as { name: string }).name}\"`;\n }\n\n // Drizzle's StringChunk stores its literal as `.value`, usually as a\n // one-element array ([\"\"], [\"SELECT \"]) but sometimes as a plain string.\n if (\"value\" in chunk) {\n const value = chunk.value;\n if (typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((part) => flattenSqlChunk(part)).join(\"\");\n }\n }\n\n if (\"queryChunks\" in chunk && Array.isArray(chunk.queryChunks)) {\n return (chunk as { queryChunks: readonly unknown[] }).queryChunks\n .map((part) => flattenSqlChunk(part))\n .join(\"\");\n }\n\n if (\"getSQL\" in chunk) {\n const maybe = chunk as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return flattenSqlChunk(maybe.getSQL());\n }\n }\n }\n\n throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);\n}\n\nfunction inlineSql(value: unknown): string | undefined {\n try {\n return flattenSqlChunk(value);\n } catch {\n return undefined;\n }\n}\n\nfunction inlineSqlOrThrow(value: unknown, context: string): string {\n const inlined = inlineSql(value);\n if (inlined === undefined) {\n throw new Error(`Unable to inline SQL for ${context}`);\n }\n return inlined;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle SQLite table definition.\n */\nfunction generateSqliteCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string[] {\n const config = getSqliteTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\" (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle SQLite table. The barrel\n * exposes non-table values (e.g. `fulltextTableName: string`) the DDL\n * generators must skip — and a contribution's barrel key is its\n * materialization identity, so a misclassified non-table would corrupt\n * that identity, not just emit stray DDL.\n */\nfunction isSqliteTable(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is SQLiteTableWithColumns<any> {\n return is(value, SQLiteTable);\n}\n\n/**\n * Strategy-declared contributions flagged `runtimeEnsure`. Per the\n * `runtimeEnsure` invariant only strategy contributions can be runtime\n * (base tables never are), so this is the complete runtime set without\n * walking base tables.\n */\nexport function runtimeStrategyContributions(\n fulltextStrategy: FulltextStrategy,\n fulltextTableName: string,\n): readonly StrategyTableContribution[] {\n return fulltextStrategy\n .ownedTables(fulltextTableName)\n .filter((contribution) => contribution.runtimeEnsure);\n}\n\n/**\n * The authoritative set of tables the SQLite backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n */\nexport function sqliteContributions(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): readonly TableContribution[] {\n const contributions: TableContribution[] = [];\n for (const [key, table] of Object.entries(tables)) {\n if (!isSqliteTable(table)) continue;\n // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n // the #135 materialization identity survives custom table-name\n // overrides; the resolved SQL name is only the physical tableName.\n contributions.push({\n logicalName: key,\n owner: BASE_CONTRIBUTION_OWNER,\n tableName: getSqliteTableConfig(table).name,\n createDdl: [\n generateSqliteCreateTableSQL(table),\n ...generateSqliteCreateIndexSQL(table),\n ],\n runtimeEnsure: false,\n });\n }\n // Strategy declarations are already authoritative contributions;\n // emitted last (after base tables).\n for (const declared of fulltextStrategy.ownedTables(\n tables.fulltextTableName,\n )) {\n contributions.push(declared);\n }\n return contributions;\n}\n\n/**\n * Generates all DDL statements for the given SQLite tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys.\n */\nexport function generateSqliteDDL(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): string[] {\n return sqliteContributions(tables, fulltextStrategy).flatMap(\n (contribution) => [...contribution.createDdl],\n );\n}\n\n/**\n * Generates a single SQL string for SQLite migrations.\n * Convenience function that joins all DDL statements.\n */\nexport function generateSqliteMigrationSQL(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): string {\n return generateSqliteDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n}\n\n// ============================================================\n// PostgreSQL DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to PostgreSQL types.\n */\nfunction getPgColumnType(column: PgColumn): string {\n switch (column.columnType) {\n case \"PgText\": {\n return \"TEXT\";\n }\n case \"PgInteger\": {\n return \"INTEGER\";\n }\n case \"PgBigInt53\":\n case \"PgBigInt64\": {\n return \"BIGINT\";\n }\n case \"PgBoolean\": {\n return \"BOOLEAN\";\n }\n case \"PgJsonb\": {\n return \"JSONB\";\n }\n case \"PgTimestamp\": {\n return (column as unknown as TimestampColumnConfig).config?.withTimezone ?\n \"TIMESTAMPTZ\"\n : \"TIMESTAMP\";\n }\n case \"PgReal\": {\n return \"REAL\";\n }\n case \"PgDoublePrecision\": {\n return \"DOUBLE PRECISION\";\n }\n case \"PgCustomColumn\": {\n const dataType = (column as unknown as CustomColumnType).getSQLType?.();\n return dataType ?? \"TEXT\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for PostgreSQL.\n */\nfunction formatPgDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle PostgreSQL table definition.\n */\nexport function generatePgCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string {\n const config = getPgTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [`\"${column.name}\"`, getPgColumnType(column)];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle PostgreSQL table definition.\n */\nfunction generatePgCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string[] {\n const config = getPgTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const method =\n indexConfig.method && indexConfig.method !== \"btree\" ?\n ` USING ${indexConfig.method}`\n : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\"${method} (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle Postgres table. See\n * {@link isSqliteTable} for why this uses Drizzle's brand check.\n */\nfunction isPgTable(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is PgTableWithColumns<any> {\n return is(value, PgTable);\n}\n\n/**\n * The authoritative set of tables the PostgreSQL backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n *\n * The typed `tables.fulltext` object is **not** emitted via the\n * column-walker (it can't reproduce `GENERATED ALWAYS AS … STORED`);\n * instead the strategy's canonical DDL is carried as the fulltext\n * contribution's `createDdl`. drizzle-kit visibility for the default\n * tsvector strategy comes from `schema/postgres.ts` exporting that\n * same `tables.fulltext` object through the barrel — one object, not\n * two. (Non-default Postgres strategies must export their own table\n * for drizzle-kit; see `FulltextStrategy.ownedTables`.)\n */\nexport function postgresContributions(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): readonly TableContribution[] {\n const contributions: TableContribution[] = [];\n for (const [key, table] of Object.entries(tables)) {\n if (!isPgTable(table)) continue;\n // The strategy owns the fulltext slot's DDL (the column-walker\n // can't reproduce its generated tsvector column); the strategy\n // declaration below is the authoritative fulltext contribution.\n if (table === tables.fulltext) continue;\n // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n // the #135 materialization identity survives custom table-name\n // overrides; the resolved SQL name is only the physical tableName.\n contributions.push({\n logicalName: key,\n owner: BASE_CONTRIBUTION_OWNER,\n tableName: getPgTableConfig(table).name,\n createDdl: [\n generatePgCreateTableSQL(table),\n ...generatePgCreateIndexSQL(table),\n ],\n runtimeEnsure: false,\n });\n }\n for (const declared of fulltextStrategy.ownedTables(\n tables.fulltextTableName,\n )) {\n contributions.push(declared);\n }\n return contributions;\n}\n\n/**\n * Generates all DDL statements for the given PostgreSQL tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys.\n */\nexport function generatePostgresDDL(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): string[] {\n return postgresContributions(tables, fulltextStrategy).flatMap(\n (contribution) => [...contribution.createDdl],\n );\n}\n\n/**\n * Generates a single SQL string for PostgreSQL migrations.\n * Convenience function that joins all DDL statements.\n *\n * Includes CREATE EXTENSION for pgvector since the per-`(kind, field)`\n * embedding tables `pgvectorStrategy` materializes at runtime use the\n * native VECTOR type.\n */\nexport function generatePostgresMigrationSQL(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): string {\n // pgvector extension is required for the per-field embedding tables\n const extensionSql =\n \"-- Enable pgvector extension for vector similarity search\\nCREATE EXTENSION IF NOT EXISTS vector;\";\n const ddlSql = generatePostgresDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n return `${extensionSql}\\n\\n${ddlSql}`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/node.ts","../src/core/edge.ts","../src/ontology/types.ts"],"names":["assertSchemaKeysAreFree","RESERVED_NODE_KEYS","assertJsonValue","NODE_TYPE_BRAND","z","validateSchemaKeys","RESERVED_EDGE_KEYS","EDGE_TYPE_BRAND"],"mappings":";;;;;;;AAmCA,SAAS,kBAAA,CACP,QACA,IAAA,EACM;AACN,EAAAA,yCAAA;AAAA,IACE,MAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACxBC;AAAA,GACF;AACF;AAgBO,SAAS,UAAA,CAGd,MAAS,OAAA,EAA+C;AACxD,EAAA,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACvC,EAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACrC,IAAAC,iCAAA,CAAgB,OAAA,CAAQ,WAAA,EAAa,aAAA,EAAe,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,CAACC,iCAAe,GAAG,IAAA;AAAA,IACnB,IAAA,EAAM,IAAA;AAAA,IACN,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,aAAa,OAAA,CAAQ;AAAA,GACtB,CAAA;AACH;AC7BA,IAAM,YAAA,GAAeC,KAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAOhC,SAASC,mBAAAA,CACP,QACA,IAAA,EACM;AACN,EAAAL,yCAAA;AAAA,IACE,MAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACxBM;AAAA,GACF;AACF;AAgDO,SAAS,UAAA,CAMd,MACA,OAAA,EACqD;AACrD,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,YAAA;AAClC,EAAAD,mBAAAA,CAAmB,QAAQ,IAAI,CAAA;AAC/B,EAAA,IAAI,OAAA,EAAS,gBAAgB,MAAA,EAAW;AACtC,IAAAH,iCAAA,CAAgB,OAAA,CAAQ,WAAA,EAAa,aAAA,EAAe,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,CAACK,iCAAe,GAAG,IAAA;AAAA,IACnB,IAAA,EAAM,IAAA;AAAA,IACN,MAAA;AAAA,IACA,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,MAAM,OAAA,EAAS,IAAA;AAAA,IACf,IAAI,OAAA,EAAS;AAAA,GACd,CAAA;AACH;;;AClIO,IAAM,eAAA,GAAkB;AA+ExB,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,eAAA,IAAmB,KAAA,IAClB,KAAA,CAAkC,eAAe,CAAA,KAAM,IAAA;AAE5D;AAKO,SAAS,YAAY,SAAA,EAAiD;AAC3E,EAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA,CAAU,IAAA;AACnB","file":"chunk-BNS75YNF.cjs","sourcesContent":["import { type z } from \"zod\";\n\nimport {\n assertSchemaKeysAreFree,\n RESERVED_NODE_KEYS,\n} from \"../store/reserved-keys\";\nimport { assertJsonValue } from \"./json-value\";\nimport { type KindAnnotations, NODE_TYPE_BRAND, type NodeType } from \"./types\";\n\n// ============================================================\n// Node Factory Options\n// ============================================================\n\n/**\n * Options for defining a node type.\n */\nexport type DefineNodeOptions<S extends z.ZodObject<z.ZodRawShape>> = Readonly<{\n /** Zod schema for node properties */\n schema: S;\n /** Optional description for documentation */\n description?: string;\n /**\n * Consumer-owned structured annotations for the kind.\n *\n * Stored in the canonical schema and **participates in schema hashing** —\n * any change bumps the schema version and shows up as a `safe`-severity\n * diff in `getSchemaChanges`. See `KindAnnotations` for the contract.\n */\n annotations?: KindAnnotations;\n}>;\n\n// ============================================================\n// Node Factory\n// ============================================================\n\nfunction validateSchemaKeys(\n schema: z.ZodObject<z.ZodRawShape>,\n name: string,\n): void {\n assertSchemaKeysAreFree(\n \"Node\",\n name,\n Object.keys(schema.shape),\n RESERVED_NODE_KEYS,\n );\n}\n\n/**\n * Creates a node type definition.\n *\n * @example\n * ```typescript\n * const Person = defineNode(\"Person\", {\n * schema: z.object({\n * fullName: z.string().min(1),\n * email: z.string().email().optional(),\n * }),\n * description: \"A person in the system\",\n * });\n * ```\n */\nexport function defineNode<\n K extends string,\n S extends z.ZodObject<z.ZodRawShape>,\n>(name: K, options: DefineNodeOptions<S>): NodeType<K, S> {\n validateSchemaKeys(options.schema, name);\n if (options.annotations !== undefined) {\n assertJsonValue(options.annotations, \"annotations\", `Node \"${name}\"`);\n }\n\n return Object.freeze({\n [NODE_TYPE_BRAND]: true as const,\n kind: name,\n schema: options.schema,\n description: options.description,\n annotations: options.annotations,\n });\n}\n","import { z } from \"zod\";\n\nimport {\n assertSchemaKeysAreFree,\n RESERVED_EDGE_KEYS,\n} from \"../store/reserved-keys\";\nimport { assertJsonValue } from \"./json-value\";\nimport {\n EDGE_TYPE_BRAND,\n type EdgeType,\n type KindAnnotations,\n type NodeType,\n} from \"./types\";\n\n// ============================================================\n// Edge Factory Options\n// ============================================================\n\n/**\n * Options for defining an edge type.\n */\nexport type DefineEdgeOptions<\n S extends z.ZodObject<z.ZodRawShape>,\n From extends readonly NodeType[] | undefined = undefined,\n To extends readonly NodeType[] | undefined = undefined,\n> = Readonly<{\n /** Zod schema for edge properties (defaults to empty object) */\n schema?: S;\n /** Optional description for documentation */\n description?: string;\n /**\n * Consumer-owned structured annotations for the kind.\n *\n * Stored in the canonical schema and **participates in schema hashing** —\n * any change bumps the schema version and shows up as a `safe`-severity\n * diff in `getSchemaChanges`. See `KindAnnotations` for the contract.\n */\n annotations?: KindAnnotations;\n /** Node types that can be the source of this edge (domain constraint) */\n from?: From;\n /** Node types that can be the target of this edge (range constraint) */\n to?: To;\n}>;\n\n// ============================================================\n// Empty Schema\n// ============================================================\n\nconst EMPTY_SCHEMA = z.object({});\ntype EmptySchema = typeof EMPTY_SCHEMA;\n\n// ============================================================\n// Edge Factory\n// ============================================================\n\nfunction validateSchemaKeys(\n schema: z.ZodObject<z.ZodRawShape>,\n name: string,\n): void {\n assertSchemaKeysAreFree(\n \"Edge\",\n name,\n Object.keys(schema.shape),\n RESERVED_EDGE_KEYS,\n );\n}\n\n/**\n * Creates an edge type definition.\n *\n * @example\n * ```typescript\n * // Edge with no properties\n * const hasEpisode = defineEdge(\"hasEpisode\");\n *\n * // Edge with properties\n * const employedAt = defineEdge(\"employedAt\", {\n * schema: z.object({\n * isPrimary: z.boolean().default(true),\n * startedAt: z.date(),\n * }),\n * description: \"Employment relationship\",\n * });\n *\n * // Edge with domain/range constraints (can be used directly in defineGraph)\n * const worksAt = defineEdge(\"worksAt\", {\n * schema: z.object({ role: z.string() }),\n * from: [Person],\n * to: [Company],\n * });\n * ```\n */\n// Overload: no options - returns edge without domain/range\nexport function defineEdge<K extends string>(name: K): EdgeType<K, EmptySchema>;\n\n// Overload: options with both from and to - returns edge with domain/range\nexport function defineEdge<\n K extends string,\n S extends z.ZodObject<z.ZodRawShape>,\n From extends readonly NodeType[],\n To extends readonly NodeType[],\n>(\n name: K,\n options: DefineEdgeOptions<S, From, To> & { from: From; to: To },\n): EdgeType<K, S, From, To>;\n\n// Overload: options without from/to - returns edge without domain/range\nexport function defineEdge<\n K extends string,\n S extends z.ZodObject<z.ZodRawShape>,\n>(name: K, options: DefineEdgeOptions<S>): EdgeType<K, S>;\n\n// Implementation\nexport function defineEdge<\n K extends string,\n S extends z.ZodObject<z.ZodRawShape>,\n From extends readonly NodeType[] | undefined,\n To extends readonly NodeType[] | undefined,\n>(\n name: K,\n options?: DefineEdgeOptions<S, From, To>,\n): EdgeType<K, S, From, To> | EdgeType<K, EmptySchema> {\n const schema = options?.schema ?? EMPTY_SCHEMA;\n validateSchemaKeys(schema, name);\n if (options?.annotations !== undefined) {\n assertJsonValue(options.annotations, \"annotations\", `Edge \"${name}\"`);\n }\n\n return Object.freeze({\n [EDGE_TYPE_BRAND]: true as const,\n kind: name,\n schema,\n description: options?.description,\n annotations: options?.annotations,\n from: options?.from,\n to: options?.to,\n }) as EdgeType<K, S, From, To> | EdgeType<K, EmptySchema>;\n}\n","import { type EdgeType, type NodeType } from \"../core/types\";\n\n// ============================================================\n// Brand Key\n// ============================================================\n\n/** Brand key for MetaEdge */\nexport const META_EDGE_BRAND = \"__metaEdge\" as const;\n\n// ============================================================\n// Inference Types\n// ============================================================\n\n/**\n * How a meta-edge affects queries and validation.\n */\nexport type InferenceType =\n | \"subsumption\" // Query for X includes instances of subclasses\n | \"hierarchy\" // Enables broader/narrower traversal\n | \"substitution\" // Can substitute equivalent types\n | \"constraint\" // Validation rules\n | \"composition\" // Part-whole navigation\n | \"association\" // Discovery/recommendation\n | \"none\"; // No automatic inference\n\n// ============================================================\n// Meta-Edge Properties\n// ============================================================\n\n/**\n * Properties of a meta-edge.\n */\nexport type MetaEdgeProperties = Readonly<{\n transitive: boolean; // A→B, B→C implies A→C\n symmetric: boolean; // A→B implies B→A\n reflexive: boolean; // A→A is always true\n inverse: string | undefined; // Name of inverse meta-edge\n inference: InferenceType; // How this affects queries\n description: string | undefined;\n}>;\n\n// ============================================================\n// Meta-Edge Type\n// ============================================================\n\n/**\n * A meta-edge definition.\n *\n * Meta-edges represent type-level relationships (between kinds),\n * not instance-level relationships (between nodes).\n */\nexport type MetaEdge<K extends string = string> = Readonly<{\n [META_EDGE_BRAND]: true;\n name: K;\n properties: MetaEdgeProperties;\n}>;\n\n// ============================================================\n// Ontology Relation\n// ============================================================\n\n/**\n * A relation in the ontology (instance of meta-edge between types).\n *\n * @example\n * ```typescript\n * // Podcast subClassOf Media\n * subClassOf(Podcast, Media)\n *\n * // Person equivalentTo schema:Person\n * equivalentTo(Person, \"https://schema.org/Person\")\n * ```\n */\nexport type OntologyRelation = Readonly<{\n metaEdge: MetaEdge;\n from: NodeType | EdgeType | string; // string for external IRIs\n to: NodeType | EdgeType | string;\n}>;\n\n// ============================================================\n// Type Guards\n// ============================================================\n\n/**\n * Checks if a value is a MetaEdge.\n */\nexport function isMetaEdge(value: unknown): value is MetaEdge {\n return (\n typeof value === \"object\" &&\n value !== null &&\n META_EDGE_BRAND in value &&\n (value as Record<string, unknown>)[META_EDGE_BRAND] === true\n );\n}\n\n/**\n * Gets the type name from a NodeType, EdgeType, or IRI string.\n */\nexport function getTypeName(typeOrIri: NodeType | EdgeType | string): string {\n if (typeof typeOrIri === \"string\") {\n return typeOrIri;\n }\n return typeOrIri.kind;\n}\n"]}