@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,63 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkZDH3DX3C_cjs = require('./chunk-ZDH3DX3C.cjs');
4
- var chunkCPEL3YIR_cjs = require('./chunk-CPEL3YIR.cjs');
5
- var chunkEKFUG4G7_cjs = require('./chunk-EKFUG4G7.cjs');
6
- var chunkEQ7JKLZO_cjs = require('./chunk-EQ7JKLZO.cjs');
7
- var chunkJQXSZHF2_cjs = require('./chunk-JQXSZHF2.cjs');
8
- var chunkZTAJL4DT_cjs = require('./chunk-ZTAJL4DT.cjs');
9
- var chunkU5W4LKZV_cjs = require('./chunk-U5W4LKZV.cjs');
10
- var chunkSJDMVITW_cjs = require('./chunk-SJDMVITW.cjs');
11
- var chunk764JHTLT_cjs = require('./chunk-764JHTLT.cjs');
12
- var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
13
- var chunkC4F7VJ5D_cjs = require('./chunk-C4F7VJ5D.cjs');
14
- var chunkTDXIBCGY_cjs = require('./chunk-TDXIBCGY.cjs');
3
+ var chunkBSFJMMV3_cjs = require('./chunk-BSFJMMV3.cjs');
4
+ var chunkNFCVHQ5P_cjs = require('./chunk-NFCVHQ5P.cjs');
5
+ var chunkXBYVV3MP_cjs = require('./chunk-XBYVV3MP.cjs');
6
+ var chunkQ7Q4WSLJ_cjs = require('./chunk-Q7Q4WSLJ.cjs');
7
+ var chunkVCRRKBLN_cjs = require('./chunk-VCRRKBLN.cjs');
8
+ var chunkRT5ZY4XA_cjs = require('./chunk-RT5ZY4XA.cjs');
9
+ var chunkNI72YOJB_cjs = require('./chunk-NI72YOJB.cjs');
10
+ var chunkA7J2YDDI_cjs = require('./chunk-A7J2YDDI.cjs');
11
+ var chunkN66HCGCY_cjs = require('./chunk-N66HCGCY.cjs');
15
12
  var nanoid = require('nanoid');
16
13
 
17
- // src/store/types.ts
18
- var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
19
- var TRANSACTION_RUNTIME = chunkU5W4LKZV_cjs.typeGraphGlobalSymbol(
20
- "transaction-runtime-v1"
21
- );
22
-
23
- // src/store/runtime-port.ts
24
- var STORE_RUNTIME = chunkU5W4LKZV_cjs.typeGraphGlobalSymbol("store-runtime-v1");
25
- function storeRuntime(store) {
26
- const runtime = store[STORE_RUNTIME];
27
- if (runtime === void 0) {
28
- throw new TypeError(
29
- "Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
30
- );
31
- }
32
- return runtime;
33
- }
34
- function storeBackend(store) {
35
- return storeRuntime(store).backend;
36
- }
37
- function transactionBackend(transaction) {
38
- const runtime = transaction[TRANSACTION_RUNTIME];
39
- if (runtime === void 0) {
40
- throw new TypeError(
41
- "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
42
- );
43
- }
44
- return runtime.backend;
45
- }
46
- function transactionNodeOperationHookRunner(transaction) {
47
- const runtime = transaction[TRANSACTION_RUNTIME];
48
- if (runtime === void 0) {
49
- throw new TypeError(
50
- "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
51
- );
52
- }
53
- return runtime.runNodeOperationHooks;
54
- }
55
-
56
14
  // src/query/compiler/temporal.ts
57
15
  var pinnedReadInstant;
58
16
  function withPinnedReadInstant(emit) {
59
17
  if (pinnedReadInstant !== void 0) return emit();
60
- pinnedReadInstant = chunkZTAJL4DT_cjs.nowIso();
18
+ pinnedReadInstant = chunkQ7Q4WSLJ_cjs.nowIso();
61
19
  try {
62
20
  return emit();
63
21
  } finally {
@@ -65,26 +23,27 @@ function withPinnedReadInstant(emit) {
65
23
  }
66
24
  }
67
25
  function currentReadInstant() {
68
- return chunkU5W4LKZV_cjs.sql`${pinnedReadInstant ?? chunkZTAJL4DT_cjs.nowIso()}`;
26
+ return chunkVCRRKBLN_cjs.sql`${pinnedReadInstant ?? chunkQ7Q4WSLJ_cjs.nowIso()}`;
69
27
  }
70
28
  var CURRENT_READ_INSTANT_PLACEHOLDER = "__typegraph_current_read_instant__";
71
29
  function currentReadInstantPlaceholder() {
72
- return chunkU5W4LKZV_cjs.sql`${chunkU5W4LKZV_cjs.sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
30
+ return chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
73
31
  }
74
32
  function currentReadInstantFor(mode) {
75
33
  return mode === "placeholder" ? currentReadInstantPlaceholder() : currentReadInstant();
76
34
  }
77
35
  function compileTemporalFilter(options) {
78
36
  const { mode, asOf, tableAlias, currentTimestamp, recordedAsOf } = options;
79
- const prefix = tableAlias ? chunkU5W4LKZV_cjs.sql.raw(`${tableAlias}.`) : chunkU5W4LKZV_cjs.sql.raw("");
80
- const deletedAt = chunkU5W4LKZV_cjs.sql`${prefix}deleted_at`;
81
- const validFrom = chunkU5W4LKZV_cjs.sql`${prefix}valid_from`;
82
- const validTo = chunkU5W4LKZV_cjs.sql`${prefix}valid_to`;
37
+ const recorded = chunkQ7Q4WSLJ_cjs.optionalRecordedInstantParts(recordedAsOf, "recordedAsOf");
38
+ const prefix = tableAlias ? chunkVCRRKBLN_cjs.sql.raw(`${tableAlias}.`) : chunkVCRRKBLN_cjs.sql.raw("");
39
+ const deletedAt = chunkVCRRKBLN_cjs.sql`${prefix}deleted_at`;
40
+ const validFrom = chunkVCRRKBLN_cjs.sql`${prefix}valid_from`;
41
+ const validTo = chunkVCRRKBLN_cjs.sql`${prefix}valid_to`;
83
42
  const validFilter = (() => {
84
43
  switch (mode) {
85
44
  case "current": {
86
- const now = recordedAsOf === void 0 ? currentTimestamp ?? currentReadInstant() : chunkU5W4LKZV_cjs.sql`${chunkEQ7JKLZO_cjs.parseRecordedInstant(recordedAsOf, "recordedAsOf").recordedAt}`;
87
- return chunkU5W4LKZV_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
45
+ const now = recorded === void 0 ? currentTimestamp ?? currentReadInstant() : chunkVCRRKBLN_cjs.sql`${recorded.recordedAt}`;
46
+ return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
88
47
  }
89
48
  case "asOf": {
90
49
  if (asOf === void 0) {
@@ -93,24 +52,21 @@ function compileTemporalFilter(options) {
93
52
  );
94
53
  }
95
54
  const timestamp = asOf;
96
- return chunkU5W4LKZV_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
55
+ return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
97
56
  }
98
57
  case "includeEnded": {
99
- return chunkU5W4LKZV_cjs.sql`${deletedAt} IS NULL`;
58
+ return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
100
59
  }
101
60
  case "includeTombstones": {
102
- return chunkU5W4LKZV_cjs.sql.raw("1=1");
61
+ return chunkVCRRKBLN_cjs.sql.raw("1=1");
103
62
  }
104
63
  }
105
64
  })();
106
- if (recordedAsOf === void 0) return validFilter;
107
- const recordedFrom = chunkU5W4LKZV_cjs.sql`${prefix}recorded_from`;
108
- const recordedTo = chunkU5W4LKZV_cjs.sql`${prefix}recorded_to`;
109
- const recordedRevision = chunkEQ7JKLZO_cjs.parseRecordedInstant(
110
- recordedAsOf,
111
- "recordedAsOf"
112
- ).revision;
113
- return chunkU5W4LKZV_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${recordedRevision} AND ${recordedRevision} < ${recordedTo}`;
65
+ if (recorded === void 0) return validFilter;
66
+ const recordedFrom = chunkVCRRKBLN_cjs.sql`${prefix}recorded_from`;
67
+ const recordedTo = chunkVCRRKBLN_cjs.sql`${prefix}recorded_to`;
68
+ const { revision } = recorded;
69
+ return chunkVCRRKBLN_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${revision} AND ${revision} < ${recordedTo}`;
114
70
  }
115
71
  function extractTemporalOptions(ast, tableAlias) {
116
72
  return {
@@ -198,7 +154,7 @@ function predicate(expr) {
198
154
  }
199
155
  function param(name) {
200
156
  if (name === CURRENT_READ_INSTANT_PLACEHOLDER) {
201
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
157
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
202
158
  `Parameter name "${name}" is reserved for internal use`,
203
159
  { parameterName: name }
204
160
  );
@@ -282,7 +238,7 @@ function inComparison(op, field, values) {
282
238
  }
283
239
  const literals = values.map((value) => {
284
240
  if (isParameterRef(value)) {
285
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
241
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
286
242
  `param("${value.name}") is not supported as an element of the ${op}() list`,
287
243
  { parameterName: value.name },
288
244
  {
@@ -364,7 +320,7 @@ function createFulltextAccessor(alias, hasSearchableField) {
364
320
  return {
365
321
  matches: (query, k, options) => {
366
322
  if (!hasSearchableField()) {
367
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
323
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
368
324
  `Cannot call .$fulltext.matches() on alias "${alias}" \u2014 its node kind has no fields declared with searchable(). Add at least one: \`title: searchable({ language: "english" })\`.`
369
325
  );
370
326
  }
@@ -379,7 +335,7 @@ function createFulltextAccessor(alias, hasSearchableField) {
379
335
  }
380
336
  function fulltextMatch(field, query, limit, options) {
381
337
  if (!Number.isFinite(limit) || limit <= 0) {
382
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
338
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
383
339
  `matches() limit must be a positive finite number, got ${String(limit)}`
384
340
  );
385
341
  }
@@ -499,7 +455,7 @@ function buildFieldBuilderForTypeInfo(field, typeInfo) {
499
455
  }
500
456
  }
501
457
  function resolvePointerTypeInfo(typeInfo, pointer) {
502
- return chunkSJDMVITW_cjs.resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
458
+ return chunkRT5ZY4XA_cjs.resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
503
459
  }
