@nicia-ai/typegraph 0.44.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 (392) 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 -43
  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 -39
  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 -44
  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 -40
  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-XMYJY7NI.js → chunk-2LG2XB2M.js} +3 -3
  44. package/dist/{chunk-XMYJY7NI.js.map → chunk-2LG2XB2M.js.map} +1 -1
  45. package/dist/{chunk-QGKILWGZ.cjs → chunk-2NA5DYLO.cjs} +4 -4
  46. package/dist/{chunk-QGKILWGZ.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
  47. package/dist/{chunk-5MUSU4ZP.cjs → chunk-3DHZCOT7.cjs} +20 -20
  48. package/dist/chunk-3DHZCOT7.cjs.map +1 -0
  49. package/dist/{chunk-OVUUTCPJ.cjs → chunk-4UGOKMI5.cjs} +268 -150
  50. package/dist/chunk-4UGOKMI5.cjs.map +1 -0
  51. package/dist/{chunk-FRHHDHKH.js → chunk-5262ZMTR.js} +26 -5
  52. package/dist/chunk-5262ZMTR.js.map +1 -0
  53. package/dist/{chunk-HOIFFY4M.js → chunk-5763DULU.js} +248 -76
  54. package/dist/chunk-5763DULU.js.map +1 -0
  55. package/dist/{chunk-7G32LIQM.js → chunk-5UVRGXD3.js} +277 -7
  56. package/dist/chunk-5UVRGXD3.js.map +1 -0
  57. package/dist/{chunk-IIT5K7SK.cjs → chunk-62ZP23AW.cjs} +15 -15
  58. package/dist/{chunk-IIT5K7SK.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-QYWINYEA.cjs → chunk-7BQXPCGN.cjs} +830 -170
  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-7GT72YHH.cjs +1979 -0
  66. package/dist/chunk-7GT72YHH.cjs.map +1 -0
  67. package/dist/{chunk-SQRD2CYF.js → chunk-7VQXLT5O.js} +717 -76
  68. package/dist/chunk-7VQXLT5O.js.map +1 -0
  69. package/dist/{chunk-BCP7LLOY.js → chunk-7Z5OR7KO.js} +2706 -625
  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-FMMIX6N4.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-PAW2XUZN.js → chunk-ASTI57H3.js} +3 -3
  80. package/dist/{chunk-PAW2XUZN.js.map → chunk-ASTI57H3.js.map} +1 -1
  81. package/dist/{chunk-FMGEZBAQ.js → chunk-BKCUOV7A.js} +27 -5
  82. package/dist/chunk-BKCUOV7A.js.map +1 -0
  83. package/dist/chunk-BSFJMMV3.cjs +268 -0
  84. package/dist/chunk-BSFJMMV3.cjs.map +1 -0
  85. package/dist/{chunk-63KCKSSH.js → chunk-C23WSN5E.js} +209 -24
  86. package/dist/chunk-C23WSN5E.js.map +1 -0
  87. package/dist/{chunk-JRP3VGHS.js → chunk-CBTIUB76.js} +3 -3
  88. package/dist/{chunk-JRP3VGHS.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-46GDII45.js → chunk-DCQVHAYQ.js} +5 -5
  94. package/dist/{chunk-46GDII45.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-BNUFUFAU.js → chunk-HFHTMECK.js} +7 -7
  104. package/dist/chunk-HFHTMECK.js.map +1 -0
  105. package/dist/{chunk-TFMVL4QH.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-2Y4IFKW7.js → chunk-JXA2ZP2Q.js} +6 -17
  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-K5ELX2GT.js +248 -0
  120. package/dist/chunk-K5ELX2GT.js.map +1 -0
  121. package/dist/chunk-LBJKZXDE.cjs +257 -0
  122. package/dist/chunk-LBJKZXDE.cjs.map +1 -0
  123. package/dist/{chunk-FGO5JFVJ.cjs → chunk-M4BDU5RX.cjs} +12 -12
  124. package/dist/{chunk-FGO5JFVJ.cjs.map → chunk-M4BDU5RX.cjs.map} +1 -1
  125. package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
  126. package/dist/chunk-MSY7FSX4.js.map +1 -0
  127. package/dist/{chunk-ST3LPB2V.cjs → chunk-MUK4BU7K.cjs} +788 -146
  128. package/dist/chunk-MUK4BU7K.cjs.map +1 -0
  129. package/dist/{chunk-MCHP7RHZ.cjs → chunk-MXJDTH5B.cjs} +64 -41
  130. package/dist/chunk-MXJDTH5B.cjs.map +1 -0
  131. package/dist/{chunk-2VLBGQBY.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-EE7N5XXQ.cjs → chunk-NK5Q7UNE.cjs} +10 -21
  140. package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
  141. package/dist/{chunk-PHXITZE4.js → chunk-NMWDXFPH.js} +4 -4
  142. package/dist/{chunk-PHXITZE4.js.map → chunk-NMWDXFPH.js.map} +1 -1
  143. package/dist/{chunk-FSXTPBRN.js → chunk-NQ6BRJBE.js} +416 -850
  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-STQ3BSED.cjs → chunk-PNN7RHVR.cjs} +66 -44
  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-BEFM74L2.js → chunk-QLRESYPU.js} +637 -493
  158. package/dist/chunk-QLRESYPU.js.map +1 -0
  159. package/dist/{chunk-SBPC5IP3.js → chunk-QWX5YA3K.js} +784 -202
  160. package/dist/chunk-QWX5YA3K.js.map +1 -0
  161. package/dist/{chunk-TCRIQMBU.js → chunk-RJS7DECT.js} +8 -9
  162. package/dist/chunk-RJS7DECT.js.map +1 -0
  163. package/dist/{chunk-6JZUSDY2.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-IJTLXNGJ.js → chunk-T4XNKYXB.js} +780 -127
  168. package/dist/chunk-T4XNKYXB.js.map +1 -0
  169. package/dist/{chunk-PDGEXGS6.cjs → chunk-TQR4KBY2.cjs} +354 -182
  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-NN3QSOVS.cjs → chunk-U5SON7R2.cjs} +27 -27
  174. package/dist/{chunk-NN3QSOVS.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
  175. package/dist/{chunk-A2I2XO52.cjs → chunk-U63GDNRC.cjs} +32 -26
  176. package/dist/chunk-U63GDNRC.cjs.map +1 -0
  177. package/dist/{chunk-YNULOIR5.cjs → chunk-UDISNXDL.cjs} +64 -43
  178. package/dist/chunk-UDISNXDL.cjs.map +1 -0
  179. package/dist/{chunk-GWEDD3DH.js → chunk-UV3SN74I.js} +5 -5
  180. package/dist/{chunk-GWEDD3DH.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-EFELJVLA.js → chunk-VGTJPTIC.js} +28 -5
  184. package/dist/chunk-VGTJPTIC.js.map +1 -0
  185. package/dist/chunk-VQH4VAWD.cjs +12 -0
  186. package/dist/{chunk-EPTSMFH7.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-3PRKZW6D.cjs → chunk-XBYVV3MP.cjs} +60 -5
  194. package/dist/chunk-XBYVV3MP.cjs.map +1 -0
  195. package/dist/{chunk-GFRGG2US.cjs → chunk-XCAGZAKP.cjs} +7 -7
  196. package/dist/{chunk-GFRGG2US.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
  197. package/dist/{chunk-XR4YZFKW.cjs → chunk-XDF2UPEQ.cjs} +3864 -1783
  198. package/dist/chunk-XDF2UPEQ.cjs.map +1 -0
  199. package/dist/{chunk-7V2FGGI2.cjs → chunk-XMQSEJCF.cjs} +632 -1080
  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-66UVLHQA.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-HJH3RMXG.cjs → chunk-YAAM3M2S.cjs} +10 -10
  210. package/dist/{chunk-HJH3RMXG.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
  211. package/dist/{chunk-ATLN63JA.js → chunk-YBFHZUXX.js} +6 -6
  212. package/dist/{chunk-ATLN63JA.js.map → chunk-YBFHZUXX.js.map} +1 -1
  213. package/dist/{chunk-K3BUWSFR.js → chunk-YDFDBE6D.js} +119 -6
  214. package/dist/chunk-YDFDBE6D.js.map +1 -0
  215. package/dist/{chunk-OSZPLZIV.cjs → chunk-YVWGEQJE.cjs} +318 -132
  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 -41
  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 -9
  223. package/dist/{ddl-eWg7hx6R.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
  224. package/dist/{ddl-D5369kOY.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
  225. package/dist/graph-extension/index.cjs +26 -23
  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 -8
  229. package/dist/graph-merge/index.cjs +2459 -655
  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 -468
  234. package/dist/graph-merge/index.js.map +1 -1
  235. package/dist/{index-By89Sezh.d.ts → index-BSHvKfok.d.ts} +221 -10
  236. package/dist/{index-DcQ3Sxs-.d.cts → index-DxaYCv8Y.d.cts} +221 -10
  237. package/dist/index.cjs +330 -269
  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 -50
  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 -50
  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 -24
  252. package/dist/interchange/index.js.map +1 -1
  253. package/dist/{manager-B0KjKE93.d.ts → manager-CfZAimti.d.ts} +36 -5
  254. package/dist/{manager-Cn0NFIhN.d.cts → manager-HGk6E_HW.d.cts} +36 -5
  255. package/dist/{materialize-indexes-BD4V3svD.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
  256. package/dist/{materialize-indexes-DVRhd5h4.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
  257. package/dist/{postgres-DaEWvN4x.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
  258. package/dist/{postgres-u0a0HN2D.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 -49
  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 -22
  273. package/dist/{searchable-CnYEancP.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
  274. package/dist/{searchable-BT7j9_IK.d.cts → searchable-CIje5XYD.d.cts} +1 -2
  275. package/dist/{sqlite-BrMoSsI7.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
  276. package/dist/{sqlite-CHhZUyO5.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
  277. package/dist/{store-view-Bvdku0Ht.d.ts → store-DawaWWjJ.d.ts} +3145 -2556
  278. package/dist/{store-view-w-md0nQ4.d.cts → store-RwTJx8LX.d.cts} +3145 -2556
  279. package/dist/{temporal-BCORwUau.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
  280. package/dist/{temporal--x9T8K4S.d.ts → temporal-BtM4UALv.d.ts} +1 -1
  281. package/dist/{types-6-WJmSD4.d.cts → types-CoIx8HX5.d.cts} +1 -1
  282. package/dist/{types-Cjvkj0jA.d.ts → types-HkveCCx0.d.cts} +866 -21
  283. package/dist/{types-Cjvkj0jA.d.cts → types-HkveCCx0.d.ts} +866 -21
  284. package/dist/{types-COODtTJU.d.ts → types-KFfk-8Ah.d.ts} +1 -1
  285. package/dist/{where-CUQmCR6d.d.cts → where--fk7_0kv.d.cts} +1 -1
  286. package/dist/{where-5xVawAwL.d.ts → where-ws5hf-Ov.d.ts} +1 -1
  287. package/package.json +1 -1
  288. package/dist/chunk-2BIG7U6E.cjs +0 -83
  289. package/dist/chunk-2BIG7U6E.cjs.map +0 -1
  290. package/dist/chunk-2L54C2C2.js +0 -144
  291. package/dist/chunk-2L54C2C2.js.map +0 -1
  292. package/dist/chunk-2VLBGQBY.cjs.map +0 -1
  293. package/dist/chunk-2WDD2NO3.js +0 -59
  294. package/dist/chunk-2WDD2NO3.js.map +0 -1
  295. package/dist/chunk-2Y4IFKW7.js.map +0 -1
  296. package/dist/chunk-35S6P5ZU.js +0 -27
  297. package/dist/chunk-35S6P5ZU.js.map +0 -1
  298. package/dist/chunk-3PRKZW6D.cjs.map +0 -1
  299. package/dist/chunk-4MB3AQAQ.js.map +0 -1
  300. package/dist/chunk-4SZ6XPTG.cjs +0 -12
  301. package/dist/chunk-5MUSU4ZP.cjs.map +0 -1
  302. package/dist/chunk-63KCKSSH.js.map +0 -1
  303. package/dist/chunk-66UVLHQA.cjs.map +0 -1
  304. package/dist/chunk-6JZUSDY2.cjs.map +0 -1
  305. package/dist/chunk-764JHTLT.cjs +0 -15
  306. package/dist/chunk-764JHTLT.cjs.map +0 -1
  307. package/dist/chunk-7G32LIQM.js.map +0 -1
  308. package/dist/chunk-7V2FGGI2.cjs.map +0 -1
  309. package/dist/chunk-A2I2XO52.cjs.map +0 -1
  310. package/dist/chunk-A4PBRX4C.cjs +0 -100
  311. package/dist/chunk-A4PBRX4C.cjs.map +0 -1
  312. package/dist/chunk-ACSVZPK7.cjs.map +0 -1
  313. package/dist/chunk-ALFUGRYB.cjs +0 -1282
  314. package/dist/chunk-ALFUGRYB.cjs.map +0 -1
  315. package/dist/chunk-B75XRV3O.js +0 -125
  316. package/dist/chunk-B75XRV3O.js.map +0 -1
  317. package/dist/chunk-BCP7LLOY.js.map +0 -1
  318. package/dist/chunk-BEFM74L2.js.map +0 -1
  319. package/dist/chunk-BNUFUFAU.js.map +0 -1
  320. package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
  321. package/dist/chunk-CPEL3YIR.cjs.map +0 -1
  322. package/dist/chunk-D7PG5D5K.js.map +0 -1
  323. package/dist/chunk-DI74SMXS.cjs +0 -29
  324. package/dist/chunk-DI74SMXS.cjs.map +0 -1
  325. package/dist/chunk-DK2S42XB.js +0 -77
  326. package/dist/chunk-DK2S42XB.js.map +0 -1
  327. package/dist/chunk-DRACN6XG.js +0 -27
  328. package/dist/chunk-DRACN6XG.js.map +0 -1
  329. package/dist/chunk-EE7N5XXQ.cjs.map +0 -1
  330. package/dist/chunk-EFELJVLA.js.map +0 -1
  331. package/dist/chunk-EPTSMFH7.cjs +0 -12
  332. package/dist/chunk-EQ7JKLZO.cjs +0 -157
  333. package/dist/chunk-EQ7JKLZO.cjs.map +0 -1
  334. package/dist/chunk-FJMPR3OH.cjs.map +0 -1
  335. package/dist/chunk-FMGEZBAQ.js.map +0 -1
  336. package/dist/chunk-FMMIX6N4.js.map +0 -1
  337. package/dist/chunk-FRHHDHKH.js.map +0 -1
  338. package/dist/chunk-FSXTPBRN.js.map +0 -1
  339. package/dist/chunk-G6Q5UM7U.js.map +0 -1
  340. package/dist/chunk-GYA4JRP5.js.map +0 -1
  341. package/dist/chunk-HOHAJ2NR.cjs +0 -61
  342. package/dist/chunk-HOHAJ2NR.cjs.map +0 -1
  343. package/dist/chunk-HOIFFY4M.js.map +0 -1
  344. package/dist/chunk-IIMQJYAM.js +0 -81
  345. package/dist/chunk-IIMQJYAM.js.map +0 -1
  346. package/dist/chunk-IJTLXNGJ.js.map +0 -1
  347. package/dist/chunk-ITE4IXAK.js +0 -25
  348. package/dist/chunk-ITE4IXAK.js.map +0 -1
  349. package/dist/chunk-K3BUWSFR.js.map +0 -1
  350. package/dist/chunk-KCO5EFJU.js +0 -79
  351. package/dist/chunk-KCO5EFJU.js.map +0 -1
  352. package/dist/chunk-KKYELPZ2.cjs +0 -83
  353. package/dist/chunk-KKYELPZ2.cjs.map +0 -1
  354. package/dist/chunk-MCHP7RHZ.cjs.map +0 -1
  355. package/dist/chunk-MIJKEVV7.js.map +0 -1
  356. package/dist/chunk-NCX65HBY.cjs +0 -1396
  357. package/dist/chunk-NCX65HBY.cjs.map +0 -1
  358. package/dist/chunk-OSZPLZIV.cjs.map +0 -1
  359. package/dist/chunk-OVUUTCPJ.cjs.map +0 -1
  360. package/dist/chunk-PDGEXGS6.cjs.map +0 -1
  361. package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
  362. package/dist/chunk-QMQLUA66.js +0 -12
  363. package/dist/chunk-QMQLUA66.js.map +0 -1
  364. package/dist/chunk-QYWINYEA.cjs.map +0 -1
  365. package/dist/chunk-S4KQ5LV4.js.map +0 -1
  366. package/dist/chunk-SBPC5IP3.js.map +0 -1
  367. package/dist/chunk-SJDMVITW.cjs.map +0 -1
  368. package/dist/chunk-SNXVDZAJ.js.map +0 -1
  369. package/dist/chunk-SQRD2CYF.js.map +0 -1
  370. package/dist/chunk-ST3LPB2V.cjs.map +0 -1
  371. package/dist/chunk-STQ3BSED.cjs.map +0 -1
  372. package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
  373. package/dist/chunk-TCRIQMBU.js.map +0 -1
  374. package/dist/chunk-TDXIBCGY.cjs.map +0 -1
  375. package/dist/chunk-TFMVL4QH.js.map +0 -1
  376. package/dist/chunk-TRF4EBJT.cjs +0 -30
  377. package/dist/chunk-TRF4EBJT.cjs.map +0 -1
  378. package/dist/chunk-TVLKA4AY.js +0 -94
  379. package/dist/chunk-TVLKA4AY.js.map +0 -1
  380. package/dist/chunk-UR7W5YQK.js.map +0 -1
  381. package/dist/chunk-VITTKBWF.js +0 -1263
  382. package/dist/chunk-VITTKBWF.js.map +0 -1
  383. package/dist/chunk-WBUFJ7BS.cjs +0 -131
  384. package/dist/chunk-WBUFJ7BS.cjs.map +0 -1
  385. package/dist/chunk-XR4YZFKW.cjs.map +0 -1
  386. package/dist/chunk-YNULOIR5.cjs.map +0 -1
  387. package/dist/chunk-ZDH3DX3C.cjs +0 -30
  388. package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
  389. package/dist/chunk-ZTAJL4DT.cjs +0 -85
  390. package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
  391. package/dist/define-graph-DVF-oN1i.d.cts +0 -173
  392. package/dist/define-graph-SvYXOl78.d.ts +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 chunk3PRKZW6D_cjs = require('./chunk-3PRKZW6D.cjs');
6
- var chunkEQ7JKLZO_cjs = require('./chunk-EQ7JKLZO.cjs');
7
- var chunkWBUFJ7BS_cjs = require('./chunk-WBUFJ7BS.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) {
@@ -1139,6 +1110,7 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1139
1110
  "insertNodesBatch",
1140
1111
  "insertNodesBatchReturning",
1141
1112
  "updateNode",
1113
+ "updateNodeSet",
1142
1114
  "deleteNode",
1143
1115
  "hardDeleteNode",
1144
1116
  "getNode",
@@ -1161,10 +1133,12 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1161
1133
  "countNodesByKind",
1162
1134
  "findEdgesByKind",
1163
1135
  "findEdgesByEndpointSet",
1136
+ "findEdgesByHeterogeneousEndpointSet",
1164
1137
  "countEdgesByKind",
1165
1138
  "insertUnique",
1166
1139
  "insertUniqueBatch",
1167
1140
  "deleteUnique",
1141
+ "hardDeleteUniquesByNodeIds",
1168
1142
  "checkUnique",
1169
1143
  "checkUniqueBatch",
1170
1144
  "getActiveSchema",
@@ -1172,11 +1146,13 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1172
1146
  "commitSchemaVersion",
1173
1147
  "commitSchemaVersionIfKindsEmpty",
1174
1148
  "lockSchemaVersionForWrite",
1149
+ "commitSchemaVersionWithPreflight",
1175
1150
  "setActiveVersion",
1176
1151
  "schemaWriteTransaction",
1177
1152
  "upsertEmbedding",
1178
1153
  "upsertEmbeddingBatch",
1179
1154
  "deleteEmbedding",
1155
+ "deleteEmbeddingBatch",
1180
1156
  "vectorSearch",
1181
1157
  "createVectorIndex",
1182
1158
  "dropVectorIndex",
@@ -1209,7 +1185,12 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
1209
1185
  "assertVectorSlotsInitialized",
1210
1186
  "deleteVectorSlotContribution",
1211
1187
  "verifyContributions",
1188
+ "repairContributions",
1189
+ "probeContributions",
1190
+ "rebuildContribution",
1212
1191
  "ensureFulltextTable",
1192
+ "ensureIdentityTables",
1193
+ "identityTableDdl",
1213
1194
  "getReconciliationMarker",
1214
1195
  "setReconciliationMarker",
1215
1196
  "clearGraph",
@@ -1230,7 +1211,9 @@ function projectBackendMembers(backend, keys) {
1230
1211
  if (!Reflect.has(backend, key)) return [];
1231
1212
  return [[key, Reflect.get(backend, key)]];
1232
1213
  });
1233
- return Object.fromEntries(entries);
1214
+ const projection = Object.fromEntries(entries);
1215
+ chunkXBYVV3MP_cjs.inheritSerializedTransactionResource(projection, backend);
1216
+ return projection;
1234
1217
  }
1235
1218
  function createGraphBackendProjection(backend) {
1236
1219
  return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
@@ -1240,17 +1223,17 @@ function createGraphBackendProjection(backend) {
1240
1223
  function nodeInsertDispatch(backend) {
1241
1224
  return {
1242
1225
  one: (params) => backend.insertNode(params),
1243
- oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodeNoReturn)(params),
1244
- batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatch)(params),
1245
- 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)
1246
1229
  };
1247
1230
  }
1248
1231
  function edgeInsertDispatch(backend) {
1249
1232
  return {
1250
1233
  one: (params) => backend.insertEdge(params),
1251
- oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
1252
- batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatch)(params),
1253
- 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)
1254
1237
  };
1255
1238
  }
1256
1239
  async function runInsertNoReturn(dispatch, params) {
@@ -1271,6 +1254,7 @@ async function runInsertBatch(dispatch, params) {
1271
1254
  }
1272
1255
  }
1273
1256
  async function runInsertBatchReturning(dispatch, params) {
1257
+ if (params.length === 0) return [];
1274
1258
  if (dispatch.batchReturning !== void 0) {
1275
1259
  return dispatch.batchReturning(params);
1276
1260
  }
@@ -1281,6 +1265,174 @@ async function runInsertBatchReturning(dispatch, params) {
1281
1265
  return rows;
1282
1266
  }
1283
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
+
1284
1436
  // src/query/compiler/predicates.ts
1285
1437
  var COMPARISON_OP_SQL = {
1286
1438
  eq: "=",
@@ -1294,35 +1446,35 @@ function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
1294
1446
  if (cteColumnPrefix !== void 0) {
1295
1447
  const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
1296
1448
  if (field.path.length === 1 && field.path[0] === "id") {
1297
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}id`);
1449
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}id`);
1298
1450
  }
1299
1451
  if (field.path.length === 1 && field.path[0] === "kind") {
1300
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}kind`);
1452
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}kind`);
1301
1453
  }
1302
1454
  if (field.path.length > 0 && field.path[0] === "props") {
1303
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}props`);
1455
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}props`);
1304
1456
  }
1305
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
1457
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
1306
1458
  }
1307
1459
  const prefix = field.alias;
1308
1460
  const qualifier = cteAlias ? `${cteAlias}.` : "";
1309
1461
  if (field.path.length === 1 && field.path[0] === "id") {
1310
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_id`);
1462
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_id`);
1311
1463
  }
1312
1464
  if (field.path.length === 1 && field.path[0] === "kind") {
1313
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_kind`);
1465
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_kind`);
1314
1466
  }
1315
1467
  if (field.path.length > 0 && field.path[0] === "props") {
1316
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_props`);
1468
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_props`);
1317
1469
  }
1318
- return chunkU5W4LKZV_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
1470
+ return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
1319
1471
  }