504
460
  function objectOp(op, field, pointer, value, options) {
505
461
  const expr = {
@@ -522,8 +478,8 @@ function objectField(field, options) {
522
478
  return {
523
479
  ...baseFieldBuilder(field),
524
480
  get: (key) => {
525
- const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
526
- const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, pointer);
481
+ const pointer = chunkA7J2YDDI_cjs.jsonPointer([key]);
482
+ const nestedPointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, pointer);
527
483
  const resolved = resolvePointerTypeInfo(options?.typeInfo, pointer);
528
484
  const nestedRef = fieldRef(field.alias, field.path, {
529
485
  jsonPointer: nestedPointer,
@@ -537,17 +493,17 @@ function objectField(field, options) {
537
493
  return buildFieldBuilderForTypeInfo(nestedRef, resolved);
538
494
  },
539
495
  hasKey: (key) => {
540
- const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
496
+ const pointer = chunkA7J2YDDI_cjs.jsonPointer([key]);
541
497
  resolvePointerTypeInfo(options?.typeInfo, pointer);
542
498
  return objectOp("hasKey", field, pointer);
543
499
  },
544
500
  hasPath: (pointer) => {
545
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
501
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
546
502
  resolvePointerTypeInfo(options?.typeInfo, normalized);
547
503
  return objectOp("hasPath", field, normalized);
548
504
  },
549
505
  pathEquals: (pointer, value) => {
550
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
506
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
551
507
  const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
552
508
  if (resolved && (resolved.valueType === "array" || resolved.valueType === "object")) {
553
509
  throw new Error("pathEquals is only supported for scalar JSON values");
@@ -556,7 +512,7 @@ function objectField(field, options) {
556
512
  return objectOp("pathEquals", field, normalized, value, predicateOptions);
557
513
  },
558
514
  pathContains: (pointer, value) => {
559
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
515
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
560
516
  const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
561
517
  if (resolved && resolved.valueType !== "array") {
562
518
  throw new Error("pathContains is only supported for JSON array values");
@@ -571,7 +527,7 @@ function objectField(field, options) {
571
527
  );
572
528
  },
573
529
  pathIsNull: (pointer) => {
574
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
530
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
575
531
  const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
576
532
  const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
577
533
  return objectOp(
@@ -583,7 +539,7 @@ function objectField(field, options) {
583
539
  );
584
540
  },
585
541
  pathIsNotNull: (pointer) => {
586
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
542
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
587
543
  const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
588
544
  const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
589
545
  return objectOp(
@@ -595,8 +551,8 @@ function objectField(field, options) {
595
551
  );
596
552
  },
597
553
  field: (pointer) => {
598
- const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
599
- const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, normalized);
554
+ const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
555
+ const nestedPointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, normalized);
600
556
  const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
601
557
  const nestedRef = fieldRef(field.alias, field.path, {
602
558
  jsonPointer: nestedPointer,
@@ -652,7 +608,7 @@ function notInSubquery(field, subquery) {
652
608
  function assertSingleColumnSubquery(subquery) {
653
609
  const columnCount = getSubqueryColumnCount(subquery);
654
610
  if (columnCount === 1) return;
655
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
611
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
656
612
  `IN/NOT IN subquery must project exactly 1 column, but got ${columnCount}`,
657
613
  { subqueryColumnCount: columnCount },
658
614
  {
@@ -665,7 +621,7 @@ function assertCompatibleSubqueryValueTypes(field, subquery) {
665
621
  const subqueryValueType = getSingleSubqueryColumnValueType(subquery);
666
622
  const resolvedValueType = fieldValueType ?? subqueryValueType;
667
623
  if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
668
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
624
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
669
625
  `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
670
626
  { valueType: resolvedValueType },
671
627
  {
@@ -676,7 +632,7 @@ function assertCompatibleSubqueryValueTypes(field, subquery) {
676
632
  if (isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
677
633
  return;
678
634
  }
679
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
635
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
680
636
  `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
681
637
  {
682
638
  fieldValueType,
@@ -695,7 +651,7 @@ var RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK = {
695
651
  };
696
652
  function requireRecordedSchema(target) {
697
653
  if (target.tableNames === void 0) {
698
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
654
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
699
655
  "Recorded-time capture requires the backend to expose tableNames.",
700
656
  { dialect: target.dialect },
701
657
  {
@@ -703,11 +659,11 @@ function requireRecordedSchema(target) {
703
659
  }
704
660
  );
705
661
  }
706
- return chunkCPEL3YIR_cjs.createSqlSchema(target.tableNames);
662
+ return chunkNFCVHQ5P_cjs.createSqlSchema(target.tableNames);
707
663
  }
708
664
  function requireCaptureStatements(target) {
709
665
  if (target.executeStatement === void 0) {
710
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
666
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
711
667
  "Recorded-time capture requires backend.executeStatement support on the transaction backend.",
712
668
  { dialect: target.dialect },
713
669
  {
@@ -718,10 +674,10 @@ function requireCaptureStatements(target) {
718
674
  }
719
675
  async function executeStatement(target, query) {
720
676
  requireCaptureStatements(target);
721
- await target.executeStatement(chunkU5W4LKZV_cjs.asCompiledStatementSql(query));
677
+ await target.executeStatement(chunkVCRRKBLN_cjs.asCompiledStatementSql(query));
722
678
  }
723
679
  function unsupportedPostgresIsolationError(isolationLevel) {
724
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
680
+ return new chunkNI72YOJB_cjs.ConfigurationError(
725
681
  "Recorded-time capture on PostgreSQL requires read_committed isolation.",
726
682
  { isolationLevel: isolationLevel ?? "unknown" },
727
683
  {
@@ -747,7 +703,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
747
703
  if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[target.dialect]) return;
748
704
  if (options?.accessMode === "read_only") return;
749
705
  const rows = await target.execute(
750
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
706
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
751
707
  SELECT current_setting('transaction_isolation') AS transaction_isolation
752
708
  `)
753
709
  );
@@ -758,7 +714,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
758
714
  throw unsupportedPostgresIsolationError(isolationLevel);
759
715
  }
760
716
  function recordedCaptureRequiresCallbackTransactionError(details = {}) {
761
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
717
+ return new chunkNI72YOJB_cjs.ConfigurationError(
762
718
  "withTransaction() has no recorded-time capture flush point when history is enabled.",
763
719
  {
764
720
  ...details,
@@ -770,7 +726,7 @@ function recordedCaptureRequiresCallbackTransactionError(details = {}) {
770
726
  );
771
727
  }
772
728
  function historyUnsafeRawWriteError(surface) {
773
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
729
+ return new chunkNI72YOJB_cjs.ConfigurationError(
774
730
  `${surface} is not available when history capture is enabled because raw SQL writes bypass recorded-time capture.`,
775
731
  {
776
732
  code: "RECORDED_CAPTURE_RAW_SQL_DISABLED"
@@ -781,7 +737,7 @@ function historyUnsafeRawWriteError(surface) {
781
737
  );
782
738
  }
783
739
  function revisionTrackingUnsafeRawWriteError(surface) {
784
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
740
+ return new chunkNI72YOJB_cjs.ConfigurationError(
785
741
  `${surface} is not available when revision tracking is enabled because raw SQL writes bypass the revision anchor.`,
786
742
  {
787
743
  code: "REVISION_TRACKING_RAW_SQL_DISABLED"
@@ -817,7 +773,7 @@ function rawWriteGuards(target, prefix) {
817
773
  }
818
774
  function assertCapturableBackend(backend) {
819
775
  if (!backend.capabilities.transactions) {
820
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
776
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
821
777
  "history: true requires a backend with transaction support.",
822
778
  { dialect: backend.dialect },
823
779
  {
@@ -826,7 +782,7 @@ function assertCapturableBackend(backend) {
826
782
  );
827
783
  }
828
784
  if (backend.executeStatement === void 0) {
829
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
785
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
830
786
  "history: true requires a backend that supports executeStatement.",
831
787
  { dialect: backend.dialect },
832
788
  {
@@ -835,7 +791,7 @@ function assertCapturableBackend(backend) {
835
791
  );
836
792
  }
837
793
  if (backend.capabilities.returning === false) {
838
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
794
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
839
795
  "history: true requires a backend that supports UPDATE \u2026 RETURNING.",
840
796
  { dialect: backend.dialect },
841
797
  {
@@ -844,7 +800,7 @@ function assertCapturableBackend(backend) {
844
800
  );
845
801
  }
846
802
  if (backend.tableNames === void 0) {
847
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
803
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
848
804
  "history: true requires a backend that exposes tableNames.",
849
805
  { dialect: backend.dialect },
850
806
  {
@@ -855,7 +811,7 @@ function assertCapturableBackend(backend) {
855
811
  }
856
812
  function assertRevisionTrackableBackend(backend) {
857
813
  if (!backend.capabilities.transactions) {
858
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
814
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
859
815
  "revisionTracking: true requires a backend with transaction support.",
860
816
  { dialect: backend.dialect },
861
817
  {
@@ -864,7 +820,7 @@ function assertRevisionTrackableBackend(backend) {
864
820
  );
865
821
  }
866
822
  if (backend.executeStatement === void 0) {
867
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
823
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
868
824
  "revisionTracking: true requires a backend that supports executeStatement.",
869
825
  { dialect: backend.dialect },
870
826
  {
@@ -873,7 +829,7 @@ function assertRevisionTrackableBackend(backend) {
873
829
  );
874
830
  }
875
831
  if (backend.tableNames === void 0) {
876
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
832
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
877
833
  "revisionTracking: true requires a backend that exposes tableNames.",
878
834
  { dialect: backend.dialect },
879
835
  {
@@ -882,7 +838,7 @@ function assertRevisionTrackableBackend(backend) {
882
838
  );
883
839
  }
884
840
  if (backend.ensureRevisionOriginsTable === void 0) {
885
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
841
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
886
842
  "revisionTracking: true requires a backend that can bootstrap revision origins.",
887
843
  { dialect: backend.dialect },
888
844
  {
@@ -902,7 +858,7 @@ var USES_RECORDED_GRAPH_ADVISORY_LOCK = {
902
858
  sqlite: false
903
859
  };
904
860
  function graphAdvisoryLockSql(namespace, graphId) {
905
- return chunkU5W4LKZV_cjs.sql`
861
+ return chunkVCRRKBLN_cjs.sql`
906
862
  SELECT pg_advisory_xact_lock(
907
863
  hashtext(${namespace}),
908
864
  hashtext(${graphId})
@@ -934,7 +890,7 @@ function registerRecordedGraphLockMemo(backend, memo) {
934
890
  }
935
891
  async function acquireRecordedGraphWriteLock(target, graphId) {
936
892
  await target.execute(
937
- chunkU5W4LKZV_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
893
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
938
894
  );
939
895
  }
940
896
  async function lockRecordedGraphWrite(target, graphId, memo) {
@@ -960,7 +916,7 @@ async function lockRecordedGraphWrite(target, graphId, memo) {
960
916
  return graphWriteLockEvidence();
961
917
  }
962
918
  function failInvalidClock(value, cause) {
963
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
919
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
964
920
  "Recorded clock row contained an invalid revision or wall time",
965
921
  { value },
966
922
  {
@@ -971,13 +927,13 @@ function failInvalidClock(value, cause) {
971
927
  }
972
928
  function recordedClockRevision(value) {
973
929
  const revision = typeof value === "bigint" ? Number(value) : typeof value === "string" && /^\d+$/.test(value) ? Number(value) : value;
974
- if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < RECORDED_MIN_REVISION || revision >= chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION) {
930
+ if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < RECORDED_MIN_REVISION || revision >= chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION) {
975
931
  return failInvalidClock(value);
976
932
  }
977
933
  return revision;
978
934
  }
979
935
  function recordedClockWallTime(value) {
980
- return chunkZTAJL4DT_cjs.canonicalizeDatabaseTimestamp(value) ?? failInvalidClock(value);
936
+ return chunkQ7Q4WSLJ_cjs.canonicalizeDatabaseTimestamp(value) ?? failInvalidClock(value);
981
937
  }
982
938
  function recordedClockParts(row) {
983
939
  const revision = recordedClockRevision(row.revision);
@@ -985,7 +941,7 @@ function recordedClockParts(row) {
985
941
  return { revision, recordedAt: recordedClockWallTime(row.recorded_at) };
986
942
  }
987
943
  function nextRecordedCommitParts(previous) {
988
- const wallTime = chunkZTAJL4DT_cjs.nowIso();
944
+ const wallTime = chunkQ7Q4WSLJ_cjs.nowIso();
989
945
  if (previous === void 0) {
990
946
  return { revision: 1, recordedAt: wallTime };
991
947
  }
@@ -1003,11 +959,11 @@ function nonDecreasingWallTime(current, previous) {
1003
959
  }
1004
960
  async function readRecordedClock(target, schema, graphId) {
1005
961
  const parts = await readRecordedClockParts(target, schema, graphId);
1006
- return parts === void 0 ? void 0 : chunkEQ7JKLZO_cjs.createRecordedInstant(parts.revision, parts.recordedAt);
962
+ return parts === void 0 ? void 0 : chunkQ7Q4WSLJ_cjs.createRecordedInstant(parts.revision, parts.recordedAt);
1007
963
  }
1008
964
  async function readRecordedClockParts(target, schema, graphId) {
1009
965
  const rows = await target.execute(
1010
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
966
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
1011
967
  SELECT revision, recorded_at
1012
968
  FROM ${schema.recordedClockTable}
1013
969
  WHERE graph_id = ${graphId}
@@ -1018,7 +974,7 @@ async function readRecordedClockParts(target, schema, graphId) {
1018
974
  }
1019
975
  async function readRevisionOrigin(target, schema, graphId) {
1020
976
  const rows = await target.execute(
1021
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
977
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
1022
978
  SELECT origin
1023
979
  FROM ${schema.revisionOriginsTable}
1024
980
  WHERE graph_id = ${graphId}
@@ -1027,7 +983,7 @@ async function readRevisionOrigin(target, schema, graphId) {
1027
983
  const first = rows[0];
1028
984
  if (first === void 0) return void 0;
1029
985
  if (typeof first.origin !== "string" || first.origin.length === 0) {
1030
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
986
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
1031
987
  "Revision origin row contained an invalid origin",
1032
988
  { graphId, origin: first.origin }
1033
989
  );
@@ -1037,7 +993,7 @@ async function readRevisionOrigin(target, schema, graphId) {
1037
993
  async function ensureRevisionOrigin(target, schema, graphId) {
1038
994
  const ensureTable = target.ensureRevisionOriginsTable;
1039
995
  if (ensureTable === void 0) {
1040
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
996
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
1041
997
  "Revision tracking requires a backend that can bootstrap revision origins.",
1042
998
  { dialect: target.dialect },
1043
999
  {
@@ -1050,7 +1006,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
1050
1006
  if (existing !== void 0) return existing;
1051
1007
  await executeStatement(
1052
1008
  target,
1053
- chunkU5W4LKZV_cjs.sql`
1009
+ chunkVCRRKBLN_cjs.sql`
1054
1010
  INSERT INTO ${schema.revisionOriginsTable} (graph_id, origin)
1055
1011
  VALUES (${graphId}, ${generateId()})
1056
1012
  ON CONFLICT (graph_id) DO NOTHING
@@ -1058,7 +1014,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
1058
1014
  );
1059
1015
  const origin = await readRevisionOrigin(target, schema, graphId);
1060
1016
  if (origin !== void 0) return origin;
1061
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
1017
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
1062
1018
  "Revision origin was not persisted after initialization.",
1063
1019
  { graphId, dialect: target.dialect }
1064
1020
  );
@@ -1066,19 +1022,31 @@ async function ensureRevisionOrigin(target, schema, graphId) {
1066
1022
  async function writeRecordedClock(target, schema, graphId, parts) {
1067
1023
  await executeStatement(
1068
1024
  target,
1069
- chunkU5W4LKZV_cjs.sql`
1025
+ chunkVCRRKBLN_cjs.sql`
1070
1026
  INSERT INTO ${schema.recordedClockTable} (graph_id, revision, recorded_at)
1071
1027
  VALUES (${graphId}, ${parts.revision}, ${parts.recordedAt})
1072
1028
  ON CONFLICT (graph_id) DO UPDATE
1073
- SET revision = ${parts.revision}, recorded_at = ${parts.recordedAt}
1029
+ SET revision = excluded.revision, recorded_at = excluded.recorded_at
1030
+ WHERE ${schema.recordedClockTable}.revision < excluded.revision
1074
1031
  `
1075
1032
  );
1076
1033
  }
1034
+ async function assertRecordedClockAdvanced(target, schema, graphId, revision) {
1035
+ const stored = await readRecordedClockParts(target, schema, graphId);
1036
+ if (stored?.revision === revision) return;
1037
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
1038
+ "Recorded commit allocation was refused: the supplied previous revision was stale, so the write would have moved the graph's revision clock backward.",
1039
+ { graphId, allocatedRevision: revision, storedRevision: stored?.revision },
1040
+ {
1041
+ suggestion: "Read the previous revision inside the same transaction that allocates the commit (omit previousRevision), or hold the per-graph write lock across the read and the allocation."
1042
+ }
1043
+ );
1044
+ }
1077
1045
  async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
1078
1046
  switch (target.dialect) {
1079
1047
  case "postgres": {
1080
1048
  await target.execute(
1081
- chunkU5W4LKZV_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
1049
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
1082
1050
  );
1083
1051
  return;
1084
1052
  }
@@ -1086,7 +1054,7 @@ async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
1086
1054
  if (ownsWriteLock) return;
1087
1055
  await executeStatement(
1088
1056
  target,
1089
- chunkU5W4LKZV_cjs.sql`
1057
+ chunkVCRRKBLN_cjs.sql`
1090
1058
  INSERT INTO ${schema.recordedClockTable} (graph_id, revision, recorded_at)
1091
1059
  VALUES (${graphId}, ${RECORDED_MIN_REVISION}, ${RECORDED_MIN_TIME})
1092
1060
  ON CONFLICT (graph_id) DO UPDATE SET revision = revision
@@ -1101,19 +1069,22 @@ async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
1101
1069
  }
1102
1070
  async function allocateRecordedCommit(target, schema, graphId, ownsWriteLock, previousRevision) {
1103
1071
  await lockRecordedClock(target, schema, graphId, ownsWriteLock);
1104
- const previous = previousRevision === void 0 ? await readRecordedClockParts(target, schema, graphId) : chunkEQ7JKLZO_cjs.parseRecordedInstant(previousRevision, "previous recorded revision");
1072
+ const previous = previousRevision === void 0 ? await readRecordedClockParts(target, schema, graphId) : chunkQ7Q4WSLJ_cjs.parseRecordedInstant(previousRevision, "previous recorded revision");
1105
1073
  const { revision, recordedAt } = nextRecordedCommitParts(previous);
1106
- if (revision >= chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION) {
1107
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
1108
- `Recorded commit clock reached the open revision sentinel ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}`,
1074
+ if (revision >= chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION) {
1075
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
1076
+ `Recorded commit clock reached the open revision sentinel ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}`,
1109
1077
  { graphId, revision },
1110
1078
  {
1111
1079
  suggestion: "Start a new graph before exhausting the per-graph recorded revision space."
1112
1080
  }
1113
1081
  );
1114
1082
  }
1115
- const instant = chunkEQ7JKLZO_cjs.createRecordedInstant(revision, recordedAt);
1083
+ const instant = chunkQ7Q4WSLJ_cjs.createRecordedInstant(revision, recordedAt);
1116
1084
  await writeRecordedClock(target, schema, graphId, { revision, recordedAt });
1085
+ if (previousRevision !== void 0) {
1086
+ await assertRecordedClockAdvanced(target, schema, graphId, revision);
1087
+ }
1117
1088
  return { instant, revision, recordedAt };
1118
1089
  }
1119
1090
  async function advanceRevisionClock(target, schema, graphId, ownsWriteLock, previousRevision) {
@@ -1175,6 +1146,7 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1175
1146
  "commitSchemaVersion",
1176
1147
  "commitSchemaVersionIfKindsEmpty",
1177
1148
  "lockSchemaVersionForWrite",
1149
+ "commitSchemaVersionWithPreflight",
1178
1150
  "setActiveVersion",
1179
1151
  "schemaWriteTransaction",
1180
1152
  "upsertEmbedding",
@@ -1214,7 +1186,11 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1214
1186
  "deleteVectorSlotContribution",
1215
1187
  "verifyContributions",
1216
1188
  "repairContributions",
1189
+ "probeContributions",
1190
+ "rebuildContribution",
1217
1191
  "ensureFulltextTable",
1192
+ "ensureIdentityTables",
1193
+ "identityTableDdl",
1218
1194
  "getReconciliationMarker",
1219
1195
  "setReconciliationMarker",
1220
1196
  "clearGraph",
@@ -1235,7 +1211,9 @@ function projectBackendMembers(backend, keys) {
1235
1211
  if (!Reflect.has(backend, key)) return [];
1236
1212
  return [[key, Reflect.get(backend, key)]];
1237
1213
  });
1238
- return Object.fromEntries(entries);
1214
+ const projection = Object.fromEntries(entries);
1215
+ chunkXBYVV3MP_cjs.inheritSerializedTransactionResource(projection, backend);
1216
+ return projection;
1239
1217
  }
1240
1218
  function createGraphBackendProjection(backend) {
1241
1219
  return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
@@ -1245,17 +1223,17 @@ function createGraphBackendProjection(backend) {
1245
1223
  function nodeInsertDispatch(backend) {
1246
1224
  return {
1247
1225
  one: (params) => backend.insertNode(params),
1248
- oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodeNoReturn)(params),
1249
- batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatch)(params),
1250
- batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatchReturning)(params)
1226
+ oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodeNoReturn)(params),
1227
+ batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodesBatch)(params),
1228
+ batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodesBatchReturning)(params)
1251
1229
  };
1252
1230
  }
1253
1231
  function edgeInsertDispatch(backend) {
1254
1232
  return {
1255
1233
  one: (params) => backend.insertEdge(params),
1256
- oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
1257
- batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatch)(params),
1258
- batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatchReturning)(params)
1234
+ oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
1235
+ batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgesBatch)(params),
1236
+ batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgesBatchReturning)(params)
1259
1237
  };
1260
1238
  }
1261
1239
  async function runInsertNoReturn(dispatch, params) {
@@ -1276,6 +1254,7 @@ async function runInsertBatch(dispatch, params) {
1276
1254
  }
1277
1255
  }
1278
1256
  async function runInsertBatchReturning(dispatch, params) {
1257
+ if (params.length === 0) return [];
1279
1258
  if (dispatch.batchReturning !== void 0) {
1280
1259
  return dispatch.batchReturning(params);
1281
1260
  }
@@ -1286,6 +1265,174 @@ async function runInsertBatchReturning(dispatch, params) {
1286
1265
  return rows;
1287
1266
  }
1288
1267
 
1268
+ // src/identity/historical-sql.ts
1269
+ var IDENTITY_ASSERTION_COLUMNS = chunkVCRRKBLN_cjs.sql.raw(
1270
+ [
1271
+ "graph_id",
1272
+ "id",
1273
+ "rel",
1274
+ "a_kind",
1275
+ "a_id",
1276
+ "b_kind",
1277
+ "b_id",
1278
+ "valid_from",
1279
+ "valid_to",
1280
+ "created_at",
1281
+ "updated_at",
1282
+ "deleted_at",
1283
+ "ended_by_kind",
1284
+ "ended_by_id"
1285
+ ].join(", ")
1286
+ );
1287
+ function identitySqlCoordinate(coordinate, currentInstant) {
1288
+ return {
1289
+ validMode: coordinate?.valid.mode ?? "current",
1290
+ validAsOf: coordinate?.valid.asOf,
1291
+ recorded: chunkQ7Q4WSLJ_cjs.optionalRecordedInstantParts(
1292
+ coordinate?.recorded?.asOf,
1293
+ "recorded.asOf"
1294
+ ),
1295
+ currentInstant: typeof currentInstant === "string" ? chunkVCRRKBLN_cjs.sql`${currentInstant}` : currentInstant
1296
+ };
1297
+ }
1298
+ function validityInstant(coordinate) {
1299
+ if (coordinate.validMode === "asOf" && coordinate.validAsOf !== void 0) {
1300
+ return chunkVCRRKBLN_cjs.sql`${coordinate.validAsOf}`;
1301
+ }
1302
+ if (coordinate.recorded !== void 0) {
1303
+ return chunkVCRRKBLN_cjs.sql`${coordinate.recorded.recordedAt}`;
1304
+ }
1305
+ return coordinate.currentInstant;
1306
+ }
1307
+ function qualifiedColumn(alias, column) {
1308
+ return chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.identifier(alias)}.${chunkVCRRKBLN_cjs.sql.identifier(column)}`;
1309
+ }
1310
+ function identityNodeVisibilitySql(coordinate, alias) {
1311
+ const deletedAt = qualifiedColumn(alias, "deleted_at");
1312
+ if (coordinate.validMode === "includeTombstones") return chunkVCRRKBLN_cjs.sql`1 = 1`;
1313
+ if (coordinate.validMode === "includeEnded") {
1314
+ return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
1315
+ }
1316
+ const validFrom = qualifiedColumn(alias, "valid_from");
1317
+ const validTo = qualifiedColumn(alias, "valid_to");
1318
+ const instant = validityInstant(coordinate);
1319
+ return chunkVCRRKBLN_cjs.sql`
1320
+ ${deletedAt} IS NULL
1321
+ AND (${validFrom} IS NULL OR ${validFrom} <= ${instant})
1322
+ AND (${validTo} IS NULL OR ${validTo} > ${instant})
1323
+ `;
1324
+ }
1325
+ function structuralFoldVisibilitySql(coordinate, alias) {
1326
+ const deletedAt = qualifiedColumn(alias, "deleted_at");
1327
+ if (coordinate.recorded !== void 0) return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
1328
+ if (coordinate.validMode !== "asOf") return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
1329
+ const createdAt = qualifiedColumn(alias, "created_at");
1330
+ const instant = validityInstant(coordinate);
1331
+ return chunkVCRRKBLN_cjs.sql`${createdAt} <= ${instant} AND (${deletedAt} IS NULL OR ${deletedAt} > ${instant})`;
1332
+ }
1333
+ function identityNodeSnapshotSource(schema, graphId, coordinate) {
1334
+ const table = coordinate.recorded === void 0 ? schema.nodesTable : schema.recordedNodesTable;
1335
+ const recordedFilter = coordinate.recorded === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`
1336
+ AND recorded_from <= ${coordinate.recorded.revision}
1337
+ AND recorded_to > ${coordinate.recorded.revision}
1338
+ `;
1339
+ return chunkVCRRKBLN_cjs.sql`
1340
+ SELECT kind, id, valid_from, valid_to, created_at, deleted_at
1341
+ FROM ${table}
1342
+ WHERE graph_id = ${graphId}
1343
+ ${recordedFilter}
1344
+ `;
1345
+ }
1346
+ function identityAssertionSnapshotSource(schema, graphId, coordinate, relation) {
1347
+ const table = coordinate.recorded === void 0 ? schema.identityAssertionsTable : schema.recordedIdentityAssertionsTable;
1348
+ const recordedFilter = coordinate.recorded === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`
1349
+ AND recorded_from <= ${coordinate.recorded.revision}
1350
+ AND recorded_to > ${coordinate.recorded.revision}
1351
+ `;
1352
+ const relationFilter = relation === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`AND rel = ${relation}`;
1353
+ const instant = validityInstant(coordinate);
1354
+ return chunkVCRRKBLN_cjs.sql`
1355
+ SELECT ${IDENTITY_ASSERTION_COLUMNS}
1356
+ FROM ${table}
1357
+ WHERE graph_id = ${graphId}
1358
+ ${recordedFilter}
1359
+ AND deleted_at IS NULL
1360
+ ${relationFilter}
1361
+ AND valid_from <= ${instant}
1362
+ AND (valid_to IS NULL OR valid_to > ${instant})
1363
+ `;
1364
+ }
1365
+ function historicalIdentityReconstructionCtes(input) {
1366
+ const nodes = identityNodeSnapshotSource(
1367
+ input.schema,
1368
+ input.graphId,
1369
+ input.coordinate
1370
+ );
1371
+ const assertions = identityAssertionSnapshotSource(
1372
+ input.schema,
1373
+ input.graphId,
1374
+ input.coordinate,
1375
+ "same"
1376
+ );
1377
+ const sameIdEdges = input.sameIdAcrossKinds === "fold" ? chunkVCRRKBLN_cjs.sql`
1378
+ UNION ALL
1379
+ SELECT left_node.kind, left_node.id, right_node.kind, right_node.id
1380
+ FROM node_snapshot left_node
1381
+ JOIN node_snapshot right_node
1382
+ ON right_node.id = left_node.id
1383
+ AND right_node.kind <> left_node.kind
1384
+ WHERE ${structuralFoldVisibilitySql(input.coordinate, "left_node")}
1385
+ AND ${structuralFoldVisibilitySql(input.coordinate, "right_node")}
1386
+ ` : chunkVCRRKBLN_cjs.sql``;
1387
+ return chunkVCRRKBLN_cjs.sql`
1388
+ node_snapshot(kind, id, valid_from, valid_to, created_at, deleted_at) AS (
1389
+ ${nodes}
1390
+ ),
1391
+ same_assertions(a_kind, a_id, b_kind, b_id) AS (
1392
+ SELECT a_kind, a_id, b_kind, b_id FROM (${assertions}) identity_assertions
1393
+ ),
1394
+ identity_edges(a_kind, a_id, b_kind, b_id) AS (
1395
+ SELECT a_kind, a_id, b_kind, b_id FROM same_assertions
1396
+ UNION ALL
1397
+ SELECT b_kind, b_id, a_kind, a_id FROM same_assertions
1398
+ ${sameIdEdges}
1399
+ ),
1400
+ seeds(seed_kind, seed_id) AS (
1401
+ ${input.seedSource}
1402
+ ),
1403
+ identity_members(seed_kind, seed_id, kind, id) AS (
1404
+ SELECT seeds.seed_kind, seeds.seed_id, seeds.seed_kind, seeds.seed_id
1405
+ FROM seeds
1406
+ JOIN node_snapshot n
1407
+ ON n.kind = seeds.seed_kind AND n.id = seeds.seed_id
1408
+ WHERE ${identityNodeVisibilitySql(input.coordinate, "n")}
1409
+ UNION
1410
+ SELECT member.seed_kind, member.seed_id, edge.b_kind, edge.b_id
1411
+ FROM identity_members member
1412
+ JOIN identity_edges edge
1413
+ ON edge.a_kind = member.kind
1414
+ AND edge.a_id = member.id
1415
+ )
1416
+ `;
1417
+ }
1418
+ var IDENTITY_PEER_CLASS_COLUMNS = chunkVCRRKBLN_cjs.sql.raw(
1419
+ ["seed_kind", "seed_id", "kind", "id"].join(", ")
1420
+ );
1421
+ function historicalIdentityPeerClassQuery(input) {
1422
+ const reconstruction = historicalIdentityReconstructionCtes({
1423
+ ...input,
1424
+ seedSource: chunkVCRRKBLN_cjs.sql`SELECT DISTINCT a_kind, a_id FROM identity_edges`
1425
+ });
1426
+ return chunkVCRRKBLN_cjs.sql`
1427
+ WITH RECURSIVE
1428
+ ${reconstruction}
1429
+ SELECT member.seed_kind, member.seed_id, member.kind, member.id
1430
+ FROM identity_members member
1431
+ JOIN node_snapshot n ON n.kind = member.kind AND n.id = member.id
1432
+ WHERE ${identityNodeVisibilitySql(input.coordinate, "n")}
1433
+ `;
1434
+ }
1435
+
1289
1436
  // src/query/compiler/predicates.ts
1290
1437
  var COMPARISON_OP_SQL = {
1291
1438
  eq: "=",
@@ -1299,35 +1446,35 @@ function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
1299
1446
  if (cteColumnPrefix !== void 0) {
1300
1447
  const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
1301
1448
  if (field.path.length === 1 && field.path[0] === "id") {
1302
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}id`);
1449
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}id`);
1303
1450
  }
1304
1451
  if (field.path.length === 1 && field.path[0] === "kind") {
1305
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}kind`);
1452
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}kind`);
1306
1453
  }
1307
1454
  if (field.path.length > 0 && field.path[0] === "props") {
1308
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}props`);
1455
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}props`);
1309
1456
  }
1310
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
1457
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
1311
1458
  }
1312
1459
  const prefix = field.alias;
1313
1460
  const qualifier = cteAlias ? `${cteAlias}.` : "";
1314
1461
  if (field.path.length === 1 && field.path[0] === "id") {
1315
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_id`);
1462
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_id`);
1316
1463
  }
1317
1464
  if (field.path.length === 1 && field.path[0] === "kind") {
1318
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_kind`);
1465
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_kind`);
1319
1466
  }
1320
1467
  if (field.path.length > 0 && field.path[0] === "props") {
1321
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_props`);
1468
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_props`);
1322
1469
  }
1323
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
1470
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
1324
1471
  }
1325
1472
  function getFieldPointer(field) {
1326
1473
  if (field.jsonPointer !== void 0) {
1327
1474
  return field.jsonPointer;
1328
1475
  }
1329
1476
  if (field.path.length > 1 && field.path[0] === "props") {
1330
- return chunkTDXIBCGY_cjs.jsonPointer(field.path.slice(1));
1477
+ return chunkA7J2YDDI_cjs.jsonPointer(field.path.slice(1));
1331
1478
  }
1332
1479
  return void 0;
1333
1480
  }
@@ -1406,7 +1553,7 @@ function resolveLiteralValueTypes(literals) {
1406
1553
  }
1407
1554
  }
1408
1555
  if (resolved.size > 1) {
1409
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1556
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1410
1557
  "Mixed literal value types are not supported in predicates",
1411
1558
  { valueTypes: [...resolved] }
1412
1559
  );
@@ -1440,9 +1587,9 @@ function convertValueForSql(value, dialect) {
1440
1587
  }
1441
1588
  function compileStringPattern(op, pattern) {
1442
1589
  const escaped = pattern.replaceAll(
1443
- chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER,
1444
- `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}`
1445
- ).replaceAll("%", `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}_`);
1590
+ chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER,
1591
+ `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}`
1592
+ ).replaceAll("%", `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}_`);
1446
1593
  switch (op) {
1447
1594
  case "contains": {
1448
1595
  return `%${escaped}%`;
@@ -1463,22 +1610,22 @@ function compileStringPattern(op, pattern) {
1463
1610
  }
1464
1611
  }
1465
1612
  function escapeLikePatternParameter(parameter) {
1466
- const doubledEscape = `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}`;
1467
- return chunkU5W4LKZV_cjs.sql`REPLACE(REPLACE(REPLACE(${parameter}, ${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}_`})`;
1613
+ const doubledEscape = `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}`;
1614
+ return chunkVCRRKBLN_cjs.sql`REPLACE(REPLACE(REPLACE(${parameter}, ${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}_`})`;
1468
1615
  }
1469
1616
  function compileParameterizedStringPattern(op, parameter) {
1470
1617
  switch (op) {
1471
1618
  case "contains": {
1472
1619
  const escaped = escapeLikePatternParameter(parameter);
1473
- return chunkU5W4LKZV_cjs.sql`'%' || ${escaped} || '%'`;
1620
+ return chunkVCRRKBLN_cjs.sql`'%' || ${escaped} || '%'`;
1474
1621
  }
1475
1622
  case "startsWith": {
1476
1623
  const escaped = escapeLikePatternParameter(parameter);
1477
- return chunkU5W4LKZV_cjs.sql`${escaped} || '%'`;
1624
+ return chunkVCRRKBLN_cjs.sql`${escaped} || '%'`;
1478
1625
  }
1479
1626
  case "endsWith": {
1480
1627
  const escaped = escapeLikePatternParameter(parameter);
1481
- return chunkU5W4LKZV_cjs.sql`'%' || ${escaped}`;
1628
+ return chunkVCRRKBLN_cjs.sql`'%' || ${escaped}`;
1482
1629
  }
1483
1630
  case "like":
1484
1631
  case "ilike": {
@@ -1505,18 +1652,18 @@ function compilePredicateExpression(expr, ctx) {
1505
1652
  cteColumnPrefix
1506
1653
  );
1507
1654
  if (isParameterRef(expr.pattern)) {
1508
- const placeholder = chunkU5W4LKZV_cjs.sql`${chunkU5W4LKZV_cjs.sql.placeholder(expr.pattern.name)}`;
1655
+ const placeholder = chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.placeholder(expr.pattern.name)}`;
1509
1656
  const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
1510
1657
  if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1511
1658
  return dialect.ilike(field, pattern2);
1512
1659
  }
1513
- return chunkU5W4LKZV_cjs.sql`${field} LIKE ${pattern2} ${chunkU5W4LKZV_cjs.likeEscapeClause}`;
1660
+ return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern2} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
1514
1661
  }
1515
1662
  const pattern = compileStringPattern(expr.op, expr.pattern);
1516
1663
  if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1517
1664
  return dialect.ilike(field, pattern);
1518
1665
  }
1519
- return chunkU5W4LKZV_cjs.sql`${field} LIKE ${pattern} ${chunkU5W4LKZV_cjs.likeEscapeClause}`;
1666
+ return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
1520
1667
  }
1521
1668
  case "null_check": {
1522
1669
  const field = compileFieldTextValue(
@@ -1526,7 +1673,7 @@ function compilePredicateExpression(expr, ctx) {
1526
1673
  void 0,
1527
1674
  cteColumnPrefix
1528
1675
  );
1529
- return expr.op === "isNull" ? chunkU5W4LKZV_cjs.sql`${field} IS NULL` : chunkU5W4LKZV_cjs.sql`${field} IS NOT NULL`;
1676
+ return expr.op === "isNull" ? chunkVCRRKBLN_cjs.sql`${field} IS NULL` : chunkVCRRKBLN_cjs.sql`${field} IS NOT NULL`;
1530
1677
  }
1531
1678
  case "between": {
1532
1679
  const lowerIsParam = isParameterRef(expr.lower);
@@ -1536,7 +1683,7 @@ function compilePredicateExpression(expr, ctx) {
1536
1683
  if (!upperIsParam) boundsForType.push(expr.upper);
1537
1684
  const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
1538
1685
  if (valueType === "array" || valueType === "object") {
1539
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1686
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1540
1687
  "Between comparisons are not supported for JSON arrays or objects"
1541
1688
  );
1542
1689
  }
@@ -1548,25 +1695,25 @@ function compilePredicateExpression(expr, ctx) {
1548
1695
  void 0,
1549
1696
  cteColumnPrefix
1550
1697
  );
1551
- const lower = lowerIsParam ? chunkU5W4LKZV_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
1552
- const upper = upperIsParam ? chunkU5W4LKZV_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
1553
- return chunkU5W4LKZV_cjs.sql`${field} BETWEEN ${lower} AND ${upper}`;
1698
+ const lower = lowerIsParam ? chunkVCRRKBLN_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
1699
+ const upper = upperIsParam ? chunkVCRRKBLN_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
1700
+ return chunkVCRRKBLN_cjs.sql`${field} BETWEEN ${lower} AND ${upper}`;
1554
1701
  }
1555
1702
  case "and": {
1556
1703
  const parts = expr.predicates.map(
1557
1704
  (p) => compilePredicateExpression(p, ctx)
1558
1705
  );
1559
- return chunkU5W4LKZV_cjs.sql`(${chunkU5W4LKZV_cjs.sql.join(parts, chunkU5W4LKZV_cjs.sql` AND `)})`;
1706
+ return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` AND `)})`;
1560
1707
  }
1561
1708
  case "or": {
1562
1709
  const parts = expr.predicates.map(
1563
1710
  (p) => compilePredicateExpression(p, ctx)
1564
1711
  );
1565
- return chunkU5W4LKZV_cjs.sql`(${chunkU5W4LKZV_cjs.sql.join(parts, chunkU5W4LKZV_cjs.sql` OR `)})`;
1712
+ return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` OR `)})`;
1566
1713
  }