1320
1472
  function getFieldPointer(field) {
1321
1473
  if (field.jsonPointer !== void 0) {
1322
1474
  return field.jsonPointer;
1323
1475
  }
1324
1476
  if (field.path.length > 1 && field.path[0] === "props") {
1325
- return chunkTDXIBCGY_cjs.jsonPointer(field.path.slice(1));
1477
+ return chunkA7J2YDDI_cjs.jsonPointer(field.path.slice(1));
1326
1478
  }
1327
1479
  return void 0;
1328
1480
  }
@@ -1401,7 +1553,7 @@ function resolveLiteralValueTypes(literals) {
1401
1553
  }
1402
1554
  }
1403
1555
  if (resolved.size > 1) {
1404
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1556
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1405
1557
  "Mixed literal value types are not supported in predicates",
1406
1558
  { valueTypes: [...resolved] }
1407
1559
  );
@@ -1435,9 +1587,9 @@ function convertValueForSql(value, dialect) {
1435
1587
  }
1436
1588
  function compileStringPattern(op, pattern) {
1437
1589
  const escaped = pattern.replaceAll(
1438
- chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER,
1439
- `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}`
1440
- ).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}_`);
1441
1593
  switch (op) {
1442
1594
  case "contains": {
1443
1595
  return `%${escaped}%`;
@@ -1458,22 +1610,22 @@ function compileStringPattern(op, pattern) {
1458
1610
  }
1459
1611
  }
1460
1612
  function escapeLikePatternParameter(parameter) {
1461
- const doubledEscape = `${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}${chunkU5W4LKZV_cjs.LIKE_ESCAPE_CHARACTER}`;
1462
- 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}_`})`;
1463
1615
  }
1464
1616
  function compileParameterizedStringPattern(op, parameter) {
1465
1617
  switch (op) {
1466
1618
  case "contains": {
1467
1619
  const escaped = escapeLikePatternParameter(parameter);
1468
- return chunkU5W4LKZV_cjs.sql`'%' || ${escaped} || '%'`;
1620
+ return chunkVCRRKBLN_cjs.sql`'%' || ${escaped} || '%'`;
1469
1621
  }
1470
1622
  case "startsWith": {
1471
1623
  const escaped = escapeLikePatternParameter(parameter);
1472
- return chunkU5W4LKZV_cjs.sql`${escaped} || '%'`;
1624
+ return chunkVCRRKBLN_cjs.sql`${escaped} || '%'`;
1473
1625
  }
1474
1626
  case "endsWith": {
1475
1627
  const escaped = escapeLikePatternParameter(parameter);
1476
- return chunkU5W4LKZV_cjs.sql`'%' || ${escaped}`;
1628
+ return chunkVCRRKBLN_cjs.sql`'%' || ${escaped}`;
1477
1629
  }
1478
1630
  case "like":
1479
1631
  case "ilike": {
@@ -1500,18 +1652,18 @@ function compilePredicateExpression(expr, ctx) {
1500
1652
  cteColumnPrefix
1501
1653
  );
1502
1654
  if (isParameterRef(expr.pattern)) {
1503
- 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)}`;
1504
1656
  const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