1567
1714
  case "not": {
1568
1715
  const inner = compilePredicateExpression(expr.predicate, ctx);
1569
- return chunkU5W4LKZV_cjs.sql`NOT (${inner})`;
1716
+ return chunkVCRRKBLN_cjs.sql`NOT (${inner})`;
1570
1717
  }
1571
1718
  case "array_op": {
1572
1719
  return compileArrayPredicate(expr, dialect, cteColumnPrefix);
@@ -1589,7 +1736,7 @@ function compilePredicateExpression(expr, ctx) {
1589
1736
  }
1590
1737
  }
1591
1738
  }
1592
- var STRUCTURAL_PREDICATE_NOOP = chunkU5W4LKZV_cjs.sql.raw("1=1");
1739
+ var STRUCTURAL_PREDICATE_NOOP = chunkVCRRKBLN_cjs.sql.raw("1=1");
1593
1740
  function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1594
1741
  if (isParameterRef(expr.right)) {
1595
1742
  const parameterValueType = resolveParameterValueType(expr.left, expr.right);
@@ -1612,15 +1759,15 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1612
1759
  }
1613
1760
  const opSql2 = COMPARISON_OP_SQL[expr.op];
1614
1761
  if (!opSql2) {
1615
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1762
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1616
1763
  `Comparison operation "${expr.op}" is not supported for parameterized predicates`
1617
1764
  );
1618
1765
  }
1619
- return chunkU5W4LKZV_cjs.sql`${left2} ${chunkU5W4LKZV_cjs.sql.raw(opSql2)} ${chunkU5W4LKZV_cjs.sql.placeholder(expr.right.name)}`;
1766
+ return chunkVCRRKBLN_cjs.sql`${left2} ${chunkVCRRKBLN_cjs.sql.raw(opSql2)} ${chunkVCRRKBLN_cjs.sql.placeholder(expr.right.name)}`;
1620
1767
  }
1621
1768
  const valueType = resolveComparisonValueType(expr.left, expr.right);
1622
1769
  if (valueType === "array" || valueType === "object") {
1623
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1770
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1624
1771
  `Comparison operation "${expr.op}" is not supported for ${valueType} values`
1625
1772
  );
1626
1773
  }
@@ -1635,7 +1782,7 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1635
1782
  if (expr.op === "in" || expr.op === "notIn") {
1636
1783
  const values = Array.isArray(expr.right) ? expr.right : [expr.right];
1637
1784
  if (values.length === 0) {
1638
- return expr.op === "in" ? chunkU5W4LKZV_cjs.sql.raw("1=0") : chunkU5W4LKZV_cjs.sql.raw("1=1");
1785
+ return expr.op === "in" ? chunkVCRRKBLN_cjs.sql.raw("1=0") : chunkVCRRKBLN_cjs.sql.raw("1=1");
1639
1786
  }
1640
1787
  const convertedValues = values.map(
1641
1788
  (value) => convertValueForSql(value.value, dialect)
@@ -1643,19 +1790,19 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1643
1790
  return dialect.inList(left, convertedValues, expr.op === "notIn");
1644
1791
  }
1645
1792
  const right = expr.right;
1646
- const rightValue = Array.isArray(right) ? chunk764JHTLT_cjs.requireDefined(right[0]) : right;
1793
+ const rightValue = Array.isArray(right) ? chunkN66HCGCY_cjs.requireDefined(right[0]) : right;
1647
1794
  const convertedRight = convertValueForSql(rightValue.value, dialect);
1648
1795
  const opSql = COMPARISON_OP_SQL[expr.op];
1649
1796
  if (!opSql) {
1650
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1797
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1651
1798
  `Comparison operation "${expr.op}" is not supported`
1652
1799
  );
1653
1800
  }
1654
- return chunkU5W4LKZV_cjs.sql`${left} ${chunkU5W4LKZV_cjs.sql.raw(opSql)} ${convertedRight}`;
1801
+ return chunkVCRRKBLN_cjs.sql`${left} ${chunkVCRRKBLN_cjs.sql.raw(opSql)} ${convertedRight}`;
1655
1802
  }
1656
1803
  function compileListParameterPredicate(left, parameterName, elementType, negated, dialect) {
1657
1804
  if (elementType === "array" || elementType === "object" || elementType === "embedding") {
1658
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1805
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1659
1806
  `IN/NOT IN is not supported for ${elementType} values`,
1660
1807
  { valueType: elementType },
1661
1808
  {
@@ -1663,7 +1810,7 @@ function compileListParameterPredicate(left, parameterName, elementType, negated
1663
1810
  }
1664
1811
  );
1665
1812
  }
1666
- return dialect.inListParameter(left, chunkU5W4LKZV_cjs.sql.placeholder(parameterName), {
1813
+ return dialect.inListParameter(left, chunkVCRRKBLN_cjs.sql.placeholder(parameterName), {
1667
1814
  negated,
1668
1815
  elementType
1669
1816
  });
@@ -1679,30 +1826,30 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1679
1826
  const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
1680
1827
  switch (expr.op) {
1681
1828
  case "isEmpty": {
1682
- return chunkU5W4LKZV_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
1829
+ return chunkVCRRKBLN_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
1683
1830
  }
1684
1831
  case "isNotEmpty": {
1685
- return chunkU5W4LKZV_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
1832
+ return chunkVCRRKBLN_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
1686
1833
  }
1687
1834
  case "lengthEq": {
1688
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1835
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1689
1836
  }
1690
1837
  case "lengthGt": {
1691
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1838
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1692
1839
  }
1693
1840
  case "lengthGte": {
1694
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1841
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1695
1842
  }
1696
1843
  case "lengthLt": {
1697
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1844
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1698
1845
  }
1699
1846
  case "lengthLte": {
1700
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1847
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1701
1848
  }
1702
1849
  case "contains": {
1703
1850
  const value = values[0];
1704
1851
  if (value === void 0) {
1705
- return chunkU5W4LKZV_cjs.sql.raw("1=0");
1852
+ return chunkVCRRKBLN_cjs.sql.raw("1=0");
1706
1853
  }
1707
1854
  return dialect.jsonArrayContains(field, value);
1708
1855
  }
@@ -1716,7 +1863,7 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1716
1863
  }
1717
1864
  function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1718
1865
  const basePointer = getFieldPointer(expr.field);
1719
- const pointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, expr.pointer);
1866
+ const pointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, expr.pointer);
1720
1867
  const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
1721
1868
  switch (expr.op) {
1722
1869
  case "hasKey":
@@ -1725,13 +1872,13 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1725
1872
  }
1726
1873
  case "pathEquals": {
1727
1874
  if (!expr.value) {
1728
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1875
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1729
1876
  "pathEquals requires a comparison value"
1730
1877
  );
1731
1878
  }
1732
1879
  const valueType = resolvePredicateValueType(expr.valueType, expr.value);
1733
1880
  if (valueType === "array" || valueType === "object") {
1734
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1881
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1735
1882
  "pathEquals is not supported for JSON arrays or objects"
1736
1883
  );
1737
1884
  }
@@ -1743,11 +1890,11 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1743
1890
  pointer,
1744
1891
  cteColumnPrefix
1745
1892
  );
1746
- return chunkU5W4LKZV_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1893
+ return chunkVCRRKBLN_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1747
1894
  }
1748
1895
  case "pathContains": {
1749
1896
  if (!expr.value) {
1750
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1897
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1751
1898
  "pathContains requires a comparison value"
1752
1899
  );
1753
1900
  }
@@ -1775,12 +1922,12 @@ function compileAggregatePredicate(expr, dialect) {
1775
1922
  const aggregate = compileAggregateExpr(expr.aggregate, dialect);
1776
1923
  const op = COMPARISON_OP_SQL[expr.op];
1777
1924
  if (!op) {
1778
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1925
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1779
1926
  `Comparison operation "${expr.op}" is not supported for aggregate predicates`
1780
1927
  );
1781
1928
  }
1782
1929
  const convertedValue = convertValueForSql(expr.value.value, dialect);
1783
- return chunkU5W4LKZV_cjs.sql`${aggregate} ${chunkU5W4LKZV_cjs.sql.raw(op)} ${convertedValue}`;
1930
+ return chunkVCRRKBLN_cjs.sql`${aggregate} ${chunkVCRRKBLN_cjs.sql.raw(op)} ${convertedValue}`;
1784
1931
  }