1505
1657
  if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1506
1658
  return dialect.ilike(field, pattern2);
1507
1659
  }
1508
- return chunkU5W4LKZV_cjs.sql`${field} LIKE ${pattern2} ${chunkU5W4LKZV_cjs.likeEscapeClause}`;
1660
+ return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern2} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
1509
1661
  }
1510
1662
  const pattern = compileStringPattern(expr.op, expr.pattern);
1511
1663
  if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1512
1664
  return dialect.ilike(field, pattern);
1513
1665
  }
1514
- return chunkU5W4LKZV_cjs.sql`${field} LIKE ${pattern} ${chunkU5W4LKZV_cjs.likeEscapeClause}`;
1666
+ return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
1515
1667
  }
1516
1668
  case "null_check": {
1517
1669
  const field = compileFieldTextValue(
@@ -1521,7 +1673,7 @@ function compilePredicateExpression(expr, ctx) {
1521
1673
  void 0,
1522
1674
  cteColumnPrefix
1523
1675
  );
1524
- 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`;
1525
1677
  }
1526
1678
  case "between": {
1527
1679
  const lowerIsParam = isParameterRef(expr.lower);
@@ -1531,7 +1683,7 @@ function compilePredicateExpression(expr, ctx) {
1531
1683
  if (!upperIsParam) boundsForType.push(expr.upper);
1532
1684
  const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
1533
1685
  if (valueType === "array" || valueType === "object") {
1534
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1686
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1535
1687
  "Between comparisons are not supported for JSON arrays or objects"
1536
1688
  );
1537
1689
  }
@@ -1543,25 +1695,25 @@ function compilePredicateExpression(expr, ctx) {
1543
1695
  void 0,
1544
1696
  cteColumnPrefix
1545
1697
  );
1546
- const lower = lowerIsParam ? chunkU5W4LKZV_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
1547
- const upper = upperIsParam ? chunkU5W4LKZV_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
1548
- 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}`;
1549
1701
  }
1550
1702
  case "and": {
1551
1703
  const parts = expr.predicates.map(
1552
1704
  (p) => compilePredicateExpression(p, ctx)
1553
1705
  );
1554
- 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 `)})`;
1555
1707
  }
1556
1708
  case "or": {
1557
1709
  const parts = expr.predicates.map(
1558
1710
  (p) => compilePredicateExpression(p, ctx)
1559
1711
  );
1560
- 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 `)})`;
1561
1713
  }
1562
1714
  case "not": {
1563
1715
  const inner = compilePredicateExpression(expr.predicate, ctx);
1564
- return chunkU5W4LKZV_cjs.sql`NOT (${inner})`;
1716
+ return chunkVCRRKBLN_cjs.sql`NOT (${inner})`;
1565
1717
  }
1566
1718
  case "array_op": {
1567
1719
  return compileArrayPredicate(expr, dialect, cteColumnPrefix);
@@ -1584,7 +1736,7 @@ function compilePredicateExpression(expr, ctx) {
1584
1736
  }
1585
1737
  }
1586
1738
  }
1587
- var STRUCTURAL_PREDICATE_NOOP = chunkU5W4LKZV_cjs.sql.raw("1=1");
1739
+ var STRUCTURAL_PREDICATE_NOOP = chunkVCRRKBLN_cjs.sql.raw("1=1");
1588
1740
  function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1589
1741
  if (isParameterRef(expr.right)) {
1590
1742
  const parameterValueType = resolveParameterValueType(expr.left, expr.right);
@@ -1607,15 +1759,15 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1607
1759
  }
1608
1760
  const opSql2 = COMPARISON_OP_SQL[expr.op];
1609
1761
  if (!opSql2) {
1610
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1762
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1611
1763
  `Comparison operation "${expr.op}" is not supported for parameterized predicates`
1612
1764
  );
1613
1765
  }
1614
- 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)}`;
1615
1767
  }
1616
1768
  const valueType = resolveComparisonValueType(expr.left, expr.right);
1617
1769
  if (valueType === "array" || valueType === "object") {
1618
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1770
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1619
1771
  `Comparison operation "${expr.op}" is not supported for ${valueType} values`
1620
1772
  );
1621
1773
  }
@@ -1630,7 +1782,7 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1630
1782
  if (expr.op === "in" || expr.op === "notIn") {
1631
1783
  const values = Array.isArray(expr.right) ? expr.right : [expr.right];
1632
1784
  if (values.length === 0) {
1633
- 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");
1634
1786
  }
1635
1787
  const convertedValues = values.map(
1636
1788
  (value) => convertValueForSql(value.value, dialect)
@@ -1638,19 +1790,19 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1638
1790
  return dialect.inList(left, convertedValues, expr.op === "notIn");
1639
1791
  }
1640
1792
  const right = expr.right;
1641
- const rightValue = Array.isArray(right) ? chunk764JHTLT_cjs.requireDefined(right[0]) : right;
1793
+ const rightValue = Array.isArray(right) ? chunkN66HCGCY_cjs.requireDefined(right[0]) : right;
1642
1794
  const convertedRight = convertValueForSql(rightValue.value, dialect);
1643
1795
  const opSql = COMPARISON_OP_SQL[expr.op];
1644
1796
  if (!opSql) {
1645
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1797
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1646
1798
  `Comparison operation "${expr.op}" is not supported`
1647
1799
  );
1648
1800
  }
1649
- return chunkU5W4LKZV_cjs.sql`${left} ${chunkU5W4LKZV_cjs.sql.raw(opSql)} ${convertedRight}`;
1801
+ return chunkVCRRKBLN_cjs.sql`${left} ${chunkVCRRKBLN_cjs.sql.raw(opSql)} ${convertedRight}`;
1650
1802
  }
1651
1803
  function compileListParameterPredicate(left, parameterName, elementType, negated, dialect) {
1652
1804
  if (elementType === "array" || elementType === "object" || elementType === "embedding") {
1653
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1805
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1654
1806
  `IN/NOT IN is not supported for ${elementType} values`,
1655
1807
  { valueType: elementType },
1656
1808
  {
@@ -1658,7 +1810,7 @@ function compileListParameterPredicate(left, parameterName, elementType, negated
1658
1810
  }
1659
1811
  );
1660
1812
  }
1661
- return dialect.inListParameter(left, chunkU5W4LKZV_cjs.sql.placeholder(parameterName), {
1813
+ return dialect.inListParameter(left, chunkVCRRKBLN_cjs.sql.placeholder(parameterName), {
1662
1814
  negated,
1663
1815
  elementType
1664
1816
  });
@@ -1674,30 +1826,30 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1674
1826
  const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
1675
1827
  switch (expr.op) {
1676
1828
  case "isEmpty": {
1677
- 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)`;
1678
1830
  }