1785
1932
  function compileAggregateExpr(expr, dialect) {
1786
1933
  const cteAlias = `cte_${expr.field.alias}`;
@@ -1792,25 +1939,25 @@ function compileAggregateExpr(expr, dialect) {
1792
1939
  );
1793
1940
  switch (expr.function) {
1794
1941
  case "count": {
1795
- return chunkU5W4LKZV_cjs.sql`COUNT(${field})`;
1942
+ return chunkVCRRKBLN_cjs.sql`COUNT(${field})`;
1796
1943
  }
1797
1944
  case "countDistinct": {
1798
- return chunkU5W4LKZV_cjs.sql`COUNT(DISTINCT ${field})`;
1945
+ return chunkVCRRKBLN_cjs.sql`COUNT(DISTINCT ${field})`;
1799
1946
  }
1800
1947
  case "sum": {
1801
- return chunkU5W4LKZV_cjs.sql`SUM(${field})`;
1948
+ return chunkVCRRKBLN_cjs.sql`SUM(${field})`;
1802
1949
  }
1803
1950
  case "avg": {
1804
- return chunkU5W4LKZV_cjs.sql`AVG(${field})`;
1951
+ return chunkVCRRKBLN_cjs.sql`AVG(${field})`;
1805
1952
  }
1806
1953
  case "min": {
1807
- return chunkU5W4LKZV_cjs.sql`MIN(${field})`;
1954
+ return chunkVCRRKBLN_cjs.sql`MIN(${field})`;
1808
1955
  }
1809
1956
  case "max": {
1810
- return chunkU5W4LKZV_cjs.sql`MAX(${field})`;
1957
+ return chunkVCRRKBLN_cjs.sql`MAX(${field})`;
1811
1958
  }
1812
1959
  default: {
1813
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1960
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1814
1961
  `Unknown aggregate function: ${expr.function}`
1815
1962
  );
1816
1963
  }
@@ -1818,15 +1965,15 @@ function compileAggregateExpr(expr, dialect) {
1818
1965
  }
1819
1966
  function compileExistsSubquery(expr, ctx) {
1820
1967
  if (expr.subquery.graphId === void 0) {
1821
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
1968
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
1822
1969
  }
1823
1970
  const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1824
- return expr.negated ? chunkU5W4LKZV_cjs.sql`NOT EXISTS (${subSql})` : chunkU5W4LKZV_cjs.sql`EXISTS (${subSql})`;
1971
+ return expr.negated ? chunkVCRRKBLN_cjs.sql`NOT EXISTS (${subSql})` : chunkVCRRKBLN_cjs.sql`EXISTS (${subSql})`;
1825
1972
  }
1826
1973
  function compileInSubquery(expr, ctx) {
1827
1974
  const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
1828
1975
  if (subqueryColumnCount !== 1) {
1829
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1976
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1830
1977
  `IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
1831
1978
  { subqueryColumnCount }
1832
1979
  );
@@ -1835,13 +1982,13 @@ function compileInSubquery(expr, ctx) {
1835
1982
  const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
1836
1983
  const resolvedValueType = fieldValueType ?? subqueryValueType;
1837
1984
  if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
1838
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1985
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1839
1986
  `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
1840
1987
  { valueType: resolvedValueType }
1841
1988
  );
1842
1989
  }
1843
1990
  if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
1844
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1991
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1845
1992
  `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
1846
1993
  {
1847
1994
  fieldValueType,
@@ -1851,7 +1998,7 @@ function compileInSubquery(expr, ctx) {
1851
1998
  }
1852
1999
  const valueType = fieldValueType ?? subqueryValueType;
1853
2000
  if (expr.subquery.graphId === void 0) {
1854
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
2001
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1855
2002
  "IN/NOT IN subquery must have a graphId"
1856
2003
  );
1857
2004
  }
@@ -1864,14 +2011,14 @@ function compileInSubquery(expr, ctx) {
1864
2011
  ctx.cteColumnPrefix
1865
2012
  );
1866
2013
  const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1867
- return expr.negated ? chunkU5W4LKZV_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkU5W4LKZV_cjs.sql`${fieldSql} IN (${subSql})`;
2014
+ return expr.negated ? chunkVCRRKBLN_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkVCRRKBLN_cjs.sql`${fieldSql} IN (${subSql})`;
1868
2015
  }
1869
2016
  function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
1870
2017
  const results = [];
1871
2018
  function visit(expr, inDisallowedBranch) {
1872
2019
  if (isMatch(expr)) {
1873
2020
  if (inDisallowedBranch) {
1874
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(rejectionMessage);
2021
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(rejectionMessage);
1875
2022
  }
1876
2023
  results.push(expr);
1877
2024
  return;
@@ -1925,9 +2072,9 @@ function extractFulltextMatchPredicates(predicates) {
1925
2072
  // src/query/compiler/predicate-utils.ts
1926
2073
  var EMPTY_PREDICATES = [];
1927
2074
  function sqlValueList(values) {
1928
- return chunkU5W4LKZV_cjs.sql.join(
1929
- values.map((value) => chunkU5W4LKZV_cjs.sql`${value}`),
1930
- chunkU5W4LKZV_cjs.sql`, `
2075
+ return chunkVCRRKBLN_cjs.sql.join(
2076
+ values.map((value) => chunkVCRRKBLN_cjs.sql`${value}`),
2077
+ chunkVCRRKBLN_cjs.sql`, `
1931
2078
  );
1932
2079
  }
1933
2080
  function buildPredicateIndexKey(alias, targetType) {
@@ -1964,12 +2111,12 @@ function compilePredicateClauses(predicates, predicateContext) {
1964
2111
  }
1965
2112
  function compileKindFilter(column, kinds) {
1966
2113
  if (kinds.length === 0) {
1967
- return chunkU5W4LKZV_cjs.sql`1 = 0`;
2114
+ return chunkVCRRKBLN_cjs.sql`1 = 0`;
1968
2115
  }
1969
2116
  if (kinds.length === 1) {
1970
- return chunkU5W4LKZV_cjs.sql`${column} = ${kinds[0]}`;
2117
+ return chunkVCRRKBLN_cjs.sql`${column} = ${kinds[0]}`;
1971
2118
  }
1972
- return chunkU5W4LKZV_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
2119
+ return chunkVCRRKBLN_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
1973
2120
  }
1974
2121
  function getNodeKindsForAlias(ast, alias) {
1975
2122
  if (alias === ast.start.alias) {
@@ -1980,7 +2127,7 @@ function getNodeKindsForAlias(ast, alias) {
1980
2127
  return traversal.nodeKinds;
1981
2128
  }
1982
2129
  }
1983
- throw new chunkC4F7VJ5D_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
2130
+ throw new chunkNI72YOJB_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
1984
2131
  }
1985
2132
  function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
1986
2133
  if (!vectorPredicate || !fulltextPredicate) return void 0;
@@ -2009,7 +2156,7 @@ async function getRowsByIds(ids, policy) {
2009
2156
  // src/store/edge-fetch.ts
2010
2157
  async function getEdgeRowsByIds(backend, graphId, ids) {
2011
2158
  return getRowsByIds(ids, {
2012
- batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
2159
+ batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunkN66HCGCY_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
2013
2160
  one: (id) => backend.getEdge(graphId, id)
2014
2161
  });
2015
2162
  }
@@ -2017,7 +2164,7 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
2017
2164
  // src/store/node-fetch.ts
2018
2165
  async function getNodeRowsByIds(backend, graphId, kind, ids) {
2019
2166
  return getRowsByIds(ids, {
2020
- batch: backend.getNodes === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getNodes)(graphId, kind, batchIds),
2167
+ batch: backend.getNodes === void 0 ? void 0 : (batchIds) => chunkN66HCGCY_cjs.requireDefined(backend.getNodes)(graphId, kind, batchIds),
2021
2168
  one: (id) => backend.getNode(graphId, kind, id)
2022
2169
  });
2023
2170
  }
@@ -2065,13 +2212,36 @@ var RECORDED_EDGE_COLUMNS = [
2065
2212
  "tx_id",
2066
2213
  "meta"
2067
2214
  ];
2068
- var RECORDED_NODE_COLUMN_LIST = chunkU5W4LKZV_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
2069
- var RECORDED_EDGE_COLUMN_LIST = chunkU5W4LKZV_cjs.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
2215
+ var RECORDED_IDENTITY_ASSERTION_COLUMNS = [
2216
+ "history_id",
2217
+ "graph_id",
2218
+ "id",
2219
+ "rel",
2220
+ "a_kind",
2221
+ "a_id",
2222
+ "b_kind",
2223
+ "b_id",
2224
+ "valid_from",
2225
+ "valid_to",
2226
+ "created_at",
2227
+ "updated_at",
2228
+ "deleted_at",
2229
+ "ended_by_kind",
2230
+ "ended_by_id",
2231
+ "recorded_from",
2232
+ "recorded_to",
2233
+ "op"
2234
+ ];
2235
+ var RECORDED_NODE_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
2236
+ var RECORDED_EDGE_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
2237
+ var RECORDED_IDENTITY_ASSERTION_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(
2238
+ RECORDED_IDENTITY_ASSERTION_COLUMNS.join(", ")
2239
+ );
2070
2240
  var RECORDED_BIND_PARAM_BUDGET = 900;
2071
2241
  function recordedBindParamBudget(target) {
2072
2242
  const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
2073
2243
  if (!Number.isSafeInteger(budget) || budget < 1) {
2074
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2244
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2075
2245
  `backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
2076
2246
  {
2077
2247
  code: "INVALID_BACKEND_CAPABILITY",
@@ -2087,44 +2257,64 @@ function recordedChunkSize(target, columnCount) {
2087
2257
  return Math.max(1, Math.floor(budget / columnCount));
2088
2258
  }
2089
2259
  function sqlNull(value) {
2090
- return value === void 0 ? chunkU5W4LKZV_cjs.sql.raw("NULL") : chunkU5W4LKZV_cjs.sql`${value}`;
2260
+ return value === void 0 ? chunkVCRRKBLN_cjs.sql.raw("NULL") : chunkVCRRKBLN_cjs.sql`${value}`;
2091
2261
  }
2092
2262
  function recordedCommonCells() {
2093
2263
  return {
2094
- history_id: () => chunkU5W4LKZV_cjs.sql`${generateId()}`,
2095
- graph_id: (row) => chunkU5W4LKZV_cjs.sql`${row.graph_id}`,
2096
- id: (row) => chunkU5W4LKZV_cjs.sql`${row.id}`,
2097
- kind: (row) => chunkU5W4LKZV_cjs.sql`${row.kind}`,
2098
- props: (row) => chunkU5W4LKZV_cjs.sql`${chunkEKFUG4G7_cjs.rowPropsToJsonText(row.props)}`,
2099
- valid_from: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.valid_from)}`,
2100
- valid_to: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.valid_to)}`,
2101
- created_at: (row) => chunkU5W4LKZV_cjs.sql`${row.created_at}`,
2102
- updated_at: (row) => chunkU5W4LKZV_cjs.sql`${row.updated_at}`,
2103
- deleted_at: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.deleted_at)}`,
2104
- recorded_from: (_row, recordedRevision) => chunkU5W4LKZV_cjs.sql`${recordedRevision}`,
2105
- recorded_to: () => chunkU5W4LKZV_cjs.sql`${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}`,
2106
- op: (_row, _recordedCommit, operation) => chunkU5W4LKZV_cjs.sql`${operation}`,
2107
- schema_version: () => chunkU5W4LKZV_cjs.sql`NULL`,
2108
- tx_id: () => chunkU5W4LKZV_cjs.sql`NULL`,
2109
- meta: () => chunkU5W4LKZV_cjs.sql`${RECORDED_HISTORY_META}`
2264
+ history_id: () => chunkVCRRKBLN_cjs.sql`${generateId()}`,
2265
+ graph_id: (row) => chunkVCRRKBLN_cjs.sql`${row.graph_id}`,
2266
+ id: (row) => chunkVCRRKBLN_cjs.sql`${row.id}`,
2267
+ kind: (row) => chunkVCRRKBLN_cjs.sql`${row.kind}`,
2268
+ props: (row) => chunkVCRRKBLN_cjs.sql`${chunkXBYVV3MP_cjs.rowPropsToJsonText(row.props)}`,
2269
+ valid_from: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.valid_from)}`,
2270
+ valid_to: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.valid_to)}`,
2271
+ created_at: (row) => chunkVCRRKBLN_cjs.sql`${row.created_at}`,
2272
+ updated_at: (row) => chunkVCRRKBLN_cjs.sql`${row.updated_at}`,
2273
+ deleted_at: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.deleted_at)}`,
2274
+ recorded_from: (_row, recordedRevision) => chunkVCRRKBLN_cjs.sql`${recordedRevision}`,
2275
+ recorded_to: () => chunkVCRRKBLN_cjs.sql`${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}`,
2276
+ op: (_row, _recordedCommit, operation) => chunkVCRRKBLN_cjs.sql`${operation}`,
2277
+ schema_version: () => chunkVCRRKBLN_cjs.sql`NULL`,
2278
+ tx_id: () => chunkVCRRKBLN_cjs.sql`NULL`,
2279
+ meta: () => chunkVCRRKBLN_cjs.sql`${RECORDED_HISTORY_META}`
2110
2280
  };
2111
2281
  }
2112
2282
  var recordedNodeCells = {
2113
2283
  ...recordedCommonCells(),
2114
- version: (row) => chunkU5W4LKZV_cjs.sql`${row.version}`
2284
+ version: (row) => chunkVCRRKBLN_cjs.sql`${row.version}`
2115
2285
  };
2116
2286
  var recordedEdgeCells = {
2117
2287
  ...recordedCommonCells(),
2118
- from_kind: (row) => chunkU5W4LKZV_cjs.sql`${row.from_kind}`,
2119
- from_id: (row) => chunkU5W4LKZV_cjs.sql`${row.from_id}`,
2120
- to_kind: (row) => chunkU5W4LKZV_cjs.sql`${row.to_kind}`,
2121
- to_id: (row) => chunkU5W4LKZV_cjs.sql`${row.to_id}`
2288
+ from_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.from_kind}`,
2289
+ from_id: (row) => chunkVCRRKBLN_cjs.sql`${row.from_id}`,
2290
+ to_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.to_kind}`,
2291
+ to_id: (row) => chunkVCRRKBLN_cjs.sql`${row.to_id}`
2292
+ };
2293
+ var recordedIdentityAssertionCells = {
2294
+ history_id: () => chunkVCRRKBLN_cjs.sql`${generateId()}`,
2295
+ graph_id: (row) => chunkVCRRKBLN_cjs.sql`${row.graph_id}`,
2296
+ id: (row) => chunkVCRRKBLN_cjs.sql`${row.id}`,
2297
+ rel: (row) => chunkVCRRKBLN_cjs.sql`${row.rel}`,
2298
+ a_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.a_kind}`,
2299
+ a_id: (row) => chunkVCRRKBLN_cjs.sql`${row.a_id}`,
2300
+ b_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.b_kind}`,
2301
+ b_id: (row) => chunkVCRRKBLN_cjs.sql`${row.b_id}`,
2302
+ valid_from: (row) => chunkVCRRKBLN_cjs.sql`${row.valid_from}`,
2303
+ valid_to: (row) => chunkVCRRKBLN_cjs.sql`${row.valid_to ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
2304
+ created_at: (row) => chunkVCRRKBLN_cjs.sql`${row.created_at}`,
2305
+ updated_at: (row) => chunkVCRRKBLN_cjs.sql`${row.updated_at}`,
2306
+ deleted_at: (row) => chunkVCRRKBLN_cjs.sql`${row.deleted_at ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
2307
+ ended_by_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.ended_by_kind ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
2308
+ ended_by_id: (row) => chunkVCRRKBLN_cjs.sql`${row.ended_by_id ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
2309
+ recorded_from: (_row, recordedRevision) => chunkVCRRKBLN_cjs.sql`${recordedRevision}`,
2310
+ recorded_to: () => chunkVCRRKBLN_cjs.sql`${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}`,
2311
+ op: (_row, _recordedRevision, operation) => chunkVCRRKBLN_cjs.sql`${operation}`
2122
2312
  };
2123
2313
  function recordedValuesTuple(columns, cells, row, recordedRevision, operation) {
2124
2314
  const tuple = columns.map(
2125
2315
  (column) => cells[column](row, recordedRevision, operation)
2126
2316
  );
2127
- return chunkU5W4LKZV_cjs.sql`(${chunkU5W4LKZV_cjs.sql.join(tuple, chunkU5W4LKZV_cjs.sql`, `)})`;
2317
+ return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(tuple, chunkVCRRKBLN_cjs.sql`, `)})`;
2128
2318
  }
2129
2319
  async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedRevision) {
2130
2320
  if (inserts.length === 0) return;
@@ -2139,9 +2329,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
2139
2329
  );
2140
2330
  await executeStatement(
2141
2331
  target,
2142
- chunkU5W4LKZV_cjs.sql`
2332
+ chunkVCRRKBLN_cjs.sql`
2143
2333
  INSERT INTO ${table} (${columnList})
2144
- VALUES ${chunkU5W4LKZV_cjs.sql.join(values, chunkU5W4LKZV_cjs.sql`, `)}
2334
+ VALUES ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
2145
2335
  `
2146
2336
  );
2147
2337
  }
@@ -2151,6 +2341,9 @@ function recordedNodeChunkSize(target) {
2151
2341
  function recordedEdgeChunkSize(target) {
2152
2342
  return recordedChunkSize(target, RECORDED_EDGE_COLUMNS.length);
2153
2343
  }
2344
+ function recordedIdentityAssertionChunkSize(target) {
2345
+ return recordedChunkSize(target, RECORDED_IDENTITY_ASSERTION_COLUMNS.length);
2346
+ }
2154
2347
  function insertRecordedNodeRows(target, table, inserts, recordedRevision) {
2155
2348
  return insertRecordedRows(
2156
2349
  target,
@@ -2173,6 +2366,17 @@ function insertRecordedEdgeRows(target, table, inserts, recordedRevision) {
2173
2366
  recordedRevision
2174
2367
  );
2175
2368
  }
2369
+ function insertRecordedIdentityAssertionRows(target, table, inserts, recordedRevision) {
2370
+ return insertRecordedRows(
2371
+ target,
2372
+ table,
2373
+ RECORDED_IDENTITY_ASSERTION_COLUMN_LIST,
2374
+ RECORDED_IDENTITY_ASSERTION_COLUMNS,
2375
+ recordedIdentityAssertionCells,
2376
+ inserts,
2377
+ recordedRevision
2378
+ );
2379
+ }
2176
2380
 
2177
2381
  // src/store/recorded-capture/flush.ts
2178
2382
  function entityKey(entity) {
@@ -2183,25 +2387,28 @@ function entityKey(entity) {
2183
2387
  case "edge": {
2184
2388
  return `edge\0${entity.graphId}\0${entity.id}`;
2185
2389
  }
2390
+ case "identity": {
2391
+ return `identity\0${entity.graphId}\0${entity.id}`;
2392
+ }
2186
2393
  }
2187
2394
  }
2188
2395
  async function closeOpenReturning(target, table, graphId, ids, recordedRevision, kind) {
2189
- const kindFilter = kind === void 0 ? chunkU5W4LKZV_cjs.sql`` : chunkU5W4LKZV_cjs.sql`AND kind = ${kind}`;
2396
+ const kindFilter = kind === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`AND kind = ${kind}`;
2190
2397
  const rows = await target.execute(
2191
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2398
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2192
2399
  UPDATE ${table}
2193
2400
  SET recorded_to = ${recordedRevision}
2194
2401
  WHERE graph_id = ${graphId}
2195
2402
  ${kindFilter}
2196
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2403
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2197
2404
  AND id IN (${sqlValueList(ids)})
2198
2405
  RETURNING id, deleted_at
2199
2406
  `)
2200
2407
  );
2201
- return new Map(rows.map((row) => [row.id, chunk764JHTLT_cjs.isPresent(row.deleted_at)]));
2408
+ return new Map(rows.map((row) => [row.id, chunkN66HCGCY_cjs.isPresent(row.deleted_at)]));
2202
2409
  }
2203
2410
  function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
2204
- if (chunk764JHTLT_cjs.isPresent(after.deleted_at)) return "delete";
2411
+ if (chunkN66HCGCY_cjs.isPresent(after.deleted_at)) return "delete";
2205
2412
  if (!hadOpenRow || priorRowWasTombstone) return "create";
2206
2413
  return "update";
2207
2414
  }