1679
1831
  case "isNotEmpty": {
1680
- 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)`;
1681
1833
  }
1682
1834
  case "lengthEq": {
1683
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1835
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1684
1836
  }
1685
1837
  case "lengthGt": {
1686
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1838
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1687
1839
  }
1688
1840
  case "lengthGte": {
1689
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1841
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1690
1842
  }
1691
1843
  case "lengthLt": {
1692
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1844
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1693
1845
  }
1694
1846
  case "lengthLte": {
1695
- return chunkU5W4LKZV_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1847
+ return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1696
1848
  }
1697
1849
  case "contains": {
1698
1850
  const value = values[0];
1699
1851
  if (value === void 0) {
1700
- return chunkU5W4LKZV_cjs.sql.raw("1=0");
1852
+ return chunkVCRRKBLN_cjs.sql.raw("1=0");
1701
1853
  }
1702
1854
  return dialect.jsonArrayContains(field, value);
1703
1855
  }
@@ -1711,7 +1863,7 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1711
1863
  }
1712
1864
  function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1713
1865
  const basePointer = getFieldPointer(expr.field);
1714
- const pointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, expr.pointer);
1866
+ const pointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, expr.pointer);
1715
1867
  const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
1716
1868
  switch (expr.op) {
1717
1869
  case "hasKey":
@@ -1720,13 +1872,13 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1720
1872
  }
1721
1873
  case "pathEquals": {
1722
1874
  if (!expr.value) {
1723
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1875
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1724
1876
  "pathEquals requires a comparison value"
1725
1877
  );
1726
1878
  }
1727
1879
  const valueType = resolvePredicateValueType(expr.valueType, expr.value);
1728
1880
  if (valueType === "array" || valueType === "object") {
1729
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1881
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1730
1882
  "pathEquals is not supported for JSON arrays or objects"
1731
1883
  );
1732
1884
  }
@@ -1738,11 +1890,11 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1738
1890
  pointer,
1739
1891
  cteColumnPrefix
1740
1892
  );
1741
- return chunkU5W4LKZV_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1893
+ return chunkVCRRKBLN_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1742
1894
  }
1743
1895
  case "pathContains": {
1744
1896
  if (!expr.value) {
1745
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1897
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1746
1898
  "pathContains requires a comparison value"
1747
1899
  );
1748
1900
  }
@@ -1770,12 +1922,12 @@ function compileAggregatePredicate(expr, dialect) {
1770
1922
  const aggregate = compileAggregateExpr(expr.aggregate, dialect);
1771
1923
  const op = COMPARISON_OP_SQL[expr.op];
1772
1924
  if (!op) {
1773
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1925
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1774
1926
  `Comparison operation "${expr.op}" is not supported for aggregate predicates`
1775
1927
  );
1776
1928
  }
1777
1929
  const convertedValue = convertValueForSql(expr.value.value, dialect);
1778
- return chunkU5W4LKZV_cjs.sql`${aggregate} ${chunkU5W4LKZV_cjs.sql.raw(op)} ${convertedValue}`;
1930
+ return chunkVCRRKBLN_cjs.sql`${aggregate} ${chunkVCRRKBLN_cjs.sql.raw(op)} ${convertedValue}`;
1779
1931
  }
1780
1932
  function compileAggregateExpr(expr, dialect) {
1781
1933
  const cteAlias = `cte_${expr.field.alias}`;
@@ -1787,25 +1939,25 @@ function compileAggregateExpr(expr, dialect) {
1787
1939
  );
1788
1940
  switch (expr.function) {
1789
1941
  case "count": {
1790
- return chunkU5W4LKZV_cjs.sql`COUNT(${field})`;
1942
+ return chunkVCRRKBLN_cjs.sql`COUNT(${field})`;
1791
1943
  }
1792
1944
  case "countDistinct": {
1793
- return chunkU5W4LKZV_cjs.sql`COUNT(DISTINCT ${field})`;
1945
+ return chunkVCRRKBLN_cjs.sql`COUNT(DISTINCT ${field})`;
1794
1946
  }
1795
1947
  case "sum": {
1796
- return chunkU5W4LKZV_cjs.sql`SUM(${field})`;
1948
+ return chunkVCRRKBLN_cjs.sql`SUM(${field})`;
1797
1949
  }
1798
1950
  case "avg": {
1799
- return chunkU5W4LKZV_cjs.sql`AVG(${field})`;
1951
+ return chunkVCRRKBLN_cjs.sql`AVG(${field})`;
1800
1952
  }
1801
1953
  case "min": {
1802
- return chunkU5W4LKZV_cjs.sql`MIN(${field})`;
1954
+ return chunkVCRRKBLN_cjs.sql`MIN(${field})`;
1803
1955
  }
1804
1956
  case "max": {
1805
- return chunkU5W4LKZV_cjs.sql`MAX(${field})`;
1957
+ return chunkVCRRKBLN_cjs.sql`MAX(${field})`;
1806
1958
  }
1807
1959
  default: {
1808
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1960
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1809
1961
  `Unknown aggregate function: ${expr.function}`
1810
1962
  );
1811
1963
  }
@@ -1813,15 +1965,15 @@ function compileAggregateExpr(expr, dialect) {
1813
1965
  }
1814
1966
  function compileExistsSubquery(expr, ctx) {
1815
1967
  if (expr.subquery.graphId === void 0) {
1816
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
1968
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
1817
1969
  }
1818
1970
  const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1819
- 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})`;
1820
1972
  }
1821
1973
  function compileInSubquery(expr, ctx) {
1822
1974
  const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
1823
1975
  if (subqueryColumnCount !== 1) {
1824
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1976
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1825
1977
  `IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
1826
1978
  { subqueryColumnCount }
1827
1979
  );
@@ -1830,13 +1982,13 @@ function compileInSubquery(expr, ctx) {
1830
1982
  const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
1831
1983
  const resolvedValueType = fieldValueType ?? subqueryValueType;
1832
1984
  if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
1833
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1985
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1834
1986
  `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
1835
1987
  { valueType: resolvedValueType }
1836
1988
  );
1837
1989
  }
1838
1990
  if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
1839
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
1991
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1840
1992
  `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
1841
1993
  {
1842
1994
  fieldValueType,
@@ -1846,7 +1998,7 @@ function compileInSubquery(expr, ctx) {
1846
1998
  }
1847
1999
  const valueType = fieldValueType ?? subqueryValueType;
1848
2000
  if (expr.subquery.graphId === void 0) {
1849
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(
2001
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
1850
2002
  "IN/NOT IN subquery must have a graphId"
1851
2003
  );
1852
2004
  }
@@ -1859,14 +2011,14 @@ function compileInSubquery(expr, ctx) {
1859
2011
  ctx.cteColumnPrefix
1860
2012
  );
1861
2013
  const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1862
- 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})`;
1863
2015
  }
1864
2016
  function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
1865
2017
  const results = [];
1866
2018
  function visit(expr, inDisallowedBranch) {
1867
2019
  if (isMatch(expr)) {
1868
2020
  if (inDisallowedBranch) {
1869
- throw new chunkC4F7VJ5D_cjs.UnsupportedPredicateError(rejectionMessage);
2021
+ throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(rejectionMessage);
1870
2022
  }
1871
2023
  results.push(expr);
1872
2024
  return;
@@ -1920,9 +2072,9 @@ function extractFulltextMatchPredicates(predicates) {
1920
2072
  // src/query/compiler/predicate-utils.ts
1921
2073
  var EMPTY_PREDICATES = [];
1922
2074
  function sqlValueList(values) {
1923
- return chunkU5W4LKZV_cjs.sql.join(
1924
- values.map((value) => chunkU5W4LKZV_cjs.sql`${value}`),
1925
- chunkU5W4LKZV_cjs.sql`, `
2075
+ return chunkVCRRKBLN_cjs.sql.join(
2076
+ values.map((value) => chunkVCRRKBLN_cjs.sql`${value}`),
2077
+ chunkVCRRKBLN_cjs.sql`, `
1926
2078
  );
1927
2079
  }
1928
2080
  function buildPredicateIndexKey(alias, targetType) {
@@ -1959,12 +2111,12 @@ function compilePredicateClauses(predicates, predicateContext) {
1959
2111
  }
1960
2112
  function compileKindFilter(column, kinds) {
1961
2113
  if (kinds.length === 0) {
1962
- return chunkU5W4LKZV_cjs.sql`1 = 0`;
2114
+ return chunkVCRRKBLN_cjs.sql`1 = 0`;
1963
2115
  }
1964
2116
  if (kinds.length === 1) {
1965
- return chunkU5W4LKZV_cjs.sql`${column} = ${kinds[0]}`;
2117
+ return chunkVCRRKBLN_cjs.sql`${column} = ${kinds[0]}`;
1966
2118
  }
1967
- return chunkU5W4LKZV_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
2119
+ return chunkVCRRKBLN_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
1968
2120
  }
1969
2121
  function getNodeKindsForAlias(ast, alias) {
1970
2122
  if (alias === ast.start.alias) {
@@ -1975,7 +2127,7 @@ function getNodeKindsForAlias(ast, alias) {
1975
2127
  return traversal.nodeKinds;
1976
2128
  }
1977
2129
  }
1978
- throw new chunkC4F7VJ5D_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
2130
+ throw new chunkNI72YOJB_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
1979
2131
  }
1980
2132
  function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
1981
2133
  if (!vectorPredicate || !fulltextPredicate) return void 0;
@@ -2004,7 +2156,7 @@ async function getRowsByIds(ids, policy) {
2004
2156
  // src/store/edge-fetch.ts
2005
2157
  async function getEdgeRowsByIds(backend, graphId, ids) {
2006
2158
  return getRowsByIds(ids, {
2007
- 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),
2008
2160
  one: (id) => backend.getEdge(graphId, id)
2009
2161
  });
2010
2162
  }
@@ -2012,7 +2164,7 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
2012
2164
  // src/store/node-fetch.ts
2013
2165
  async function getNodeRowsByIds(backend, graphId, kind, ids) {
2014
2166
  return getRowsByIds(ids, {
2015
- 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),
2016
2168
  one: (id) => backend.getNode(graphId, kind, id)
2017
2169
  });
2018
2170
  }
@@ -2060,13 +2212,36 @@ var RECORDED_EDGE_COLUMNS = [
2060
2212
  "tx_id",
2061
2213
  "meta"
2062
2214
  ];
2063
- var RECORDED_NODE_COLUMN_LIST = chunkU5W4LKZV_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
2064
- 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
+ );
2065
2240
  var RECORDED_BIND_PARAM_BUDGET = 900;
2066
2241
  function recordedBindParamBudget(target) {
2067
2242
  const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
2068
2243
  if (!Number.isSafeInteger(budget) || budget < 1) {
2069
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2244
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2070
2245
  `backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
2071
2246
  {
2072
2247
  code: "INVALID_BACKEND_CAPABILITY",
@@ -2082,44 +2257,64 @@ function recordedChunkSize(target, columnCount) {
2082
2257
  return Math.max(1, Math.floor(budget / columnCount));
2083
2258
  }
2084
2259
  function sqlNull(value) {
2085
- 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}`;
2086
2261
  }
2087
2262
  function recordedCommonCells() {
2088
2263
  return {
2089
- history_id: () => chunkU5W4LKZV_cjs.sql`${generateId()}`,
2090
- graph_id: (row) => chunkU5W4LKZV_cjs.sql`${row.graph_id}`,
2091
- id: (row) => chunkU5W4LKZV_cjs.sql`${row.id}`,
2092
- kind: (row) => chunkU5W4LKZV_cjs.sql`${row.kind}`,
2093
- props: (row) => chunkU5W4LKZV_cjs.sql`${chunk3PRKZW6D_cjs.rowPropsToJsonText(row.props)}`,
2094
- valid_from: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.valid_from)}`,
2095
- valid_to: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.valid_to)}`,
2096
- created_at: (row) => chunkU5W4LKZV_cjs.sql`${row.created_at}`,
2097
- updated_at: (row) => chunkU5W4LKZV_cjs.sql`${row.updated_at}`,
2098
- deleted_at: (row) => chunkU5W4LKZV_cjs.sql`${sqlNull(row.deleted_at)}`,
2099
- recorded_from: (_row, recordedRevision) => chunkU5W4LKZV_cjs.sql`${recordedRevision}`,
2100
- recorded_to: () => chunkU5W4LKZV_cjs.sql`${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}`,
2101
- op: (_row, _recordedCommit, operation) => chunkU5W4LKZV_cjs.sql`${operation}`,
2102
- schema_version: () => chunkU5W4LKZV_cjs.sql`NULL`,
2103
- tx_id: () => chunkU5W4LKZV_cjs.sql`NULL`,
2104
- 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}`
2105
2280
  };
2106
2281
  }
2107
2282
  var recordedNodeCells = {
2108
2283
  ...recordedCommonCells(),
2109
- version: (row) => chunkU5W4LKZV_cjs.sql`${row.version}`
2284
+ version: (row) => chunkVCRRKBLN_cjs.sql`${row.version}`
2110
2285
  };
2111
2286
  var recordedEdgeCells = {
2112
2287
  ...recordedCommonCells(),
2113
- from_kind: (row) => chunkU5W4LKZV_cjs.sql`${row.from_kind}`,
2114
- from_id: (row) => chunkU5W4LKZV_cjs.sql`${row.from_id}`,
2115
- to_kind: (row) => chunkU5W4LKZV_cjs.sql`${row.to_kind}`,
2116
- 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}`
2117
2312
  };
2118
2313
  function recordedValuesTuple(columns, cells, row, recordedRevision, operation) {
2119
2314
  const tuple = columns.map(
2120
2315
  (column) => cells[column](row, recordedRevision, operation)
2121
2316
  );
2122
- 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`, `)})`;
2123
2318
  }
2124
2319
  async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedRevision) {
2125
2320
  if (inserts.length === 0) return;
@@ -2134,9 +2329,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
2134
2329
  );
2135
2330
  await executeStatement(
2136
2331
  target,
2137
- chunkU5W4LKZV_cjs.sql`
2332
+ chunkVCRRKBLN_cjs.sql`
2138
2333
  INSERT INTO ${table} (${columnList})
2139
- VALUES ${chunkU5W4LKZV_cjs.sql.join(values, chunkU5W4LKZV_cjs.sql`, `)}
2334
+ VALUES ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
2140
2335
  `
2141
2336
  );
2142
2337
  }
@@ -2146,6 +2341,9 @@ function recordedNodeChunkSize(target) {
2146
2341
  function recordedEdgeChunkSize(target) {
2147
2342
  return recordedChunkSize(target, RECORDED_EDGE_COLUMNS.length);
2148
2343
  }
2344
+ function recordedIdentityAssertionChunkSize(target) {
2345
+ return recordedChunkSize(target, RECORDED_IDENTITY_ASSERTION_COLUMNS.length);
2346
+ }
2149
2347
  function insertRecordedNodeRows(target, table, inserts, recordedRevision) {
2150
2348
  return insertRecordedRows(
2151
2349
  target,
@@ -2168,6 +2366,17 @@ function insertRecordedEdgeRows(target, table, inserts, recordedRevision) {
2168
2366
  recordedRevision
2169
2367
  );
2170
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
+ }
2171
2380
 
2172
2381
  // src/store/recorded-capture/flush.ts
2173
2382
  function entityKey(entity) {
@@ -2178,25 +2387,28 @@ function entityKey(entity) {
2178
2387
  case "edge": {
2179
2388
  return `edge\0${entity.graphId}\0${entity.id}`;
2180
2389
  }
2390
+ case "identity": {
2391
+ return `identity\0${entity.graphId}\0${entity.id}`;
2392
+ }
2181
2393
  }
2182
2394
  }
2183
2395
  async function closeOpenReturning(target, table, graphId, ids, recordedRevision, kind) {
2184
- 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}`;
2185
2397
  const rows = await target.execute(
2186
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2398
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2187
2399
  UPDATE ${table}
2188
2400
  SET recorded_to = ${recordedRevision}
2189
2401
  WHERE graph_id = ${graphId}
2190
2402
  ${kindFilter}
2191
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2403
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2192
2404
  AND id IN (${sqlValueList(ids)})
2193
2405
  RETURNING id, deleted_at
2194
2406
  `)
2195
2407
  );
2196
- 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)]));
2197
2409
  }
2198
2410
  function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
2199
- if (chunk764JHTLT_cjs.isPresent(after.deleted_at)) return "delete";
2411
+ if (chunkN66HCGCY_cjs.isPresent(after.deleted_at)) return "delete";
2200
2412
  if (!hadOpenRow || priorRowWasTombstone) return "create";
2201
2413
  return "update";
2202
2414
  }