@@ -2238,7 +2445,7 @@ function recordedInsertsFor(afterById, closed) {
2238
2445
  async function flushNodes(target, schema, graphId, entities, recordedRevision) {
2239
2446
  const chunkSize = recordedNodeChunkSize(target);
2240
2447
  for (const [kind, group] of groupNodesByKind(entities)) {
2241
- for (const entityChunk of chunkZDH3DX3C_cjs.chunk(group, chunkSize)) {
2448
+ for (const entityChunk of chunkBSFJMMV3_cjs.chunk(group, chunkSize)) {
2242
2449
  const ids = entityChunk.map((entity) => entity.id);
2243
2450
  const closed = await closeOpenReturning(
2244
2451
  target,
@@ -2263,7 +2470,7 @@ async function flushNodes(target, schema, graphId, entities, recordedRevision) {
2263
2470
  }
2264
2471
  async function flushEdges(target, schema, graphId, entities, recordedRevision) {
2265
2472
  const chunkSize = recordedEdgeChunkSize(target);
2266
- for (const entityChunk of chunkZDH3DX3C_cjs.chunk(entities, chunkSize)) {
2473
+ for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
2267
2474
  const ids = entityChunk.map((entity) => entity.id);
2268
2475
  const closed = await closeOpenReturning(
2269
2476
  target,
@@ -2284,27 +2491,63 @@ async function flushEdges(target, schema, graphId, entities, recordedRevision) {
2284
2491
  );
2285
2492
  }
2286
2493
  }
2494
+ async function getIdentityAssertionRowsByIds(target, schema, graphId, ids) {
2495
+ if (ids.length === 0) return /* @__PURE__ */ new Map();
2496
+ const rows = await target.execute(
2497
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2498
+ SELECT ${IDENTITY_ASSERTION_COLUMNS}
2499
+ FROM ${schema.identityAssertionsTable}
2500
+ WHERE graph_id = ${graphId}
2501
+ AND id IN (${sqlValueList(ids)})
2502
+ `)
2503
+ );
2504
+ return new Map(rows.map((row) => [row.id, row]));
2505
+ }
2506
+ async function flushIdentityAssertions(target, schema, graphId, entities, recordedRevision) {
2507
+ if (entities.length === 0) return;
2508
+ const chunkSize = recordedIdentityAssertionChunkSize(target);
2509
+ for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
2510
+ const ids = entityChunk.map((entity) => entity.id);
2511
+ const closed = await closeOpenReturning(
2512
+ target,
2513
+ schema.recordedIdentityAssertionsTable,
2514
+ graphId,
2515
+ ids,
2516
+ recordedRevision
2517
+ );
2518
+ const afterById = await resolveAfterImages(
2519
+ entityChunk,
2520
+ (missing) => getIdentityAssertionRowsByIds(target, schema, graphId, missing)
2521
+ );
2522
+ await insertRecordedIdentityAssertionRows(
2523
+ target,
2524
+ schema.recordedIdentityAssertionsTable,
2525
+ recordedInsertsFor(afterById, closed),
2526
+ recordedRevision
2527
+ );
2528
+ }
2529
+ }
2287
2530
  async function closeOpenByKind(target, table, graphId, kind, recordedRevision) {
2288
2531
  await executeStatement(
2289
2532
  target,
2290
- chunkU5W4LKZV_cjs.sql`
2533
+ chunkVCRRKBLN_cjs.sql`
2291
2534
  UPDATE ${table}
2292
2535
  SET recorded_to = ${recordedRevision}
2293
2536
  WHERE graph_id = ${graphId}
2294
2537
  AND kind = ${kind}
2295
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2538
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2296
2539
  `
2297
2540
  );
2298
2541
  }
2299
2542
  async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedRevision) {
2300
2543
  await executeStatement(
2301
2544
  target,
2302
- chunkU5W4LKZV_cjs.sql`
2545
+ chunkVCRRKBLN_cjs.sql`
2303
2546
  UPDATE ${schema.recordedEdgesTable}
2304
2547
  SET recorded_to = ${recordedRevision}
2305
2548
  WHERE graph_id = ${graphId}
2306
2549
  AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
2307
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2550
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2308
2551
  `
2309
2552
  );
2310
2553
  }
@@ -2342,7 +2585,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
2342
2585
  }
2343
2586
  async function queryConnectedEdgeIds(target, schema, params) {
2344
2587
  const rows = await target.execute(
2345
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2588
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2346
2589
  SELECT id
2347
2590
  FROM ${schema.edgesTable}
2348
2591
  WHERE graph_id = ${params.graphId}
@@ -2363,9 +2606,9 @@ function normalizedColumnType(value) {
2363
2606
  }
2364
2607
  async function readColumnTypes(backend, table) {
2365
2608
  const rows = backend.dialect === "sqlite" ? await backend.execute(
2366
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`PRAGMA table_info(${chunkU5W4LKZV_cjs.sql.identifier(table)})`)
2609
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`PRAGMA table_info(${chunkVCRRKBLN_cjs.sql.identifier(table)})`)
2367
2610
  ) : await backend.execute(
2368
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2611
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2369
2612
  SELECT column_name AS name, data_type AS type
2370
2613
  FROM information_schema.columns
2371
2614
  WHERE table_schema = current_schema()
@@ -2388,7 +2631,19 @@ function isCompatibleColumnType(dialect, declaredType, kind) {
2388
2631
  if (dialect === "sqlite") return hasSqliteAffinity(declaredType, kind);
2389
2632
  return kind === "revision" ? declaredType === "bigint" : declaredType === "timestamp with time zone";
2390
2633
  }
2391
- function requiredRecordedColumns(schema) {
2634
+ function requiredRecordedColumns(schema, includeIdentity) {
2635
+ const identityColumns = includeIdentity ? [
2636
+ {
2637
+ table: schema.tables.recordedIdentityAssertions,
2638
+ column: "recorded_from",
2639
+ kind: "revision"
2640
+ },
2641
+ {
2642
+ table: schema.tables.recordedIdentityAssertions,
2643
+ column: "recorded_to",
2644
+ kind: "revision"
2645
+ }
2646
+ ] : [];
2392
2647
  return [
2393
2648
  {
2394
2649
  table: schema.tables.recordedNodes,
@@ -2419,11 +2674,12 @@ function requiredRecordedColumns(schema) {
2419
2674
  table: schema.tables.recordedClock,
2420
2675
  column: "recorded_at",
2421
2676
  kind: "wall-time"
2422
- }
2677
+ },
2678
+ ...identityColumns
2423
2679
  ];
2424
2680
  }
2425
- async function assertCurrentRecordedSchema(backend, schema) {
2426
- const requirements = requiredRecordedColumns(schema);
2681
+ async function assertCurrentRecordedSchema(backend, schema, includeIdentity = false) {
2682
+ const requirements = requiredRecordedColumns(schema, includeIdentity);
2427
2683
  const tables = [...new Set(requirements.map((entry) => entry.table))];
2428
2684
  const columnTypes = new Map(
2429
2685
  await Promise.all(
@@ -2432,6 +2688,20 @@ async function assertCurrentRecordedSchema(backend, schema) {
2432
2688
  )
2433
2689
  )
2434
2690
  );
2691
+ const recordedIdentityTable = schema.tables.recordedIdentityAssertions;
2692
+ if (includeIdentity && (columnTypes.get(recordedIdentityTable)?.size ?? 0) === 0) {
2693
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2694
+ "Recorded identity history is not provisioned for this database.",
2695
+ {
2696
+ code: "RECORDED_IDENTITY_SCHEMA_MISSING",
2697
+ dialect: backend.dialect,
2698
+ table: recordedIdentityTable
2699
+ },
2700
+ {
2701
+ suggestion: "Restore the missing recorded identity ledger from backup. If this is confirmed first-time identity enablement with no identity history to preserve, provision the relation through the backend's privileged setup path before reopening with history: true."
2702
+ }
2703
+ );
2704
+ }
2435
2705
  const incompatible = requirements.flatMap((requirement) => {
2436
2706
  const actual = columnTypes.get(requirement.table)?.get(requirement.column);
2437
2707
  if (actual !== void 0 && isCompatibleColumnType(backend.dialect, actual, requirement.kind)) {
@@ -2440,7 +2710,7 @@ async function assertCurrentRecordedSchema(backend, schema) {
2440
2710
  return [{ ...requirement, actual: actual ?? "missing" }];
2441
2711
  });
2442
2712
  if (incompatible.length === 0) return;
2443
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2713
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2444
2714
  "Recorded-time schema is incompatible with history capture.",
2445
2715
  {
2446
2716
  code: "RECORDED_SCHEMA_INCOMPATIBLE",
@@ -2488,7 +2758,7 @@ function edgeRowIdentityKey(row) {
2488
2758
  return edgeIdentityKey(row.graph_id, row.id);
2489
2759
  }
2490
2760
  function recordedCaptureSealedError(details) {
2491
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
2761
+ return new chunkNI72YOJB_cjs.ConfigurationError(
2492
2762
  "Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
2493
2763
  details,
2494
2764
  {
@@ -2519,9 +2789,12 @@ function createRecordedCaptureSession() {
2519
2789
  touchEdge(graphId, id, afterImage) {
2520
2790
  touch({ entity: "edge", graphId, id, afterImage });
2521
2791
  },
2792
+ touchIdentityAssertion(graphId, id, afterImage) {
2793
+ touch({ entity: "identity", graphId, id, afterImage });
2794
+ },
2522
2795
  async flush(target, schema, ownsWriteLock) {
2523
2796
  if (sealed) {
2524
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2797
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2525
2798
  "Recorded-time capture session was already flushed.",
2526
2799
  {},
2527
2800
  {
@@ -2532,7 +2805,7 @@ function createRecordedCaptureSession() {
2532
2805
  sealed = true;
2533
2806
  if (touched.size === 0) return /* @__PURE__ */ new Map();
2534
2807
  const recordedByGraph = /* @__PURE__ */ new Map();
2535
- const byGraph = chunkZDH3DX3C_cjs.groupBy(touched.values(), (entity) => entity.graphId);
2808
+ const byGraph = chunkBSFJMMV3_cjs.groupBy(touched.values(), (entity) => entity.graphId);
2536
2809
  for (const [graphId, entities] of byGraph) {
2537
2810
  const recordedCommit = await allocateRecordedCommit(
2538
2811
  target,
@@ -2547,6 +2820,9 @@ function createRecordedCaptureSession() {
2547
2820
  const edges = entities.filter(
2548
2821
  (entity) => entity.entity === "edge"
2549
2822
  );
2823
+ const identityAssertions = entities.filter(
2824
+ (entity) => entity.entity === "identity"
2825
+ );
2550
2826
  await flushNodes(
2551
2827
  target,
2552
2828
  schema,
@@ -2561,12 +2837,33 @@ function createRecordedCaptureSession() {
2561
2837
  edges,
2562
2838
  recordedCommit.revision
2563
2839
  );
2840
+ await flushIdentityAssertions(
2841
+ target,
2842
+ schema,
2843
+ graphId,
2844
+ identityAssertions,
2845
+ recordedCommit.revision
2846
+ );
2564
2847
  }
2565
2848
  touched.clear();
2566
2849
  return recordedByGraph;
2567
2850
  }
2568
2851
  };
2569
2852
  }
2853
+ var recordedIdentityBindings = /* @__PURE__ */ new WeakMap();
2854
+ function ignoreIdentityTouch() {
2855
+ return;
2856
+ }
2857
+ async function withRecordedIdentityMutationTarget(target, fn) {
2858
+ const binding = recordedIdentityBindings.get(target);
2859
+ if (binding === void 0) {
2860
+ return fn(target, ignoreIdentityTouch);
2861
+ }
2862
+ binding.session.assertOpen();
2863
+ return fn(binding.target, (graphId, id, afterImage) => {
2864
+ binding.session.touchIdentityAssertion(graphId, id, afterImage);
2865
+ });
2866
+ }
2570
2867
  function createRecordedTransactionBackend(target, session, schema) {
2571
2868
  const nodeDispatch = nodeInsertDispatch(target);
2572
2869
  const edgeDispatch = edgeInsertDispatch(target);
@@ -2582,7 +2879,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2582
2879
  await lockRecordedGraphWrite(target, graphId, graphLocks);
2583
2880
  }
2584
2881
  }
2585
- const overlay = chunkEKFUG4G7_cjs.createBackendOverlay(target, {
2882
+ const overlay = chunkXBYVV3MP_cjs.createBackendOverlay(target, {
2586
2883
  ...rawWriteGuards(target, "tx.backend"),
2587
2884
  async insertNode(params) {
2588
2885
  session.assertOpen();
@@ -2639,7 +2936,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2639
2936
  async updateNodeSet(params) {
2640
2937
  session.assertOpen();
2641
2938
  await lockGraph(params.graphId);
2642
- const result = await chunk764JHTLT_cjs.requireDefined(target.updateNodeSet)(params);
2939
+ const result = await chunkN66HCGCY_cjs.requireDefined(target.updateNodeSet)(params);
2643
2940
  for (const row of result.rows) {
2644
2941
  session.touchNode(row.graph_id, row.kind, row.id, row);
2645
2942
  }
@@ -2732,7 +3029,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2732
3029
  async deleteEdgesBatch(params) {
2733
3030
  session.assertOpen();
2734
3031
  await lockGraph(params.graphId);
2735
- await chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params);
3032
+ await chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params);
2736
3033
  for (const id of params.ids) {
2737
3034
  session.touchEdge(params.graphId, id);
2738
3035
  }
@@ -2742,7 +3039,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2742
3039
  async hardDeleteEdgesBatch(params) {
2743
3040
  session.assertOpen();
2744
3041
  await lockGraph(params.graphId);
2745
- await chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
3042
+ await chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
2746
3043
  for (const id of params.ids) {
2747
3044
  session.touchEdge(params.graphId, id);
2748
3045
  }
@@ -2750,6 +3047,8 @@ function createRecordedTransactionBackend(target, session, schema) {
2750
3047
  }
2751
3048
  });
2752
3049
  registerRecordedGraphLockMemo(overlay, graphLocks);
3050
+ recordedIdentityBindings.set(overlay, { target, session });
3051
+ recordedIdentityBindings.set(target, { target, session });
2753
3052
  return overlay;
2754
3053
  }
2755
3054
  function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
@@ -2759,7 +3058,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
2759
3058
  return {
2760
3059
  backend: createRecordedTransactionBackend(target, session, resolvedSchema),
2761
3060
  async flush() {
2762
- return chunkJQXSZHF2_cjs.withRecordedRelationsPrecondition(
3061
+ return chunkBSFJMMV3_cjs.withRecordedRelationsPrecondition(
2763
3062
  session.flush(target, resolvedSchema, ownsWriteLock),
2764
3063
  { dialect: target.dialect, surface: "capture-flush" }
2765
3064
  );
@@ -2780,7 +3079,7 @@ function createRecordedBackend(backend, schema) {
2780
3079
  assertCapturableBackend(backend);
2781
3080
  const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
2782
3081
  const projectedBackend = createGraphBackendProjection(backend);
2783
- return chunkEKFUG4G7_cjs.createBackendOverlay(projectedBackend, {
3082
+ return chunkXBYVV3MP_cjs.createBackendOverlay(projectedBackend, {
2784
3083
  ...rawWriteGuards(backend, "backend"),
2785
3084
  async insertNode(params) {
2786
3085
  return capture((target) => target.insertNode(params));
@@ -2814,7 +3113,7 @@ function createRecordedBackend(backend, schema) {
2814
3113
  return capture((target) => {
2815
3114
  const updateNodeSet = target.updateNodeSet;
2816
3115
  if (updateNodeSet === void 0) {
2817
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
3116
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2818
3117
  "Recorded updateNodeSet capability disappeared inside a transaction",
2819
3118
  { operation: "updateNodeSet" }
2820
3119
  );
@@ -2865,14 +3164,14 @@ function createRecordedBackend(backend, schema) {
2865
3164
  ...backend.deleteEdgesBatch === void 0 ? {} : {
2866
3165
  async deleteEdgesBatch(params) {
2867
3166
  await capture(
2868
- (target) => chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params)
3167
+ (target) => chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params)
2869
3168
  );
2870
3169
  }
2871
3170
  },
2872
3171
  ...backend.hardDeleteEdgesBatch === void 0 ? {} : {
2873
3172
  async hardDeleteEdgesBatch(params) {
2874
3173
  await capture(
2875
- (target) => chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
3174
+ (target) => chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
2876
3175
  );
2877
3176
  }
2878
3177
  },
@@ -2893,814 +3192,32 @@ function createRecordedBackend(backend, schema) {
2893
3192
  });
2894
3193
  }
2895
3194
 
2896
- // src/store/embedding-sync.ts
2897
- var embeddingFieldsCache = /* @__PURE__ */ new WeakMap();
2898
- function getEmbeddingFields(schema) {
2899
- const cached = embeddingFieldsCache.get(schema);
2900
- if (cached) return cached;
2901
- const fields = chunkHAHNRASW_cjs.resolveEmbeddingFields(schema);
2902
- embeddingFieldsCache.set(schema, fields);
2903
- return fields;
2904
- }
2905
- async function syncEmbeddings(ctx, schema, props) {
2906
- const { backend } = ctx;
2907
- if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
2908
- return;
2909
- }
2910
- const embeddingFields = getEmbeddingFields(schema);
2911
- if (embeddingFields.length === 0) {
2912
- return;
2913
- }
2914
- for (const field of embeddingFields) {
2915
- const value = props[field.fieldPath];
2916
- if (isValidEmbeddingValue(value)) {
2917
- await backend.upsertEmbedding({
2918
- graphId: ctx.graphId,
2919
- nodeKind: ctx.nodeKind,
2920
- nodeId: ctx.nodeId,
2921
- fieldPath: field.fieldPath,
2922
- embedding: value,
2923
- dimensions: field.dimensions,
2924
- metric: field.metric,
2925
- indexType: field.indexType
2926
- });
2927
- } else if (value === void 0) {
2928
- await backend.deleteEmbedding({
2929
- graphId: ctx.graphId,
2930
- nodeKind: ctx.nodeKind,
2931
- nodeId: ctx.nodeId,
2932
- fieldPath: field.fieldPath,
2933
- dimensions: field.dimensions,
2934
- metric: field.metric,
2935
- indexType: field.indexType
2936
- });
2937
- }
2938
- }
2939
- }
2940
- async function syncEmbeddingsBatchForKind(args, schema, items) {
2941
- const { graphId, nodeKind, backend } = args;
2942
- if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
2943
- return;
2944
- }
2945
- const embeddingFields = getEmbeddingFields(schema);
2946
- if (embeddingFields.length === 0) {
2947
- return;
2948
- }
2949
- for (const field of embeddingFields) {
2950
- const rows = [];
2951
- const deletionIds = [];
2952
- for (const item of items) {
2953
- const value = item.props[field.fieldPath];
2954
- if (isValidEmbeddingValue(value)) {
2955
- rows.push({ nodeId: item.nodeId, embedding: value });
2956
- } else if (value === void 0) {
2957
- deletionIds.push(item.nodeId);
2958
- }
2959
- }
2960
- if (rows.length > 0) {
2961
- if (backend.upsertEmbeddingBatch === void 0) {
2962
- for (const row of rows) {
2963
- await backend.upsertEmbedding({
2964
- graphId,
2965
- nodeKind,
2966
- nodeId: row.nodeId,
2967
- fieldPath: field.fieldPath,
2968
- embedding: row.embedding,
2969
- dimensions: field.dimensions,
2970
- metric: field.metric,
2971
- indexType: field.indexType
2972
- });
2973
- }
2974
- } else {
2975
- await backend.upsertEmbeddingBatch({
2976
- graphId,
2977
- nodeKind,
2978
- fieldPath: field.fieldPath,
2979
- dimensions: field.dimensions,
2980
- metric: field.metric,
2981
- indexType: field.indexType,
2982
- rows
2983
- });
2984
- }
2985
- }
2986
- if (deletionIds.length > 0 && backend.deleteEmbeddingBatch !== void 0) {
2987
- await backend.deleteEmbeddingBatch({
2988
- graphId,
2989
- nodeKind,
2990
- nodeIds: deletionIds,
2991
- fieldPath: field.fieldPath,
2992
- dimensions: field.dimensions,
2993
- metric: field.metric,
2994
- indexType: field.indexType
2995
- });
2996
- } else {
2997
- for (const nodeId of deletionIds) {
2998
- await backend.deleteEmbedding({
2999
- graphId,
3000
- nodeKind,
3001
- nodeId,
3002
- fieldPath: field.fieldPath,
3003
- dimensions: field.dimensions,
3004
- metric: field.metric,
3005
- indexType: field.indexType
3006
- });
3007
- }
3008
- }
3009
- }
3010
- }
3011
- async function deleteNodeEmbeddings(ctx, schema) {
3012
- const { backend } = ctx;
3013
- if (!backend.deleteEmbedding) {
3014
- return;
3015
- }
3016
- const embeddingFields = getEmbeddingFields(schema);
3017
- if (embeddingFields.length === 0) {
3018
- return;
3019
- }
3020
- for (const field of embeddingFields) {
3021
- await backend.deleteEmbedding({
3022
- graphId: ctx.graphId,
3023
- nodeKind: ctx.nodeKind,
3024
- nodeId: ctx.nodeId,
3025
- fieldPath: field.fieldPath,
3026
- dimensions: field.dimensions,
3027
- metric: field.metric,
3028
- indexType: field.indexType
3029
- });
3030
- }
3031
- }
3032
- function isValidEmbeddingValue(value) {
3033
- if (!Array.isArray(value)) {
3034
- return false;
3035
- }
3036
- return value.every((n) => typeof n === "number" && Number.isFinite(n));
3037
- }
3038
-
3039
- // src/store/fulltext-sync.ts
3040
- var FIELD_SEPARATOR = "\n";
3041
- function resolveCombinedLanguage(fields) {
3042
- return fields[0]?.metadata.language ?? chunkHAHNRASW_cjs.DEFAULT_SEARCHABLE_LANGUAGE;
3043
- }
3044
- function computeFulltextContent(schema, props) {
3045
- const searchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema);
3046
- if (searchableFields.length === 0) return void 0;
3047
- const parts = [];
3048
- for (const field of searchableFields) {
3049
- const value = props[field.fieldPath];
3050
- if (typeof value === "string" && value.length > 0) {
3051
- parts.push(value);
3052
- }
3053
- }
3054
- if (parts.length === 0) return void 0;
3055
- return {
3056
- content: parts.join(FIELD_SEPARATOR),
3057
- language: resolveCombinedLanguage(searchableFields)
3058
- };
3059
- }
3060
- async function syncFulltext(ctx, schema, props) {
3061
- const { backend } = ctx;
3062
- if (!backend.upsertFulltext || !backend.deleteFulltext) {
3063
- return;
3064
- }
3065
- const computed = computeFulltextContent(schema, props);
3066
- if (computed !== void 0) {
3067
- await backend.upsertFulltext({
3068
- graphId: ctx.graphId,
3069
- nodeKind: ctx.nodeKind,
3070
- nodeId: ctx.nodeId,
3071
- content: computed.content,
3072
- language: computed.language
3073
- });
3074
- return;
3075
- }
3076
- if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) return;
3077
- await backend.deleteFulltext({
3078
- graphId: ctx.graphId,
3079
- nodeKind: ctx.nodeKind,
3080
- nodeId: ctx.nodeId
3081
- });
3082
- }
3083
- async function syncFulltextBatchForKind(args, schema, items) {
3084
- const { graphId, nodeKind, backend } = args;
3085
- if (!backend.upsertFulltext || !backend.deleteFulltext) {
3086
- return;
3087
- }
3088
- const rows = [];
3089
- const emptyContentIds = [];
3090
- const hasSearchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0;
3091
- for (const item of items) {
3092
- const computed = computeFulltextContent(schema, item.props);
3093
- if (computed !== void 0) {
3094
- rows.push({
3095
- nodeId: item.nodeId,
3096
- content: computed.content,
3097
- language: computed.language
3098
- });
3099
- } else if (hasSearchableFields) {
3100
- emptyContentIds.push(item.nodeId);
3101
- }
3102
- }
3103
- if (rows.length > 0) {
3104
- if (backend.upsertFulltextBatch === void 0) {
3105
- for (const row of rows) {
3106
- await backend.upsertFulltext({
3107
- graphId,
3108
- nodeKind,
3109
- nodeId: row.nodeId,
3110
- content: row.content,
3111
- language: row.language
3112
- });
3113
- }
3114
- } else {
3115
- await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
3116
- }
3117
- }
3118
- if (emptyContentIds.length > 0) {
3119
- if (backend.deleteFulltextBatch === void 0) {
3120
- for (const nodeId of emptyContentIds) {
3121
- await backend.deleteFulltext({ graphId, nodeKind, nodeId });
3122
- }
3123
- } else {
3124
- await backend.deleteFulltextBatch({
3125
- graphId,
3126
- nodeKind,
3127
- nodeIds: emptyContentIds
3128
- });
3129
- }
3130
- }
3131
- }
3132
- async function deleteNodeFulltext(ctx, schema) {
3133
- const { backend } = ctx;
3134
- if (!backend.deleteFulltext) {
3135
- return;
3136
- }
3137
- if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) {
3138
- return;
3139
- }
3140
- await backend.deleteFulltext({
3141
- graphId: ctx.graphId,
3142
- nodeKind: ctx.nodeKind,
3143
- nodeId: ctx.nodeId
3144
- });
3145
- }
3146
-
3147
- // src/constraints/index.ts
3148
- var UNIQUE_KEY_SEPARATOR = "";
3149
- var UNIQUE_KEY_NULL_MARKER = "";
3150
- function computeUniqueKey(props, fields, collation) {
3151
- const values = fields.map((field) => {
3152
- const value = props[field];
3153
- if (value === void 0 || value === null) {
3154
- return UNIQUE_KEY_NULL_MARKER;
3155
- }
3156
- const stringValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? value.toString() : JSON.stringify(value);
3157
- return collation === "caseInsensitive" ? stringValue.toLowerCase() : stringValue;
3158
- });
3159
- return values.join(UNIQUE_KEY_SEPARATOR);
3160
- }
3161
- function checkWherePredicate(constraint, props) {
3162
- if (!constraint.where) {
3163
- return true;
3164
- }
3165
- const predicateBuilder = buildPredicateContext(props);
3166
- const predicate2 = constraint.where(predicateBuilder);
3167
- return evaluatePredicate(predicate2, props);
3168
- }
3169
- function buildPredicateContext(props) {
3170
- const context = {};
3171
- for (const key of Object.keys(props)) {
3172
- context[key] = {
3173
- isNull: () => ({
3174
- __type: "unique_predicate",
3175
- field: key,
3176
- op: "isNull"
3177
- }),
3178
- isNotNull: () => ({
3179
- __type: "unique_predicate",
3180
- field: key,
3181
- op: "isNotNull"
3182
- })
3183
- };
3184
- }
3185
- return context;
3186
- }
3187
- function evaluatePredicate(predicate2, props) {
3188
- if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
3189
- return true;
3190
- }
3191
- const pred = predicate2;
3192
- if (pred.__type !== "unique_predicate") {
3193
- return true;
3194
- }
3195
- const value = props[pred.field];
3196
- if (pred.op === "isNull") {
3197
- return value === null || value === void 0;
3198
- }
3199
- return chunk764JHTLT_cjs.isPresent(value);
3200
- }
3201
- function getKindsForUniquenessCheck(baseKind, scope, registry) {
3202
- if (scope === "kind") {
3203
- return [baseKind];
3204
- }
3205
- const root = findRootAncestor(baseKind, registry);
3206
- return registry.expandSubClasses(root);
3207
- }
3208
- function findRootAncestor(kind, registry) {
3209
- const ancestors = registry.getAncestors(kind);
3210
- if (ancestors.size === 0) {
3211
- return kind;
3212
- }
3213
- for (const ancestor of ancestors) {
3214
- if (registry.getAncestors(ancestor).size === 0) {
3215
- return ancestor;
3216
- }
3217
- }
3218
- const firstAncestor = [...ancestors][0];
3219
- return firstAncestor ? findRootAncestor(firstAncestor, registry) : kind;
3220
- }
3221
- function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeCount, hasActiveEdge) {
3222
- switch (cardinality) {
3223
- case "many": {
3224
- return void 0;
3225
- }
3226
- case "one": {
3227
- if (existingEdgeCount > 0) {
3228
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3229
- edgeKind,
3230
- fromKind,
3231
- fromId,
3232
- cardinality: "one",
3233
- existingCount: existingEdgeCount
3234
- });
3235
- }
3236
- return void 0;
3237
- }
3238
- case "unique": {
3239
- return void 0;
3240
- }
3241
- case "oneActive": {
3242
- if (hasActiveEdge) {
3243
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3244
- edgeKind,
3245
- fromKind,
3246
- fromId,
3247
- cardinality: "oneActive",
3248
- existingCount: 1
3249
- });
3250
- }
3251
- return void 0;
3252
- }
3253
- }
3254
- }
3255
- function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
3256
- if (existingCount > 0) {
3257
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3258
- edgeKind,
3259
- fromKind,
3260
- fromId,
3261
- cardinality: "unique",
3262
- existingCount
3263
- });
3264
- }
3265
- return void 0;
3266
- }
3267
- function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
3268
- const validFromKinds = registration.from.map((node) => node.kind);
3269
- if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
3270
- return new chunkC4F7VJ5D_cjs.EndpointError({
3271
- edgeKind,
3272
- endpoint: "from",
3273
- actualKind: fromKind,
3274
- expectedKinds: validFromKinds
3275
- });
3276
- }
3277
- const validToKinds = registration.to.map((node) => node.kind);
3278
- if (!registry.isAssignableToAny(toKind, validToKinds)) {
3279
- return new chunkC4F7VJ5D_cjs.EndpointError({
3280
- edgeKind,
3281
- endpoint: "to",
3282
- actualKind: toKind,
3283
- expectedKinds: validToKinds
3284
- });
3285
- }
3286
- return void 0;
3287
- }
3288
- function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
3289
- for (const existingKind of existingKinds) {
3290
- if (registry.areDisjoint(nodeKind, existingKind)) {
3291
- return new chunkC4F7VJ5D_cjs.DisjointError({
3292
- nodeId,
3293
- attemptedKind: nodeKind,
3294
- conflictingKind: existingKind
3295
- });
3296
- }
3297
- }
3298
- return void 0;
3299
- }
3300
-
3301
- // src/store/uniqueness.ts
3302
- function createUniquenessContext(graphId, registry, backend) {
3303
- return { graphId, registry, backend };
3304
- }
3305
- async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
3306
- for (const constraint of constraints) {
3307
- if (!checkWherePredicate(constraint, props)) {
3308
- continue;
3309
- }
3310
- const key = computeUniqueKey(
3311
- props,
3312
- constraint.fields,
3313
- constraint.collation
3314
- );
3315
- const kindsToCheck = getKindsForUniquenessCheck(
3316
- kind,
3317
- constraint.scope,
3318
- ctx.registry
3319
- );
3320
- for (const kindToCheck of kindsToCheck) {
3321
- const existing = await ctx.backend.checkUnique({
3322
- graphId: ctx.graphId,
3323
- nodeKind: kindToCheck,
3324
- constraintName: constraint.name,
3325
- key
3326
- });
3327
- if (existing && existing.node_id !== id) {
3328
- throw new chunkC4F7VJ5D_cjs.UniquenessError({
3329
- constraintName: constraint.name,
3330
- kind: kindToCheck,
3331
- existingId: existing.node_id,
3332
- newId: id,
3333
- fields: constraint.fields
3334
- });
3335
- }
3336
- }
3337
- }
3338
- }
3339
- async function insertUniquenessEntries(ctx, kind, id, props, constraints) {
3340
- for (const constraint of constraints) {
3341
- if (!checkWherePredicate(constraint, props)) {
3342
- continue;
3343
- }
3344
- const key = computeUniqueKey(
3345
- props,
3346
- constraint.fields,
3347
- constraint.collation
3348
- );
3349
- await ctx.backend.insertUnique({
3350
- graphId: ctx.graphId,
3351
- nodeKind: kind,
3352
- constraintName: constraint.name,
3353
- key,
3354
- nodeId: id,
3355
- concreteKind: kind
3356
- });
3357
- }
3358
- }
3359
- async function insertUniquenessEntriesBatch(ctx, items) {
3360
- const entries = [];
3361
- for (const item of items) {
3362
- for (const constraint of item.constraints) {
3363
- if (!checkWherePredicate(constraint, item.props)) {
3364
- continue;
3365
- }
3366
- entries.push({
3367
- graphId: ctx.graphId,
3368
- nodeKind: item.kind,
3369
- constraintName: constraint.name,
3370
- key: computeUniqueKey(
3371
- item.props,
3372
- constraint.fields,
3373
- constraint.collation
3374
- ),
3375
- nodeId: item.id,
3376
- concreteKind: item.kind
3377
- });
3378
- }
3379
- }
3380
- if (entries.length === 0) return;
3381
- if (ctx.backend.insertUniqueBatch !== void 0) {
3382
- await ctx.backend.insertUniqueBatch(entries);
3383
- return;
3384
- }
3385
- for (const entry of entries) {
3386
- await ctx.backend.insertUnique(entry);
3387
- }
3388
- }
3389
- async function deleteUniquenessEntries(ctx, kind, props, constraints) {
3390
- for (const constraint of constraints) {
3391
- if (!checkWherePredicate(constraint, props)) {
3392
- continue;
3393
- }
3394
- const key = computeUniqueKey(
3395
- props,
3396
- constraint.fields,
3397
- constraint.collation
3398
- );
3399
- await ctx.backend.deleteUnique({
3400
- graphId: ctx.graphId,
3401
- nodeKind: kind,
3402
- constraintName: constraint.name,
3403
- key
3404
- });
3405
- }
3406
- }
3407
- async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constraints) {
3408
- const pending = [];
3409
- for (const constraint of constraints) {
3410
- const oldApplies = checkWherePredicate(constraint, oldProps);
3411
- const newApplies = checkWherePredicate(constraint, newProps);
3412
- const oldKey = oldApplies ? computeUniqueKey(oldProps, constraint.fields, constraint.collation) : void 0;
3413
- const newKey = newApplies ? computeUniqueKey(newProps, constraint.fields, constraint.collation) : void 0;
3414
- if (!oldApplies && !newApplies) {
3415
- continue;
3416
- }
3417
- if (oldApplies && newApplies && oldKey === newKey) {
3418
- continue;
3419
- }
3420
- if (newApplies && newKey !== void 0) {
3421
- const kindsToCheck = getKindsForUniquenessCheck(
3422
- kind,
3423
- constraint.scope,
3424
- ctx.registry
3425
- );
3426
- for (const kindToCheck of kindsToCheck) {
3427
- const existing = await ctx.backend.checkUnique({
3428
- graphId: ctx.graphId,
3429
- nodeKind: kindToCheck,
3430
- constraintName: constraint.name,
3431
- key: newKey
3432
- });
3433
- if (existing && existing.node_id !== id) {
3434
- throw new chunkC4F7VJ5D_cjs.UniquenessError({
3435
- constraintName: constraint.name,
3436
- kind: kindToCheck,
3437
- existingId: existing.node_id,
3438
- newId: id,
3439
- fields: constraint.fields
3440
- });
3441
- }
3442
- }
3443
- }
3444
- pending.push({ constraintName: constraint.name, oldKey, newKey });
3445
- }
3446
- for (const mutation of pending) {
3447
- if (mutation.oldKey !== void 0) {
3448
- await ctx.backend.deleteUnique({
3449
- graphId: ctx.graphId,
3450
- nodeKind: kind,
3451
- constraintName: mutation.constraintName,
3452
- key: mutation.oldKey
3453
- });
3454
- }
3455
- }
3456
- for (const mutation of pending) {
3457
- if (mutation.newKey !== void 0) {
3458
- await ctx.backend.insertUnique({
3459
- graphId: ctx.graphId,
3460
- nodeKind: kind,
3461
- constraintName: mutation.constraintName,
3462
- key: mutation.newKey,
3463
- nodeId: id,
3464
- concreteKind: kind
3465
- });
3466
- }
3467
- }
3468
- }
3469
-
3470
- // src/store/operations/node-write-pipeline.ts
3471
- function createNodeWriteContext(graphId, registry, lock) {
3472
- return { graphId, registry, lock };
3473
- }
3474
- function uniquenessContext(ctx, backend) {
3475
- return createUniquenessContext(ctx.graphId, ctx.registry, backend);
3476
- }
3477
- function nodeSyncContext(ctx, kind, id, backend) {
3478
- return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
3479
- }
3480
- async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
3481
- if (policy?.enforceDeleteBehavior === false) return;
3482
- const behavior = args.onDelete ?? "restrict";
3483
- const connectedEdges = await backend.findEdgesConnectedTo({
3484
- graphId: ctx.graphId,
3485
- nodeKind: args.kind,
3486
- nodeId: args.id
3487
- });
3488
- if (connectedEdges.length === 0) return;
3489
- switch (behavior) {
3490
- case "restrict": {
3491
- throw new chunkC4F7VJ5D_cjs.RestrictedDeleteError({
3492
- nodeKind: args.kind,
3493
- nodeId: args.id,
3494
- edgeCount: connectedEdges.length,
3495
- edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
3496
- });
3497
- }
3498
- case "cascade":
3499
- case "disconnect": {
3500
- const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
3501
- if (batchDelete !== void 0) {
3502
- await batchDelete({
3503
- graphId: ctx.graphId,
3504
- ids: connectedEdges.map((edge) => edge.id)
3505
- });
3506
- break;
3507
- }
3508
- for (const edge of connectedEdges) {
3509
- await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
3510
- }
3511
- break;
3512
- }
3513
- }
3514
- }
3515
- async function applyNodeInsertSideEffects(ctx, args, backend) {
3516
- await insertUniquenessEntries(
3517
- uniquenessContext(ctx, backend),
3518
- args.kind,
3519
- args.id,
3520
- args.props,
3521
- args.uniqueConstraints
3522
- );
3523
- await Promise.all([
3524
- syncEmbeddings(
3525
- nodeSyncContext(ctx, args.kind, args.id, backend),
3526
- args.schema,
3527
- args.props
3528
- ),
3529
- syncFulltext(
3530
- nodeSyncContext(ctx, args.kind, args.id, backend),
3531
- args.schema,
3532
- args.props
3533
- )
3534
- ]);
3535
- }
3536
- async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
3537
- if (items.length === 0) return;
3538
- await insertUniquenessEntriesBatch(
3539
- uniquenessContext(ctx, backend),
3540
- items.map((item) => ({
3541
- kind: item.kind,
3542
- id: item.id,
3543
- props: item.props,
3544
- constraints: item.uniqueConstraints
3545
- }))
3546
- );
3547
- const byKind = /* @__PURE__ */ new Map();
3548
- for (const item of items) {
3549
- const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
3550
- group.rows.push({ nodeId: item.id, props: item.props });
3551
- byKind.set(item.kind, group);
3552
- }
3553
- await Promise.all(
3554
- [...byKind.entries()].flatMap(([kind, group]) => {
3555
- const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
3556
- return [
3557
- syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
3558
- syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
3559
- ];
3560
- })
3561
- );
3562
- }
3563
- function parseRowProps(row) {
3564
- return chunkEKFUG4G7_cjs.rowPropsToObject(row.props);
3565
- }
3566
- async function applyNodeUpdate(ctx, args, backend) {
3567
- const { kind, id } = args.existing;
3568
- if (args.existing.deleted_at === void 0) {
3569
- await updateUniquenessEntries(
3570
- uniquenessContext(ctx, backend),
3571
- kind,
3572
- id,
3573
- parseRowProps(args.existing),
3574
- args.validatedProps,
3575
- args.uniqueConstraints
3576
- );
3577
- } else {
3578
- await checkUniquenessConstraints(
3579
- uniquenessContext(ctx, backend),
3580
- kind,
3581
- id,
3582
- args.validatedProps,
3583
- args.uniqueConstraints
3584
- );
3585
- await insertUniquenessEntries(
3586
- uniquenessContext(ctx, backend),
3587
- kind,
3588
- id,
3589
- args.validatedProps,
3590
- args.uniqueConstraints
3591
- );
3592
- }
3593
- const updateParams = {
3594
- graphId: ctx.graphId,
3595
- kind,
3596
- id,
3597
- props: args.validatedProps,
3598
- incrementVersion: true
3599
- };
3600
- if (args.validTo !== void 0) updateParams.validTo = args.validTo;
3601
- if (args.clearDeleted) updateParams.clearDeleted = true;
3602
- const row = await backend.updateNode(updateParams);
3603
- await Promise.all([
3604
- syncEmbeddings(
3605
- nodeSyncContext(ctx, kind, id, backend),
3606
- args.schema,
3607
- args.validatedProps
3608
- ),
3609
- syncFulltext(
3610
- nodeSyncContext(ctx, kind, id, backend),
3611
- args.schema,
3612
- args.validatedProps
3613
- )
3614
- ]);
3615
- return row;
3616
- }
3617
- async function applyNodeSoftDelete(ctx, args, backend, policy) {
3618
- const { kind, id } = args.existing;
3619
- await enforceNodeDeleteBehavior(
3620
- ctx,
3621
- { kind, id, mode: "soft", onDelete: args.onDelete },
3622
- backend,
3623
- policy
3624
- );
3625
- await backend.deleteNode({
3626
- graphId: ctx.graphId,
3627
- kind,
3628
- id
3629
- });
3630
- await deleteUniquenessEntries(
3631
- uniquenessContext(ctx, backend),
3632
- kind,
3633
- parseRowProps(args.existing),
3634
- args.uniqueConstraints
3635
- );
3636
- await deleteNodeEmbeddings(
3637
- nodeSyncContext(ctx, kind, id, backend),
3638
- args.schema
3639
- );
3640
- await deleteNodeFulltext(
3641
- nodeSyncContext(ctx, kind, id, backend),
3642
- args.schema
3643
- );
3644
- }
3645
- async function applyNodeHardDelete(ctx, args, backend) {
3646
- await enforceNodeDeleteBehavior(
3647
- ctx,
3648
- { kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
3649
- backend
3650
- );
3651
- await backend.hardDeleteNode({
3652
- graphId: ctx.graphId,
3653
- kind: args.kind,
3654
- id: args.id
3655
- });
3656
- await deleteNodeEmbeddings(
3657
- nodeSyncContext(ctx, args.kind, args.id, backend),
3658
- args.schema
3659
- );
3660
- }
3661
- async function applyNodeResurrect(ctx, args, backend) {
3662
- const { kind, id } = args.existing;
3663
- const props = parseRowProps(args.existing);
3664
- await checkUniquenessConstraints(
3665
- uniquenessContext(ctx, backend),
3666
- kind,
3667
- id,
3668
- props,
3669
- args.uniqueConstraints
3670
- );
3671
- await insertUniquenessEntries(
3672
- uniquenessContext(ctx, backend),
3673
- kind,
3674
- id,
3675
- props,
3676
- args.uniqueConstraints
3677
- );
3678
- const row = await backend.updateNode({
3679
- graphId: ctx.graphId,
3680
- kind,
3681
- id,
3682
- props,
3683
- incrementVersion: true,
3684
- clearDeleted: true
3685
- });
3686
- await Promise.all([
3687
- syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
3688
- syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
3689
- ]);
3690
- return row;
3195
+ // src/utils/compare.ts
3196
+ function compareStrings(left, right) {
3197
+ if (left < right) return -1;
3198
+ return left > right ? 1 : 0;
3199
+ }
3200
+ function compareCodePoints(left, right) {
3201
+ if (left === right) return 0;
3202
+ let leftIndex = 0;
3203
+ let rightIndex = 0;
3204
+ while (leftIndex < left.length && rightIndex < right.length) {
3205
+ const leftPoint = chunkN66HCGCY_cjs.requireDefined(left.codePointAt(leftIndex));
3206
+ const rightPoint = chunkN66HCGCY_cjs.requireDefined(right.codePointAt(rightIndex));
3207
+ if (leftPoint !== rightPoint) return leftPoint < rightPoint ? -1 : 1;
3208
+ leftIndex += leftPoint > 65535 ? 2 : 1;
3209
+ rightIndex += rightPoint > 65535 ? 2 : 1;
3210
+ }
3211
+ const leftExhausted = leftIndex >= left.length;
3212
+ const rightExhausted = rightIndex >= right.length;
3213
+ if (leftExhausted && rightExhausted) return 0;
3214
+ return leftExhausted ? -1 : 1;
3691
3215
  }
3692
3216
 
3693
- exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
3694
3217
  exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
3695
- exports.STORE_RUNTIME = STORE_RUNTIME;
3696
- exports.TRANSACTION_RUNTIME = TRANSACTION_RUNTIME;
3218
+ exports.IDENTITY_ASSERTION_COLUMNS = IDENTITY_ASSERTION_COLUMNS;
3219
+ exports.IDENTITY_PEER_CLASS_COLUMNS = IDENTITY_PEER_CLASS_COLUMNS;
3697
3220
  exports.advanceRevisionClock = advanceRevisionClock;
3698
- exports.applyNodeHardDelete = applyNodeHardDelete;
3699
- exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
3700
- exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
3701
- exports.applyNodeResurrect = applyNodeResurrect;
3702
- exports.applyNodeSoftDelete = applyNodeSoftDelete;
3703
- exports.applyNodeUpdate = applyNodeUpdate;
3704
3221
  exports.arrayField = arrayField;
3705
3222
  exports.assertCurrentRecordedSchema = assertCurrentRecordedSchema;
3706
3223
  exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
@@ -3708,25 +3225,18 @@ exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
3708
3225
  exports.baseField = baseField;
3709
3226
  exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
3710
3227
  exports.buildPredicateIndex = buildPredicateIndex;
3711
- exports.checkCardinality = checkCardinality;
3712
- exports.checkDisjointness = checkDisjointness;
3713
- exports.checkUniqueEdge = checkUniqueEdge;
3714
- exports.checkUniquenessConstraints = checkUniquenessConstraints;
3715
- exports.checkWherePredicate = checkWherePredicate;
3716
3228
  exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
3229
+ exports.compareCodePoints = compareCodePoints;
3230
+ exports.compareStrings = compareStrings;
3717
3231
  exports.compileFieldValue = compileFieldValue;
3718
3232
  exports.compileKindFilter = compileKindFilter;
3719
3233
  exports.compilePredicateClauses = compilePredicateClauses;
3720
3234
  exports.compilePredicateExpression = compilePredicateExpression;
3721
3235
  exports.compileTemporalFilter = compileTemporalFilter;
3722
- exports.computeFulltextContent = computeFulltextContent;
3723
- exports.computeUniqueKey = computeUniqueKey;
3724
3236
  exports.createFulltextAccessor = createFulltextAccessor;
3725
3237
  exports.createGraphBackendProjection = createGraphBackendProjection;
3726
- exports.createNodeWriteContext = createNodeWriteContext;
3727
3238
  exports.createRecordedBackend = createRecordedBackend;
3728
3239
  exports.createRecordedTransactionScope = createRecordedTransactionScope;
3729
- exports.createUniquenessContext = createUniquenessContext;
3730
3240
  exports.currentReadInstant = currentReadInstant;
3731
3241
  exports.currentReadInstantFor = currentReadInstantFor;
3732
3242
  exports.dateField = dateField;
@@ -3739,13 +3249,17 @@ exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
3739
3249
  exports.fieldRef = fieldRef;
3740
3250
  exports.generateId = generateId;
3741
3251
  exports.getEdgeRowsByIds = getEdgeRowsByIds;
3742
- exports.getEmbeddingFields = getEmbeddingFields;
3743
3252
  exports.getFieldPointer = getFieldPointer;
3744
3253
  exports.getHybridTargetAlias = getHybridTargetAlias;
3745
- exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
3746
3254
  exports.getNodeKindsForAlias = getNodeKindsForAlias;
3747
3255
  exports.getNodeRowsByIds = getNodeRowsByIds;
3748
3256
  exports.getPredicatesForAlias = getPredicatesForAlias;
3257
+ exports.historicalIdentityPeerClassQuery = historicalIdentityPeerClassQuery;
3258
+ exports.historicalIdentityReconstructionCtes = historicalIdentityReconstructionCtes;
3259
+ exports.identityAssertionSnapshotSource = identityAssertionSnapshotSource;
3260
+ exports.identityNodeSnapshotSource = identityNodeSnapshotSource;
3261
+ exports.identityNodeVisibilitySql = identityNodeVisibilitySql;
3262
+ exports.identitySqlCoordinate = identitySqlCoordinate;
3749
3263
  exports.inSubquery = inSubquery;
3750
3264
  exports.isParameterRef = isParameterRef;
3751
3265
  exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
@@ -3765,16 +3279,12 @@ exports.runInsertBatch = runInsertBatch;
3765
3279
  exports.runInsertBatchReturning = runInsertBatchReturning;
3766
3280
  exports.runInsertNoReturn = runInsertNoReturn;
3767
3281
  exports.sqlValueList = sqlValueList;
3768
- exports.storeBackend = storeBackend;
3769
- exports.storeRuntime = storeRuntime;
3770
3282
  exports.stringField = stringField;
3771
3283
  exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
3772
3284
  exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
3773
- exports.transactionBackend = transactionBackend;
3774
- exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
3775
3285
  exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
3776
- exports.validateEdgeEndpoints = validateEdgeEndpoints;
3777
3286
  exports.withPinnedReadInstant = withPinnedReadInstant;
3778
3287
  exports.withRecordedFlushObserver = withRecordedFlushObserver;
3779
- //# sourceMappingURL=chunk-J7LXTUTP.cjs.map
3780
- //# sourceMappingURL=chunk-J7LXTUTP.cjs.map
3288
+ exports.withRecordedIdentityMutationTarget = withRecordedIdentityMutationTarget;
3289
+ //# sourceMappingURL=chunk-XMQSEJCF.cjs.map
3290
+ //# sourceMappingURL=chunk-XMQSEJCF.cjs.map