@@ -2233,7 +2445,7 @@ function recordedInsertsFor(afterById, closed) {
2233
2445
  async function flushNodes(target, schema, graphId, entities, recordedRevision) {
2234
2446
  const chunkSize = recordedNodeChunkSize(target);
2235
2447
  for (const [kind, group] of groupNodesByKind(entities)) {
2236
- for (const entityChunk of chunkZDH3DX3C_cjs.chunk(group, chunkSize)) {
2448
+ for (const entityChunk of chunkBSFJMMV3_cjs.chunk(group, chunkSize)) {
2237
2449
  const ids = entityChunk.map((entity) => entity.id);
2238
2450
  const closed = await closeOpenReturning(
2239
2451
  target,
@@ -2258,7 +2470,7 @@ async function flushNodes(target, schema, graphId, entities, recordedRevision) {
2258
2470
  }
2259
2471
  async function flushEdges(target, schema, graphId, entities, recordedRevision) {
2260
2472
  const chunkSize = recordedEdgeChunkSize(target);
2261
- for (const entityChunk of chunkZDH3DX3C_cjs.chunk(entities, chunkSize)) {
2473
+ for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
2262
2474
  const ids = entityChunk.map((entity) => entity.id);
2263
2475
  const closed = await closeOpenReturning(
2264
2476
  target,
@@ -2279,27 +2491,63 @@ async function flushEdges(target, schema, graphId, entities, recordedRevision) {
2279
2491
  );
2280
2492
  }
2281
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
+ }
2282
2530
  async function closeOpenByKind(target, table, graphId, kind, recordedRevision) {
2283
2531
  await executeStatement(
2284
2532
  target,
2285
- chunkU5W4LKZV_cjs.sql`
2533
+ chunkVCRRKBLN_cjs.sql`
2286
2534
  UPDATE ${table}
2287
2535
  SET recorded_to = ${recordedRevision}
2288
2536
  WHERE graph_id = ${graphId}
2289
2537
  AND kind = ${kind}
2290
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2538
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2291
2539
  `
2292
2540
  );
2293
2541
  }
2294
2542
  async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedRevision) {
2295
2543
  await executeStatement(
2296
2544
  target,
2297
- chunkU5W4LKZV_cjs.sql`
2545
+ chunkVCRRKBLN_cjs.sql`
2298
2546
  UPDATE ${schema.recordedEdgesTable}
2299
2547
  SET recorded_to = ${recordedRevision}
2300
2548
  WHERE graph_id = ${graphId}
2301
2549
  AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
2302
- AND recorded_to = ${chunkEQ7JKLZO_cjs.RECORDED_MAX_REVISION}
2550
+ AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
2303
2551
  `
2304
2552
  );
2305
2553
  }
@@ -2337,7 +2585,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
2337
2585
  }
2338
2586
  async function queryConnectedEdgeIds(target, schema, params) {
2339
2587
  const rows = await target.execute(
2340
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2588
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2341
2589
  SELECT id
2342
2590
  FROM ${schema.edgesTable}
2343
2591
  WHERE graph_id = ${params.graphId}
@@ -2358,9 +2606,9 @@ function normalizedColumnType(value) {
2358
2606
  }
2359
2607
  async function readColumnTypes(backend, table) {
2360
2608
  const rows = backend.dialect === "sqlite" ? await backend.execute(
2361
- 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)})`)
2362
2610
  ) : await backend.execute(
2363
- chunkU5W4LKZV_cjs.asCompiledRowsSql(chunkU5W4LKZV_cjs.sql`
2611
+ chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
2364
2612
  SELECT column_name AS name, data_type AS type
2365
2613
  FROM information_schema.columns
2366
2614
  WHERE table_schema = current_schema()
@@ -2383,7 +2631,19 @@ function isCompatibleColumnType(dialect, declaredType, kind) {
2383
2631
  if (dialect === "sqlite") return hasSqliteAffinity(declaredType, kind);
2384
2632
  return kind === "revision" ? declaredType === "bigint" : declaredType === "timestamp with time zone";
2385
2633
  }
2386
- 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
+ ] : [];
2387
2647
  return [
2388
2648
  {
2389
2649
  table: schema.tables.recordedNodes,
@@ -2414,11 +2674,12 @@ function requiredRecordedColumns(schema) {
2414
2674
  table: schema.tables.recordedClock,
2415
2675
  column: "recorded_at",
2416
2676
  kind: "wall-time"
2417
- }
2677
+ },
2678
+ ...identityColumns
2418
2679
  ];
2419
2680
  }
2420
- async function assertCurrentRecordedSchema(backend, schema) {
2421
- const requirements = requiredRecordedColumns(schema);
2681
+ async function assertCurrentRecordedSchema(backend, schema, includeIdentity = false) {
2682
+ const requirements = requiredRecordedColumns(schema, includeIdentity);
2422
2683
  const tables = [...new Set(requirements.map((entry) => entry.table))];
2423
2684
  const columnTypes = new Map(
2424
2685
  await Promise.all(
@@ -2427,6 +2688,20 @@ async function assertCurrentRecordedSchema(backend, schema) {
2427
2688
  )
2428
2689
  )
2429
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
+ }
2430
2705
  const incompatible = requirements.flatMap((requirement) => {
2431
2706
  const actual = columnTypes.get(requirement.table)?.get(requirement.column);
2432
2707
  if (actual !== void 0 && isCompatibleColumnType(backend.dialect, actual, requirement.kind)) {
@@ -2435,7 +2710,7 @@ async function assertCurrentRecordedSchema(backend, schema) {
2435
2710
  return [{ ...requirement, actual: actual ?? "missing" }];
2436
2711
  });
2437
2712
  if (incompatible.length === 0) return;
2438
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2713
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2439
2714
  "Recorded-time schema is incompatible with history capture.",
2440
2715
  {
2441
2716
  code: "RECORDED_SCHEMA_INCOMPATIBLE",
@@ -2483,7 +2758,7 @@ function edgeRowIdentityKey(row) {
2483
2758
  return edgeIdentityKey(row.graph_id, row.id);
2484
2759
  }
2485
2760
  function recordedCaptureSealedError(details) {
2486
- return new chunkC4F7VJ5D_cjs.ConfigurationError(
2761
+ return new chunkNI72YOJB_cjs.ConfigurationError(
2487
2762
  "Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
2488
2763
  details,
2489
2764
  {
@@ -2514,9 +2789,12 @@ function createRecordedCaptureSession() {
2514
2789
  touchEdge(graphId, id, afterImage) {
2515
2790
  touch({ entity: "edge", graphId, id, afterImage });
2516
2791
  },
2792
+ touchIdentityAssertion(graphId, id, afterImage) {
2793
+ touch({ entity: "identity", graphId, id, afterImage });
2794
+ },
2517
2795
  async flush(target, schema, ownsWriteLock) {
2518
2796
  if (sealed) {
2519
- throw new chunkC4F7VJ5D_cjs.ConfigurationError(
2797
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
2520
2798
  "Recorded-time capture session was already flushed.",
2521
2799
  {},
2522
2800
  {
@@ -2527,7 +2805,7 @@ function createRecordedCaptureSession() {
2527
2805
  sealed = true;
2528
2806
  if (touched.size === 0) return /* @__PURE__ */ new Map();
2529
2807
  const recordedByGraph = /* @__PURE__ */ new Map();
2530
- const byGraph = chunkZDH3DX3C_cjs.groupBy(touched.values(), (entity) => entity.graphId);
2808
+ const byGraph = chunkBSFJMMV3_cjs.groupBy(touched.values(), (entity) => entity.graphId);
2531
2809
  for (const [graphId, entities] of byGraph) {
2532
2810
  const recordedCommit = await allocateRecordedCommit(
2533
2811
  target,
@@ -2542,6 +2820,9 @@ function createRecordedCaptureSession() {
2542
2820
  const edges = entities.filter(
2543
2821
  (entity) => entity.entity === "edge"
2544
2822
  );
2823
+ const identityAssertions = entities.filter(
2824
+ (entity) => entity.entity === "identity"
2825
+ );
2545
2826
  await flushNodes(
2546
2827
  target,
2547
2828
  schema,
@@ -2556,12 +2837,33 @@ function createRecordedCaptureSession() {
2556
2837
  edges,
2557
2838
  recordedCommit.revision
2558
2839
  );
2840
+ await flushIdentityAssertions(
2841
+ target,
2842
+ schema,
2843
+ graphId,
2844
+ identityAssertions,
2845
+ recordedCommit.revision
2846
+ );
2559
2847
  }
2560
2848
  touched.clear();
2561
2849
  return recordedByGraph;
2562
2850
  }
2563
2851
  };
2564
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
+ }
2565
2867
  function createRecordedTransactionBackend(target, session, schema) {
2566
2868
  const nodeDispatch = nodeInsertDispatch(target);
2567
2869
  const edgeDispatch = edgeInsertDispatch(target);
@@ -2577,7 +2879,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2577
2879
  await lockRecordedGraphWrite(target, graphId, graphLocks);
2578
2880
  }
2579
2881
  }
2580
- const overlay = chunk3PRKZW6D_cjs.createBackendOverlay(target, {
2882
+ const overlay = chunkXBYVV3MP_cjs.createBackendOverlay(target, {
2581
2883
  ...rawWriteGuards(target, "tx.backend"),
2582
2884
  async insertNode(params) {
2583
2885
  session.assertOpen();
@@ -2630,6 +2932,17 @@ function createRecordedTransactionBackend(target, session, schema) {
2630
2932
  session.touchNode(params.graphId, params.kind, params.id, row);
2631
2933
  return row;
2632
2934
  },
2935
+ ...target.updateNodeSet === void 0 ? {} : {
2936
+ async updateNodeSet(params) {
2937
+ session.assertOpen();
2938
+ await lockGraph(params.graphId);
2939
+ const result = await chunkN66HCGCY_cjs.requireDefined(target.updateNodeSet)(params);
2940
+ for (const row of result.rows) {
2941
+ session.touchNode(row.graph_id, row.kind, row.id, row);
2942
+ }
2943
+ return result;
2944
+ }
2945
+ },
2633
2946
  async deleteNode(params) {
2634
2947
  session.assertOpen();
2635
2948
  await lockGraph(params.graphId);
@@ -2716,7 +3029,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2716
3029
  async deleteEdgesBatch(params) {
2717
3030
  session.assertOpen();
2718
3031
  await lockGraph(params.graphId);
2719
- await chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params);
3032
+ await chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params);
2720
3033
  for (const id of params.ids) {
2721
3034
  session.touchEdge(params.graphId, id);
2722
3035
  }
@@ -2726,7 +3039,7 @@ function createRecordedTransactionBackend(target, session, schema) {
2726
3039
  async hardDeleteEdgesBatch(params) {
2727
3040
  session.assertOpen();
2728
3041
  await lockGraph(params.graphId);
2729
- await chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
3042
+ await chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
2730
3043
  for (const id of params.ids) {
2731
3044
  session.touchEdge(params.graphId, id);
2732
3045
  }
@@ -2734,6 +3047,8 @@ function createRecordedTransactionBackend(target, session, schema) {
2734
3047
  }
2735
3048
  });
2736
3049
  registerRecordedGraphLockMemo(overlay, graphLocks);
3050
+ recordedIdentityBindings.set(overlay, { target, session });
3051
+ recordedIdentityBindings.set(target, { target, session });
2737
3052
  return overlay;
2738
3053
  }
2739
3054
  function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
@@ -2743,7 +3058,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
2743
3058
  return {
2744
3059
  backend: createRecordedTransactionBackend(target, session, resolvedSchema),
2745
3060
  async flush() {
2746
- return chunkWBUFJ7BS_cjs.withRecordedRelationsPrecondition(
3061
+ return chunkBSFJMMV3_cjs.withRecordedRelationsPrecondition(
2747
3062
  session.flush(target, resolvedSchema, ownsWriteLock),
2748
3063
  { dialect: target.dialect, surface: "capture-flush" }
2749
3064
  );
@@ -2764,7 +3079,7 @@ function createRecordedBackend(backend, schema) {
2764
3079
  assertCapturableBackend(backend);
2765
3080
  const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
2766
3081
  const projectedBackend = createGraphBackendProjection(backend);
2767
- return chunk3PRKZW6D_cjs.createBackendOverlay(projectedBackend, {
3082
+ return chunkXBYVV3MP_cjs.createBackendOverlay(projectedBackend, {
2768
3083
  ...rawWriteGuards(backend, "backend"),
2769
3084
  async insertNode(params) {
2770
3085
  return capture((target) => target.insertNode(params));
@@ -2793,6 +3108,20 @@ function createRecordedBackend(backend, schema) {
2793
3108
  async updateNode(params) {
2794
3109
  return capture((target) => target.updateNode(params));
2795
3110
  },
3111
+ ...backend.updateNodeSet === void 0 ? {} : {
3112
+ async updateNodeSet(params) {
3113
+ return capture((target) => {
3114
+ const updateNodeSet = target.updateNodeSet;
3115
+ if (updateNodeSet === void 0) {
3116
+ throw new chunkNI72YOJB_cjs.ConfigurationError(
3117
+ "Recorded updateNodeSet capability disappeared inside a transaction",
3118
+ { operation: "updateNodeSet" }
3119
+ );
3120
+ }
3121
+ return updateNodeSet(params);
3122
+ });
3123
+ }
3124
+ },
2796
3125
  async deleteNode(params) {
2797
3126
  await capture((target) => target.deleteNode(params));
2798
3127
  },
@@ -2835,14 +3164,14 @@ function createRecordedBackend(backend, schema) {
2835
3164
  ...backend.deleteEdgesBatch === void 0 ? {} : {
2836
3165
  async deleteEdgesBatch(params) {
2837
3166
  await capture(
2838
- (target) => chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params)
3167
+ (target) => chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params)
2839
3168
  );
2840
3169
  }
2841
3170
  },
2842
3171
  ...backend.hardDeleteEdgesBatch === void 0 ? {} : {
2843
3172
  async hardDeleteEdgesBatch(params) {
2844
3173
  await capture(
2845
- (target) => chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
3174
+ (target) => chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
2846
3175
  );
2847
3176
  }
2848
3177
  },
@@ -2863,802 +3192,32 @@ function createRecordedBackend(backend, schema) {
2863
3192
  });
2864
3193
  }
2865
3194
 
2866
- // src/store/embedding-sync.ts
2867
- var embeddingFieldsCache = /* @__PURE__ */ new WeakMap();
2868
- function getEmbeddingFields(schema) {
2869
- const cached = embeddingFieldsCache.get(schema);
2870
- if (cached) return cached;
2871
- const fields = chunkHAHNRASW_cjs.resolveEmbeddingFields(schema);
2872
- embeddingFieldsCache.set(schema, fields);
2873
- return fields;
2874
- }
2875
- async function syncEmbeddings(ctx, schema, props) {
2876
- const { backend } = ctx;
2877
- if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
2878
- return;
2879
- }
2880
- const embeddingFields = getEmbeddingFields(schema);
2881
- if (embeddingFields.length === 0) {
2882
- return;
2883
- }
2884
- for (const field of embeddingFields) {
2885
- const value = props[field.fieldPath];
2886
- if (isValidEmbeddingValue(value)) {
2887
- await backend.upsertEmbedding({
2888
- graphId: ctx.graphId,
2889
- nodeKind: ctx.nodeKind,
2890
- nodeId: ctx.nodeId,
2891
- fieldPath: field.fieldPath,
2892
- embedding: value,
2893
- dimensions: field.dimensions,
2894
- metric: field.metric,
2895
- indexType: field.indexType
2896
- });
2897
- } else if (value === void 0) {
2898
- await backend.deleteEmbedding({
2899
- graphId: ctx.graphId,
2900
- nodeKind: ctx.nodeKind,
2901
- nodeId: ctx.nodeId,
2902
- fieldPath: field.fieldPath,
2903
- dimensions: field.dimensions,
2904
- metric: field.metric,
2905
- indexType: field.indexType
2906
- });
2907
- }
2908
- }
2909
- }
2910
- async function syncEmbeddingsBatchForKind(args, schema, items) {
2911
- const { graphId, nodeKind, backend } = args;
2912
- if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
2913
- return;
2914
- }
2915
- const embeddingFields = getEmbeddingFields(schema);
2916
- if (embeddingFields.length === 0) {
2917
- return;
2918
- }
2919
- for (const field of embeddingFields) {
2920
- const rows = [];
2921
- const deletionIds = [];
2922
- for (const item of items) {
2923
- const value = item.props[field.fieldPath];
2924
- if (isValidEmbeddingValue(value)) {
2925
- rows.push({ nodeId: item.nodeId, embedding: value });
2926
- } else if (value === void 0) {
2927
- deletionIds.push(item.nodeId);
2928
- }
2929
- }
2930
- if (rows.length > 0) {
2931
- if (backend.upsertEmbeddingBatch === void 0) {
2932
- for (const row of rows) {
2933
- await backend.upsertEmbedding({
2934
- graphId,
2935
- nodeKind,
2936
- nodeId: row.nodeId,
2937
- fieldPath: field.fieldPath,
2938
- embedding: row.embedding,
2939
- dimensions: field.dimensions,
2940
- metric: field.metric,
2941
- indexType: field.indexType
2942
- });
2943
- }
2944
- } else {
2945
- await backend.upsertEmbeddingBatch({
2946
- graphId,
2947
- nodeKind,
2948
- fieldPath: field.fieldPath,
2949
- dimensions: field.dimensions,
2950
- metric: field.metric,
2951
- indexType: field.indexType,
2952
- rows
2953
- });
2954
- }
2955
- }
2956
- for (const nodeId of deletionIds) {
2957
- await backend.deleteEmbedding({
2958
- graphId,
2959
- nodeKind,
2960
- nodeId,
2961
- fieldPath: field.fieldPath,
2962
- dimensions: field.dimensions,
2963
- metric: field.metric,
2964
- indexType: field.indexType
2965
- });
2966
- }
2967
- }
2968
- }
2969
- async function deleteNodeEmbeddings(ctx, schema) {
2970
- const { backend } = ctx;
2971
- if (!backend.deleteEmbedding) {
2972
- return;
2973
- }
2974
- const embeddingFields = getEmbeddingFields(schema);
2975
- if (embeddingFields.length === 0) {
2976
- return;
2977
- }
2978
- for (const field of embeddingFields) {
2979
- await backend.deleteEmbedding({
2980
- graphId: ctx.graphId,
2981
- nodeKind: ctx.nodeKind,
2982
- nodeId: ctx.nodeId,
2983
- fieldPath: field.fieldPath,
2984
- dimensions: field.dimensions,
2985
- metric: field.metric,
2986
- indexType: field.indexType
2987
- });
2988
- }
2989
- }
2990
- function isValidEmbeddingValue(value) {
2991
- if (!Array.isArray(value)) {
2992
- return false;
2993
- }
2994
- return value.every((n) => typeof n === "number" && Number.isFinite(n));
2995
- }
2996
-
2997
- // src/store/fulltext-sync.ts
2998
- var FIELD_SEPARATOR = "\n";
2999
- function resolveCombinedLanguage(fields) {
3000
- return fields[0]?.metadata.language ?? chunkHAHNRASW_cjs.DEFAULT_SEARCHABLE_LANGUAGE;
3001
- }
3002
- function computeFulltextContent(schema, props) {
3003
- const searchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema);
3004
- if (searchableFields.length === 0) return void 0;
3005
- const parts = [];
3006
- for (const field of searchableFields) {
3007
- const value = props[field.fieldPath];
3008
- if (typeof value === "string" && value.length > 0) {
3009
- parts.push(value);
3010
- }
3011
- }
3012
- if (parts.length === 0) return void 0;
3013
- return {
3014
- content: parts.join(FIELD_SEPARATOR),
3015
- language: resolveCombinedLanguage(searchableFields)
3016
- };
3017
- }
3018
- async function syncFulltext(ctx, schema, props) {
3019
- const { backend } = ctx;
3020
- if (!backend.upsertFulltext || !backend.deleteFulltext) {
3021
- return;
3022
- }
3023
- const computed = computeFulltextContent(schema, props);
3024
- if (computed !== void 0) {
3025
- await backend.upsertFulltext({
3026
- graphId: ctx.graphId,
3027
- nodeKind: ctx.nodeKind,
3028
- nodeId: ctx.nodeId,
3029
- content: computed.content,
3030
- language: computed.language
3031
- });
3032
- return;
3033
- }
3034
- if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) return;
3035
- await backend.deleteFulltext({
3036
- graphId: ctx.graphId,
3037
- nodeKind: ctx.nodeKind,
3038
- nodeId: ctx.nodeId
3039
- });
3040
- }
3041
- async function syncFulltextBatchForKind(args, schema, items) {
3042
- const { graphId, nodeKind, backend } = args;
3043
- if (!backend.upsertFulltext || !backend.deleteFulltext) {
3044
- return;
3045
- }
3046
- const rows = [];
3047
- const emptyContentIds = [];
3048
- const hasSearchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0;
3049
- for (const item of items) {
3050
- const computed = computeFulltextContent(schema, item.props);
3051
- if (computed !== void 0) {
3052
- rows.push({
3053
- nodeId: item.nodeId,
3054
- content: computed.content,
3055
- language: computed.language
3056
- });
3057
- } else if (hasSearchableFields) {
3058
- emptyContentIds.push(item.nodeId);
3059
- }
3060
- }
3061
- if (rows.length > 0) {
3062
- if (backend.upsertFulltextBatch === void 0) {
3063
- for (const row of rows) {
3064
- await backend.upsertFulltext({
3065
- graphId,
3066
- nodeKind,
3067
- nodeId: row.nodeId,
3068
- content: row.content,
3069
- language: row.language
3070
- });
3071
- }
3072
- } else {
3073
- await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
3074
- }
3075
- }
3076
- if (emptyContentIds.length > 0) {
3077
- if (backend.deleteFulltextBatch === void 0) {
3078
- for (const nodeId of emptyContentIds) {
3079
- await backend.deleteFulltext({ graphId, nodeKind, nodeId });
3080
- }
3081
- } else {
3082
- await backend.deleteFulltextBatch({
3083
- graphId,
3084
- nodeKind,
3085
- nodeIds: emptyContentIds
3086
- });
3087
- }
3088
- }
3089
- }
3090
- async function deleteNodeFulltext(ctx, schema) {
3091
- const { backend } = ctx;
3092
- if (!backend.deleteFulltext) {
3093
- return;
3094
- }
3095
- if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) {
3096
- return;
3097
- }
3098
- await backend.deleteFulltext({
3099
- graphId: ctx.graphId,
3100
- nodeKind: ctx.nodeKind,
3101
- nodeId: ctx.nodeId
3102
- });
3103
- }
3104
-
3105
- // src/constraints/index.ts
3106
- var UNIQUE_KEY_SEPARATOR = "";
3107
- var UNIQUE_KEY_NULL_MARKER = "";
3108
- function computeUniqueKey(props, fields, collation) {
3109
- const values = fields.map((field) => {
3110
- const value = props[field];
3111
- if (value === void 0 || value === null) {
3112
- return UNIQUE_KEY_NULL_MARKER;
3113
- }
3114
- const stringValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? value.toString() : JSON.stringify(value);
3115
- return collation === "caseInsensitive" ? stringValue.toLowerCase() : stringValue;
3116
- });
3117
- return values.join(UNIQUE_KEY_SEPARATOR);
3118
- }
3119
- function checkWherePredicate(constraint, props) {
3120
- if (!constraint.where) {
3121
- return true;
3122
- }
3123
- const predicateBuilder = buildPredicateContext(props);
3124
- const predicate2 = constraint.where(predicateBuilder);
3125
- return evaluatePredicate(predicate2, props);
3126
- }
3127
- function buildPredicateContext(props) {
3128
- const context = {};
3129
- for (const key of Object.keys(props)) {
3130
- context[key] = {
3131
- isNull: () => ({
3132
- __type: "unique_predicate",
3133
- field: key,
3134
- op: "isNull"
3135
- }),
3136
- isNotNull: () => ({
3137
- __type: "unique_predicate",
3138
- field: key,
3139
- op: "isNotNull"
3140
- })
3141
- };
3142
- }
3143
- return context;
3144
- }
3145
- function evaluatePredicate(predicate2, props) {
3146
- if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
3147
- return true;
3148
- }
3149
- const pred = predicate2;
3150
- if (pred.__type !== "unique_predicate") {
3151
- return true;
3152
- }
3153
- const value = props[pred.field];
3154
- if (pred.op === "isNull") {
3155
- return value === null || value === void 0;
3156
- }
3157
- return chunk764JHTLT_cjs.isPresent(value);
3158
- }
3159
- function getKindsForUniquenessCheck(baseKind, scope, registry) {
3160
- if (scope === "kind") {
3161
- return [baseKind];
3162
- }
3163
- const root = findRootAncestor(baseKind, registry);
3164
- return registry.expandSubClasses(root);
3165
- }
3166
- function findRootAncestor(kind, registry) {
3167
- const ancestors = registry.getAncestors(kind);
3168
- if (ancestors.size === 0) {
3169
- return kind;
3170
- }
3171
- for (const ancestor of ancestors) {
3172
- if (registry.getAncestors(ancestor).size === 0) {
3173
- return ancestor;
3174
- }
3175
- }
3176
- const firstAncestor = [...ancestors][0];
3177
- return firstAncestor ? findRootAncestor(firstAncestor, registry) : kind;
3178
- }
3179
- function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeCount, hasActiveEdge) {
3180
- switch (cardinality) {
3181
- case "many": {
3182
- return void 0;
3183
- }
3184
- case "one": {
3185
- if (existingEdgeCount > 0) {
3186
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3187
- edgeKind,
3188
- fromKind,
3189
- fromId,
3190
- cardinality: "one",
3191
- existingCount: existingEdgeCount
3192
- });
3193
- }
3194
- return void 0;
3195
- }
3196
- case "unique": {
3197
- return void 0;
3198
- }
3199
- case "oneActive": {
3200
- if (hasActiveEdge) {
3201
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3202
- edgeKind,
3203
- fromKind,
3204
- fromId,
3205
- cardinality: "oneActive",
3206
- existingCount: 1
3207
- });
3208
- }
3209
- return void 0;
3210
- }
3211
- }
3212
- }
3213
- function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
3214
- if (existingCount > 0) {
3215
- return new chunkC4F7VJ5D_cjs.CardinalityError({
3216
- edgeKind,
3217
- fromKind,
3218
- fromId,
3219
- cardinality: "unique",
3220
- existingCount
3221
- });
3222
- }
3223
- return void 0;
3224
- }
3225
- function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
3226
- const validFromKinds = registration.from.map((node) => node.kind);
3227
- if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
3228
- return new chunkC4F7VJ5D_cjs.EndpointError({
3229
- edgeKind,
3230
- endpoint: "from",
3231
- actualKind: fromKind,
3232
- expectedKinds: validFromKinds
3233
- });
3234
- }
3235
- const validToKinds = registration.to.map((node) => node.kind);
3236
- if (!registry.isAssignableToAny(toKind, validToKinds)) {
3237
- return new chunkC4F7VJ5D_cjs.EndpointError({
3238
- edgeKind,
3239
- endpoint: "to",
3240
- actualKind: toKind,
3241
- expectedKinds: validToKinds
3242
- });
3243
- }
3244
- return void 0;
3245
- }
3246
- function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
3247
- for (const existingKind of existingKinds) {
3248
- if (registry.areDisjoint(nodeKind, existingKind)) {
3249
- return new chunkC4F7VJ5D_cjs.DisjointError({
3250
- nodeId,
3251
- attemptedKind: nodeKind,
3252
- conflictingKind: existingKind
3253
- });
3254
- }
3255
- }
3256
- return void 0;
3257
- }
3258
-
3259
- // src/store/uniqueness.ts
3260
- function createUniquenessContext(graphId, registry, backend) {
3261
- return { graphId, registry, backend };
3262
- }
3263
- async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
3264
- for (const constraint of constraints) {
3265
- if (!checkWherePredicate(constraint, props)) {
3266
- continue;
3267
- }
3268
- const key = computeUniqueKey(
3269
- props,
3270
- constraint.fields,
3271
- constraint.collation
3272
- );
3273
- const kindsToCheck = getKindsForUniquenessCheck(
3274
- kind,
3275
- constraint.scope,
3276
- ctx.registry
3277
- );
3278
- for (const kindToCheck of kindsToCheck) {
3279
- const existing = await ctx.backend.checkUnique({
3280
- graphId: ctx.graphId,
3281
- nodeKind: kindToCheck,
3282
- constraintName: constraint.name,
3283
- key
3284
- });
3285
- if (existing && existing.node_id !== id) {
3286
- throw new chunkC4F7VJ5D_cjs.UniquenessError({
3287
- constraintName: constraint.name,
3288
- kind: kindToCheck,
3289
- existingId: existing.node_id,
3290
- newId: id,
3291
- fields: constraint.fields
3292
- });
3293
- }
3294
- }
3295
- }
3296
- }
3297
- async function insertUniquenessEntries(ctx, kind, id, props, constraints) {
3298
- for (const constraint of constraints) {
3299
- if (!checkWherePredicate(constraint, props)) {
3300
- continue;
3301
- }
3302
- const key = computeUniqueKey(
3303
- props,
3304
- constraint.fields,
3305
- constraint.collation
3306
- );
3307
- await ctx.backend.insertUnique({
3308
- graphId: ctx.graphId,
3309
- nodeKind: kind,
3310
- constraintName: constraint.name,
3311
- key,
3312
- nodeId: id,
3313
- concreteKind: kind
3314
- });
3315
- }
3316
- }
3317
- async function insertUniquenessEntriesBatch(ctx, items) {
3318
- const entries = [];
3319
- for (const item of items) {
3320
- for (const constraint of item.constraints) {
3321
- if (!checkWherePredicate(constraint, item.props)) {
3322
- continue;
3323
- }
3324
- entries.push({
3325
- graphId: ctx.graphId,
3326
- nodeKind: item.kind,
3327
- constraintName: constraint.name,
3328
- key: computeUniqueKey(
3329
- item.props,
3330
- constraint.fields,
3331
- constraint.collation
3332
- ),
3333
- nodeId: item.id,
3334
- concreteKind: item.kind
3335
- });
3336
- }
3337
- }
3338
- if (entries.length === 0) return;
3339
- if (ctx.backend.insertUniqueBatch !== void 0) {
3340
- await ctx.backend.insertUniqueBatch(entries);
3341
- return;
3342
- }
3343
- for (const entry of entries) {
3344
- await ctx.backend.insertUnique(entry);
3345
- }
3346
- }
3347
- async function deleteUniquenessEntries(ctx, kind, props, constraints) {
3348
- for (const constraint of constraints) {
3349
- if (!checkWherePredicate(constraint, props)) {
3350
- continue;
3351
- }
3352
- const key = computeUniqueKey(
3353
- props,
3354
- constraint.fields,
3355
- constraint.collation
3356
- );
3357
- await ctx.backend.deleteUnique({
3358
- graphId: ctx.graphId,
3359
- nodeKind: kind,
3360
- constraintName: constraint.name,
3361
- key
3362
- });
3363
- }
3364
- }
3365
- async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constraints) {
3366
- const pending = [];
3367
- for (const constraint of constraints) {
3368
- const oldApplies = checkWherePredicate(constraint, oldProps);
3369
- const newApplies = checkWherePredicate(constraint, newProps);
3370
- const oldKey = oldApplies ? computeUniqueKey(oldProps, constraint.fields, constraint.collation) : void 0;
3371
- const newKey = newApplies ? computeUniqueKey(newProps, constraint.fields, constraint.collation) : void 0;
3372
- if (!oldApplies && !newApplies) {
3373
- continue;
3374
- }
3375
- if (oldApplies && newApplies && oldKey === newKey) {
3376
- continue;
3377
- }
3378
- if (newApplies && newKey !== void 0) {
3379
- const kindsToCheck = getKindsForUniquenessCheck(
3380
- kind,
3381
- constraint.scope,
3382
- ctx.registry
3383
- );
3384
- for (const kindToCheck of kindsToCheck) {
3385
- const existing = await ctx.backend.checkUnique({
3386
- graphId: ctx.graphId,
3387
- nodeKind: kindToCheck,
3388
- constraintName: constraint.name,
3389
- key: newKey
3390
- });
3391
- if (existing && existing.node_id !== id) {
3392
- throw new chunkC4F7VJ5D_cjs.UniquenessError({
3393
- constraintName: constraint.name,
3394
- kind: kindToCheck,
3395
- existingId: existing.node_id,
3396
- newId: id,
3397
- fields: constraint.fields
3398
- });
3399
- }
3400
- }
3401
- }
3402
- pending.push({ constraintName: constraint.name, oldKey, newKey });
3403
- }
3404
- for (const mutation of pending) {
3405
- if (mutation.oldKey !== void 0) {
3406
- await ctx.backend.deleteUnique({
3407
- graphId: ctx.graphId,
3408
- nodeKind: kind,
3409
- constraintName: mutation.constraintName,
3410
- key: mutation.oldKey
3411
- });
3412
- }
3413
- }
3414
- for (const mutation of pending) {
3415
- if (mutation.newKey !== void 0) {
3416
- await ctx.backend.insertUnique({
3417
- graphId: ctx.graphId,
3418
- nodeKind: kind,
3419
- constraintName: mutation.constraintName,
3420
- key: mutation.newKey,
3421
- nodeId: id,
3422
- concreteKind: kind
3423
- });
3424
- }
3425
- }
3426
- }
3427
-
3428
- // src/store/operations/node-write-pipeline.ts
3429
- function createNodeWriteContext(graphId, registry, lock) {
3430
- return { graphId, registry, lock };
3431
- }
3432
- function uniquenessContext(ctx, backend) {
3433
- return createUniquenessContext(ctx.graphId, ctx.registry, backend);
3434
- }
3435
- function nodeSyncContext(ctx, kind, id, backend) {
3436
- return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
3437
- }
3438
- async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
3439
- if (policy?.enforceDeleteBehavior === false) return;
3440
- const behavior = args.onDelete ?? "restrict";
3441
- const connectedEdges = await backend.findEdgesConnectedTo({
3442
- graphId: ctx.graphId,
3443
- nodeKind: args.kind,
3444
- nodeId: args.id
3445
- });
3446
- if (connectedEdges.length === 0) return;
3447
- switch (behavior) {
3448
- case "restrict": {
3449
- throw new chunkC4F7VJ5D_cjs.RestrictedDeleteError({
3450
- nodeKind: args.kind,
3451
- nodeId: args.id,
3452
- edgeCount: connectedEdges.length,
3453
- edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
3454
- });
3455
- }
3456
- case "cascade":
3457
- case "disconnect": {
3458
- const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
3459
- if (batchDelete !== void 0) {
3460
- await batchDelete({
3461
- graphId: ctx.graphId,
3462
- ids: connectedEdges.map((edge) => edge.id)
3463
- });
3464
- break;
3465
- }
3466
- for (const edge of connectedEdges) {
3467
- await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
3468
- }
3469
- break;
3470
- }
3471
- }
3472
- }
3473
- async function applyNodeInsertSideEffects(ctx, args, backend) {
3474
- await insertUniquenessEntries(
3475
- uniquenessContext(ctx, backend),
3476
- args.kind,
3477
- args.id,
3478
- args.props,
3479
- args.uniqueConstraints
3480
- );
3481
- await Promise.all([
3482
- syncEmbeddings(
3483
- nodeSyncContext(ctx, args.kind, args.id, backend),
3484
- args.schema,
3485
- args.props
3486
- ),
3487
- syncFulltext(
3488
- nodeSyncContext(ctx, args.kind, args.id, backend),
3489
- args.schema,
3490
- args.props
3491
- )
3492
- ]);
3493
- }
3494
- async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
3495
- if (items.length === 0) return;
3496
- await insertUniquenessEntriesBatch(
3497
- uniquenessContext(ctx, backend),
3498
- items.map((item) => ({
3499
- kind: item.kind,
3500
- id: item.id,
3501
- props: item.props,
3502
- constraints: item.uniqueConstraints
3503
- }))
3504
- );
3505
- const byKind = /* @__PURE__ */ new Map();
3506
- for (const item of items) {
3507
- const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
3508
- group.rows.push({ nodeId: item.id, props: item.props });
3509
- byKind.set(item.kind, group);
3510
- }
3511
- await Promise.all(
3512
- [...byKind.entries()].flatMap(([kind, group]) => {
3513
- const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
3514
- return [
3515
- syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
3516
- syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
3517
- ];
3518
- })
3519
- );
3520
- }
3521
- function parseRowProps(row) {
3522
- return chunk3PRKZW6D_cjs.rowPropsToObject(row.props);
3523
- }
3524
- async function applyNodeUpdate(ctx, args, backend) {
3525
- const { kind, id } = args.existing;
3526
- if (args.existing.deleted_at === void 0) {
3527
- await updateUniquenessEntries(
3528
- uniquenessContext(ctx, backend),
3529
- kind,
3530
- id,
3531
- parseRowProps(args.existing),
3532
- args.validatedProps,
3533
- args.uniqueConstraints
3534
- );
3535
- } else {
3536
- await checkUniquenessConstraints(
3537
- uniquenessContext(ctx, backend),
3538
- kind,
3539
- id,
3540
- args.validatedProps,
3541
- args.uniqueConstraints
3542
- );
3543
- await insertUniquenessEntries(
3544
- uniquenessContext(ctx, backend),
3545
- kind,
3546
- id,
3547
- args.validatedProps,
3548
- args.uniqueConstraints
3549
- );
3550
- }
3551
- const updateParams = {
3552
- graphId: ctx.graphId,
3553
- kind,
3554
- id,
3555
- props: args.validatedProps,
3556
- incrementVersion: true
3557
- };
3558
- if (args.validTo !== void 0) updateParams.validTo = args.validTo;
3559
- if (args.clearDeleted) updateParams.clearDeleted = true;
3560
- const row = await backend.updateNode(updateParams);
3561
- await Promise.all([
3562
- syncEmbeddings(
3563
- nodeSyncContext(ctx, kind, id, backend),
3564
- args.schema,
3565
- args.validatedProps
3566
- ),
3567
- syncFulltext(
3568
- nodeSyncContext(ctx, kind, id, backend),
3569
- args.schema,
3570
- args.validatedProps
3571
- )
3572
- ]);
3573
- return row;
3574
- }
3575
- async function applyNodeSoftDelete(ctx, args, backend, policy) {
3576
- const { kind, id } = args.existing;
3577
- await enforceNodeDeleteBehavior(
3578
- ctx,
3579
- { kind, id, mode: "soft", onDelete: args.onDelete },
3580
- backend,
3581
- policy
3582
- );
3583
- await backend.deleteNode({
3584
- graphId: ctx.graphId,
3585
- kind,
3586
- id
3587
- });
3588
- await deleteUniquenessEntries(
3589
- uniquenessContext(ctx, backend),
3590
- kind,
3591
- parseRowProps(args.existing),
3592
- args.uniqueConstraints
3593
- );
3594
- await deleteNodeEmbeddings(
3595
- nodeSyncContext(ctx, kind, id, backend),
3596
- args.schema
3597
- );
3598
- await deleteNodeFulltext(
3599
- nodeSyncContext(ctx, kind, id, backend),
3600
- args.schema
3601
- );
3602
- }
3603
- async function applyNodeHardDelete(ctx, args, backend) {
3604
- await enforceNodeDeleteBehavior(
3605
- ctx,
3606
- { kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
3607
- backend
3608
- );
3609
- await backend.hardDeleteNode({
3610
- graphId: ctx.graphId,
3611
- kind: args.kind,
3612
- id: args.id
3613
- });
3614
- await deleteNodeEmbeddings(
3615
- nodeSyncContext(ctx, args.kind, args.id, backend),
3616
- args.schema
3617
- );
3618
- }
3619
- async function applyNodeResurrect(ctx, args, backend) {
3620
- const { kind, id } = args.existing;
3621
- const props = parseRowProps(args.existing);
3622
- await checkUniquenessConstraints(
3623
- uniquenessContext(ctx, backend),
3624
- kind,
3625
- id,
3626
- props,
3627
- args.uniqueConstraints
3628
- );
3629
- await insertUniquenessEntries(
3630
- uniquenessContext(ctx, backend),
3631
- kind,
3632
- id,
3633
- props,
3634
- args.uniqueConstraints
3635
- );
3636
- const row = await backend.updateNode({
3637
- graphId: ctx.graphId,
3638
- kind,
3639
- id,
3640
- props,
3641
- incrementVersion: true,
3642
- clearDeleted: true
3643
- });
3644
- await Promise.all([
3645
- syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
3646
- syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
3647
- ]);
3648
- 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;
3649
3215
  }
3650
3216
 
3651
- exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
3652
3217
  exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
3653
- exports.STORE_RUNTIME = STORE_RUNTIME;
3654
- exports.TRANSACTION_RUNTIME = TRANSACTION_RUNTIME;
3218
+ exports.IDENTITY_ASSERTION_COLUMNS = IDENTITY_ASSERTION_COLUMNS;
3219
+ exports.IDENTITY_PEER_CLASS_COLUMNS = IDENTITY_PEER_CLASS_COLUMNS;
3655
3220
  exports.advanceRevisionClock = advanceRevisionClock;
3656
- exports.applyNodeHardDelete = applyNodeHardDelete;
3657
- exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
3658
- exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
3659
- exports.applyNodeResurrect = applyNodeResurrect;
3660
- exports.applyNodeSoftDelete = applyNodeSoftDelete;
3661
- exports.applyNodeUpdate = applyNodeUpdate;
3662
3221
  exports.arrayField = arrayField;
3663
3222
  exports.assertCurrentRecordedSchema = assertCurrentRecordedSchema;
3664
3223
  exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
@@ -3666,25 +3225,18 @@ exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
3666
3225
  exports.baseField = baseField;
3667
3226
  exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
3668
3227
  exports.buildPredicateIndex = buildPredicateIndex;
3669
- exports.checkCardinality = checkCardinality;
3670
- exports.checkDisjointness = checkDisjointness;
3671
- exports.checkUniqueEdge = checkUniqueEdge;
3672
- exports.checkUniquenessConstraints = checkUniquenessConstraints;
3673
- exports.checkWherePredicate = checkWherePredicate;
3674
3228
  exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
3229
+ exports.compareCodePoints = compareCodePoints;
3230
+ exports.compareStrings = compareStrings;
3675
3231
  exports.compileFieldValue = compileFieldValue;
3676
3232
  exports.compileKindFilter = compileKindFilter;
3677
3233
  exports.compilePredicateClauses = compilePredicateClauses;
3678
3234
  exports.compilePredicateExpression = compilePredicateExpression;
3679
3235
  exports.compileTemporalFilter = compileTemporalFilter;
3680
- exports.computeFulltextContent = computeFulltextContent;
3681
- exports.computeUniqueKey = computeUniqueKey;
3682
3236
  exports.createFulltextAccessor = createFulltextAccessor;
3683
3237
  exports.createGraphBackendProjection = createGraphBackendProjection;
3684
- exports.createNodeWriteContext = createNodeWriteContext;
3685
3238
  exports.createRecordedBackend = createRecordedBackend;
3686
3239
  exports.createRecordedTransactionScope = createRecordedTransactionScope;
3687
- exports.createUniquenessContext = createUniquenessContext;
3688
3240
  exports.currentReadInstant = currentReadInstant;
3689
3241
  exports.currentReadInstantFor = currentReadInstantFor;
3690
3242
  exports.dateField = dateField;
@@ -3697,13 +3249,17 @@ exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
3697
3249
  exports.fieldRef = fieldRef;
3698
3250
  exports.generateId = generateId;
3699
3251
  exports.getEdgeRowsByIds = getEdgeRowsByIds;
3700
- exports.getEmbeddingFields = getEmbeddingFields;
3701
3252
  exports.getFieldPointer = getFieldPointer;
3702
3253
  exports.getHybridTargetAlias = getHybridTargetAlias;
3703
- exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
3704
3254
  exports.getNodeKindsForAlias = getNodeKindsForAlias;
3705
3255
  exports.getNodeRowsByIds = getNodeRowsByIds;
3706
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;
3707
3263
  exports.inSubquery = inSubquery;
3708
3264
  exports.isParameterRef = isParameterRef;
3709
3265
  exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
@@ -3723,16 +3279,12 @@ exports.runInsertBatch = runInsertBatch;
3723
3279
  exports.runInsertBatchReturning = runInsertBatchReturning;
3724
3280
  exports.runInsertNoReturn = runInsertNoReturn;
3725
3281
  exports.sqlValueList = sqlValueList;
3726
- exports.storeBackend = storeBackend;
3727
- exports.storeRuntime = storeRuntime;
3728
3282
  exports.stringField = stringField;
3729
3283
  exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
3730
3284
  exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
3731
- exports.transactionBackend = transactionBackend;
3732
- exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
3733
3285
  exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
3734
- exports.validateEdgeEndpoints = validateEdgeEndpoints;
3735
3286
  exports.withPinnedReadInstant = withPinnedReadInstant;
3736
3287
  exports.withRecordedFlushObserver = withRecordedFlushObserver;
3737
- //# sourceMappingURL=chunk-7V2FGGI2.cjs.map
3738
- //# sourceMappingURL=chunk-7V2FGGI2.cjs.map
3288
+ exports.withRecordedIdentityMutationTarget = withRecordedIdentityMutationTarget;
3289
+ //# sourceMappingURL=chunk-XMQSEJCF.cjs.map
3290
+ //# sourceMappingURL=chunk-XMQSEJCF.cjs.map