@nicia-ai/typegraph 0.37.1 → 0.38.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 (372) hide show
  1. package/README.md +12 -10
  2. package/dist/backend/drizzle/indexes.cjs +32 -0
  3. package/dist/backend/drizzle/indexes.cjs.map +1 -0
  4. package/dist/backend/drizzle/indexes.d.cts +43 -0
  5. package/dist/backend/drizzle/indexes.d.ts +43 -0
  6. package/dist/backend/drizzle/indexes.js +11 -0
  7. package/dist/backend/drizzle/indexes.js.map +1 -0
  8. package/dist/backend/index.cjs +161 -0
  9. package/dist/backend/index.cjs.map +1 -0
  10. package/dist/backend/index.d.cts +3 -0
  11. package/dist/backend/index.d.ts +3 -0
  12. package/dist/backend/index.js +8 -0
  13. package/dist/backend/index.js.map +1 -0
  14. package/dist/backend/postgres/index.cjs +32 -28
  15. package/dist/backend/postgres/index.d.cts +13 -12
  16. package/dist/backend/postgres/index.d.ts +13 -12
  17. package/dist/backend/postgres/index.js +19 -15
  18. package/dist/backend/postgres/pglite-store.cjs +67 -0
  19. package/dist/backend/postgres/pglite-store.cjs.map +1 -0
  20. package/dist/backend/postgres/pglite-store.d.cts +38 -0
  21. package/dist/backend/postgres/pglite-store.d.ts +38 -0
  22. package/dist/backend/postgres/pglite-store.js +65 -0
  23. package/dist/backend/postgres/pglite-store.js.map +1 -0
  24. package/dist/backend/postgres/pglite.cjs +25 -50
  25. package/dist/backend/postgres/pglite.cjs.map +1 -1
  26. package/dist/backend/postgres/pglite.d.cts +10 -9
  27. package/dist/backend/postgres/pglite.d.ts +10 -9
  28. package/dist/backend/postgres/pglite.js +20 -52
  29. package/dist/backend/postgres/pglite.js.map +1 -1
  30. package/dist/backend/sqlite/index.cjs +29 -25
  31. package/dist/backend/sqlite/index.d.cts +11 -11
  32. package/dist/backend/sqlite/index.d.ts +11 -11
  33. package/dist/backend/sqlite/index.js +17 -13
  34. package/dist/backend/sqlite/libsql.cjs +23 -19
  35. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  36. package/dist/backend/sqlite/libsql.d.cts +9 -10
  37. package/dist/backend/sqlite/libsql.d.ts +9 -10
  38. package/dist/backend/sqlite/libsql.js +19 -15
  39. package/dist/backend/sqlite/libsql.js.map +1 -1
  40. package/dist/backend/sqlite/local-store.cjs +72 -0
  41. package/dist/backend/sqlite/local-store.cjs.map +1 -0
  42. package/dist/backend/sqlite/local-store.d.cts +42 -0
  43. package/dist/backend/sqlite/local-store.d.ts +42 -0
  44. package/dist/backend/sqlite/local-store.js +67 -0
  45. package/dist/backend/sqlite/local-store.js.map +1 -0
  46. package/dist/backend/sqlite/local.cjs +28 -183
  47. package/dist/backend/sqlite/local.cjs.map +1 -1
  48. package/dist/backend/sqlite/local.d.cts +8 -81
  49. package/dist/backend/sqlite/local.d.ts +8 -81
  50. package/dist/backend/sqlite/local.js +20 -180
  51. package/dist/backend/sqlite/local.js.map +1 -1
  52. package/dist/chunk-2EBMPJBO.js +16 -0
  53. package/dist/chunk-2EBMPJBO.js.map +1 -0
  54. package/dist/{chunk-5AVRFNP4.cjs → chunk-2SL7OGPR.cjs} +2866 -1507
  55. package/dist/chunk-2SL7OGPR.cjs.map +1 -0
  56. package/dist/chunk-35S6P5ZU.js +27 -0
  57. package/dist/chunk-35S6P5ZU.js.map +1 -0
  58. package/dist/chunk-3LKL3S6X.js +50 -0
  59. package/dist/chunk-3LKL3S6X.js.map +1 -0
  60. package/dist/chunk-6G5CQ6JX.js +47 -0
  61. package/dist/chunk-6G5CQ6JX.js.map +1 -0
  62. package/dist/chunk-6XDBRDZE.js +312 -0
  63. package/dist/chunk-6XDBRDZE.js.map +1 -0
  64. package/dist/chunk-764JHTLT.cjs +15 -0
  65. package/dist/chunk-764JHTLT.cjs.map +1 -0
  66. package/dist/chunk-76HE7DJP.js +68 -0
  67. package/dist/chunk-76HE7DJP.js.map +1 -0
  68. package/dist/{chunk-VGDDG3XJ.cjs → chunk-7M3NACL3.cjs} +12 -12
  69. package/dist/{chunk-VGDDG3XJ.cjs.map → chunk-7M3NACL3.cjs.map} +1 -1
  70. package/dist/{chunk-NXQFATMF.cjs → chunk-7VLCN3JB.cjs} +153 -123
  71. package/dist/chunk-7VLCN3JB.cjs.map +1 -0
  72. package/dist/{chunk-GA4TT3DH.js → chunk-A2FGSWMQ.js} +1845 -489
  73. package/dist/chunk-A2FGSWMQ.js.map +1 -0
  74. package/dist/chunk-AOL64O4Z.js +165 -0
  75. package/dist/chunk-AOL64O4Z.js.map +1 -0
  76. package/dist/{chunk-27SSDCEP.cjs → chunk-B63IFHXR.cjs} +53 -74
  77. package/dist/chunk-B63IFHXR.cjs.map +1 -0
  78. package/dist/{chunk-3XXGYU62.cjs → chunk-BKAKAVRW.cjs} +56 -53
  79. package/dist/chunk-BKAKAVRW.cjs.map +1 -0
  80. package/dist/{chunk-YTSN73ND.js → chunk-BQITNFQJ.js} +3 -3
  81. package/dist/{chunk-YTSN73ND.js.map → chunk-BQITNFQJ.js.map} +1 -1
  82. package/dist/{chunk-NUIG3BCV.cjs → chunk-CQC6VBAF.cjs} +93 -155
  83. package/dist/chunk-CQC6VBAF.cjs.map +1 -0
  84. package/dist/{chunk-6EEO3OVU.cjs → chunk-CWX77JB4.cjs} +22 -59
  85. package/dist/chunk-CWX77JB4.cjs.map +1 -0
  86. package/dist/{chunk-UGZUAYAR.js → chunk-D7PG5D5K.js} +4 -3
  87. package/dist/chunk-D7PG5D5K.js.map +1 -0
  88. package/dist/chunk-DDCIXXOO.js +9 -0
  89. package/dist/chunk-DDCIXXOO.js.map +1 -0
  90. package/dist/chunk-DDCYVIVV.cjs +44 -0
  91. package/dist/chunk-DDCYVIVV.cjs.map +1 -0
  92. package/dist/{chunk-XPCZADMT.cjs → chunk-DOVMTPKE.cjs} +89 -27
  93. package/dist/chunk-DOVMTPKE.cjs.map +1 -0
  94. package/dist/{chunk-5PNMDJ7J.js → chunk-DPNA466P.js} +14 -9
  95. package/dist/chunk-DPNA466P.js.map +1 -0
  96. package/dist/{chunk-BYPOGQWK.js → chunk-DRACN6XG.js} +6 -4
  97. package/dist/chunk-DRACN6XG.js.map +1 -0
  98. package/dist/chunk-E6TXEISH.cjs +175 -0
  99. package/dist/chunk-E6TXEISH.cjs.map +1 -0
  100. package/dist/{chunk-TKT2XHED.js → chunk-E6YZRKMM.js} +13 -12
  101. package/dist/chunk-E6YZRKMM.js.map +1 -0
  102. package/dist/{chunk-3C2RYI6L.cjs → chunk-EOJFGECD.cjs} +11 -11
  103. package/dist/chunk-EOJFGECD.cjs.map +1 -0
  104. package/dist/{chunk-XWV4JT34.js → chunk-ERZ4QPQX.js} +27 -22
  105. package/dist/chunk-ERZ4QPQX.js.map +1 -0
  106. package/dist/{chunk-DFVLCOP6.js → chunk-EZH7FNUS.js} +3 -3
  107. package/dist/{chunk-DFVLCOP6.js.map → chunk-EZH7FNUS.js.map} +1 -1
  108. package/dist/{chunk-WWFHO375.cjs → chunk-FJMPR3OH.cjs} +4 -3
  109. package/dist/chunk-FJMPR3OH.cjs.map +1 -0
  110. package/dist/chunk-FMNUSGZ4.cjs +12 -0
  111. package/dist/chunk-FMNUSGZ4.cjs.map +1 -0
  112. package/dist/{chunk-K3Q3LJY3.js → chunk-G32AO634.js} +201 -100
  113. package/dist/chunk-G32AO634.js.map +1 -0
  114. package/dist/{chunk-EXU3RASM.js → chunk-G3CSQLLT.js} +20 -474
  115. package/dist/chunk-G3CSQLLT.js.map +1 -0
  116. package/dist/chunk-GNPGGLAE.cjs +212 -0
  117. package/dist/chunk-GNPGGLAE.cjs.map +1 -0
  118. package/dist/{chunk-QARBLBXT.cjs → chunk-GUUWKPTK.cjs} +7 -7
  119. package/dist/{chunk-QARBLBXT.cjs.map → chunk-GUUWKPTK.cjs.map} +1 -1
  120. package/dist/chunk-GYA4JRP5.js +31 -0
  121. package/dist/chunk-GYA4JRP5.js.map +1 -0
  122. package/dist/chunk-I6FX7AAG.js +39 -0
  123. package/dist/chunk-I6FX7AAG.js.map +1 -0
  124. package/dist/chunk-IMQKXL4E.cjs +12 -0
  125. package/dist/{chunk-QSXTWU4U.cjs.map → chunk-IMQKXL4E.cjs.map} +1 -1
  126. package/dist/chunk-J6IJARLG.js +94 -0
  127. package/dist/chunk-J6IJARLG.js.map +1 -0
  128. package/dist/{chunk-W63OVYY4.js → chunk-K34OPSJK.js} +3 -3
  129. package/dist/{chunk-W63OVYY4.js.map → chunk-K34OPSJK.js.map} +1 -1
  130. package/dist/{chunk-TGOMW4MB.cjs → chunk-KCLZHYPU.cjs} +110 -109
  131. package/dist/chunk-KCLZHYPU.cjs.map +1 -0
  132. package/dist/{chunk-XGPUQ56G.js → chunk-KFLXWVUJ.js} +4 -38
  133. package/dist/chunk-KFLXWVUJ.js.map +1 -0
  134. package/dist/{chunk-3DS7Z4T4.cjs → chunk-LZ3TVJY4.cjs} +44 -43
  135. package/dist/chunk-LZ3TVJY4.cjs.map +1 -0
  136. package/dist/{chunk-UXLSNRYL.js → chunk-MTNEGGM2.js} +4 -4
  137. package/dist/chunk-MTNEGGM2.js.map +1 -0
  138. package/dist/{chunk-IP3CGGPA.cjs → chunk-N2V3HJFV.cjs} +92 -185
  139. package/dist/chunk-N2V3HJFV.cjs.map +1 -0
  140. package/dist/chunk-NAUA4PW5.cjs +28 -0
  141. package/dist/chunk-NAUA4PW5.cjs.map +1 -0
  142. package/dist/chunk-NMQ6C6TS.cjs +61 -0
  143. package/dist/chunk-NMQ6C6TS.cjs.map +1 -0
  144. package/dist/{chunk-2N6EOBTH.cjs → chunk-NPWACFQJ.cjs} +58 -53
  145. package/dist/chunk-NPWACFQJ.cjs.map +1 -0
  146. package/dist/{chunk-5KEQ74YU.cjs → chunk-NT6ILURI.cjs} +9 -86
  147. package/dist/chunk-NT6ILURI.cjs.map +1 -0
  148. package/dist/chunk-NU23DUSJ.cjs +192 -0
  149. package/dist/chunk-NU23DUSJ.cjs.map +1 -0
  150. package/dist/{chunk-WOJMKB3N.cjs → chunk-NWYCOFEZ.cjs} +1677 -308
  151. package/dist/chunk-NWYCOFEZ.cjs.map +1 -0
  152. package/dist/{chunk-3GH67G4Z.cjs → chunk-O5H62ZWJ.cjs} +4 -42
  153. package/dist/chunk-O5H62ZWJ.cjs.map +1 -0
  154. package/dist/{chunk-3SLPDKHQ.js → chunk-PH4IJ3V5.js} +5 -77
  155. package/dist/chunk-PH4IJ3V5.js.map +1 -0
  156. package/dist/chunk-PWXGB77L.cjs +56 -0
  157. package/dist/chunk-PWXGB77L.cjs.map +1 -0
  158. package/dist/chunk-PZHC5GCD.js +193 -0
  159. package/dist/chunk-PZHC5GCD.js.map +1 -0
  160. package/dist/chunk-QMQLUA66.js +12 -0
  161. package/dist/chunk-QMQLUA66.js.map +1 -0
  162. package/dist/{chunk-5WWVZMVX.js → chunk-QZ7A6HBM.js} +2 -2
  163. package/dist/{chunk-5WWVZMVX.js.map → chunk-QZ7A6HBM.js.map} +1 -1
  164. package/dist/{chunk-VKGKDOKR.js → chunk-RQPRCEIO.js} +1539 -206
  165. package/dist/chunk-RQPRCEIO.js.map +1 -0
  166. package/dist/chunk-RW24SAHI.cjs +74 -0
  167. package/dist/chunk-RW24SAHI.cjs.map +1 -0
  168. package/dist/{chunk-BVRDGYXQ.cjs → chunk-SAFZ6JTI.cjs} +14 -9
  169. package/dist/chunk-SAFZ6JTI.cjs.map +1 -0
  170. package/dist/{chunk-L7HQ2OSI.js → chunk-SCTZRFW5.js} +87 -166
  171. package/dist/chunk-SCTZRFW5.js.map +1 -0
  172. package/dist/{chunk-5KPNWT6X.js → chunk-SDHV2MWU.js} +24 -45
  173. package/dist/chunk-SDHV2MWU.js.map +1 -0
  174. package/dist/chunk-SVJ5GEXW.cjs +45 -0
  175. package/dist/chunk-SVJ5GEXW.cjs.map +1 -0
  176. package/dist/chunk-SVUKGWSN.cjs +102 -0
  177. package/dist/chunk-SVUKGWSN.cjs.map +1 -0
  178. package/dist/chunk-TAUGGLNQ.js +59 -0
  179. package/dist/chunk-TAUGGLNQ.js.map +1 -0
  180. package/dist/{chunk-UV3WP5WZ.js → chunk-TE5ZA4VX.js} +55 -27
  181. package/dist/chunk-TE5ZA4VX.js.map +1 -0
  182. package/dist/{chunk-A42GCBGX.cjs → chunk-TRF4EBJT.cjs} +6 -4
  183. package/dist/chunk-TRF4EBJT.cjs.map +1 -0
  184. package/dist/{chunk-KQJ54OG5.js → chunk-U4JDJKPD.js} +19 -56
  185. package/dist/chunk-U4JDJKPD.js.map +1 -0
  186. package/dist/chunk-UH2USOMG.cjs +627 -0
  187. package/dist/chunk-UH2USOMG.cjs.map +1 -0
  188. package/dist/{chunk-RCVLFTCT.js → chunk-UPXDVI3T.js} +13 -12
  189. package/dist/chunk-UPXDVI3T.js.map +1 -0
  190. package/dist/{chunk-5VQM6VWP.cjs → chunk-UWG5GX6E.cjs} +2 -2
  191. package/dist/{chunk-5VQM6VWP.cjs.map → chunk-UWG5GX6E.cjs.map} +1 -1
  192. package/dist/{chunk-3RWZPJKV.js → chunk-VBH7ZXSZ.js} +21 -78
  193. package/dist/chunk-VBH7ZXSZ.js.map +1 -0
  194. package/dist/{chunk-K5UBVGJN.js → chunk-VDYA2HMS.js} +6 -6
  195. package/dist/{chunk-K5UBVGJN.js.map → chunk-VDYA2HMS.js.map} +1 -1
  196. package/dist/chunk-X4PVHAZ6.cjs +83 -0
  197. package/dist/chunk-X4PVHAZ6.cjs.map +1 -0
  198. package/dist/{chunk-UYQMBBWJ.js → chunk-X6CNEA32.js} +23 -20
  199. package/dist/chunk-X6CNEA32.js.map +1 -0
  200. package/dist/chunk-X6RDQ5NB.cjs +335 -0
  201. package/dist/chunk-X6RDQ5NB.cjs.map +1 -0
  202. package/dist/chunk-XD6X7O5R.js +184 -0
  203. package/dist/chunk-XD6X7O5R.js.map +1 -0
  204. package/dist/{chunk-DIQ3AV5W.cjs → chunk-XFY73JWD.cjs} +324 -224
  205. package/dist/chunk-XFY73JWD.cjs.map +1 -0
  206. package/dist/{chunk-DEFQM7JU.cjs → chunk-XRU7V7FF.cjs} +7 -7
  207. package/dist/{chunk-DEFQM7JU.cjs.map → chunk-XRU7V7FF.cjs.map} +1 -1
  208. package/dist/{chunk-TPF25IG6.js → chunk-XZA3Y4YH.js} +3 -3
  209. package/dist/{chunk-TPF25IG6.js.map → chunk-XZA3Y4YH.js.map} +1 -1
  210. package/dist/chunk-Y7M44XEK.js +462 -0
  211. package/dist/chunk-Y7M44XEK.js.map +1 -0
  212. package/dist/{chunk-RRSNR3TP.js → chunk-YIRLBUNN.js} +3 -3
  213. package/dist/{chunk-RRSNR3TP.js.map → chunk-YIRLBUNN.js.map} +1 -1
  214. package/dist/{chunk-IXGYRP2P.js → chunk-YJDSPA5E.js} +79 -49
  215. package/dist/chunk-YJDSPA5E.js.map +1 -0
  216. package/dist/{chunk-EJYMTO3K.cjs → chunk-YLINFV7Z.cjs} +144 -116
  217. package/dist/chunk-YLINFV7Z.cjs.map +1 -0
  218. package/dist/{chunk-QERAIDRJ.js → chunk-Z2PPIVOO.js} +82 -22
  219. package/dist/chunk-Z2PPIVOO.js.map +1 -0
  220. package/dist/chunk-Z5QHVL5U.cjs +12 -0
  221. package/dist/chunk-Z5QHVL5U.cjs.map +1 -0
  222. package/dist/chunk-ZDH3DX3C.cjs +30 -0
  223. package/dist/chunk-ZDH3DX3C.cjs.map +1 -0
  224. package/dist/chunk-ZE6NVENI.js +77 -0
  225. package/dist/chunk-ZE6NVENI.js.map +1 -0
  226. package/dist/chunk-ZHX4KEM7.cjs +49 -0
  227. package/dist/chunk-ZHX4KEM7.cjs.map +1 -0
  228. package/dist/chunk-ZKZAIX42.cjs +479 -0
  229. package/dist/chunk-ZKZAIX42.cjs.map +1 -0
  230. package/dist/{chunk-TEDRJXOG.cjs → chunk-ZY4GXIVN.cjs} +5 -5
  231. package/dist/{chunk-TEDRJXOG.cjs.map → chunk-ZY4GXIVN.cjs.map} +1 -1
  232. package/dist/core/index.cjs +117 -0
  233. package/dist/core/index.cjs.map +1 -0
  234. package/dist/core/index.d.cts +225 -0
  235. package/dist/core/index.d.ts +225 -0
  236. package/dist/core/index.js +12 -0
  237. package/dist/core/index.js.map +1 -0
  238. package/dist/{ddl-CS0KUVwB.d.ts → ddl-Dx3Z0_WC.d.ts} +3 -3
  239. package/dist/{ddl-BD-ZfKeX.d.cts → ddl-J6sDyABg.d.cts} +3 -3
  240. package/dist/define-graph-CzEvA_8F.d.cts +174 -0
  241. package/dist/define-graph-DRo9xpYN.d.ts +174 -0
  242. package/dist/{extension-types-BM2ACfYO.d.cts → extension-types-BLEVH4SG.d.cts} +1 -1
  243. package/dist/{extension-types-BM2ACfYO.d.ts → extension-types-BLEVH4SG.d.ts} +1 -1
  244. package/dist/graph-extension/index.cjs +21 -19
  245. package/dist/graph-extension/index.d.cts +4 -4
  246. package/dist/graph-extension/index.d.ts +4 -4
  247. package/dist/graph-extension/index.js +6 -4
  248. package/dist/graph-merge/index.cjs +265 -214
  249. package/dist/graph-merge/index.cjs.map +1 -1
  250. package/dist/graph-merge/index.d.cts +8 -89
  251. package/dist/graph-merge/index.d.ts +8 -89
  252. package/dist/graph-merge/index.js +141 -90
  253. package/dist/graph-merge/index.js.map +1 -1
  254. package/dist/{index-BeacbPoe.d.ts → index-BD_3TCgh.d.ts} +6 -4
  255. package/dist/{index-BPM59vsg.d.cts → index-BihFPsPu.d.cts} +6 -4
  256. package/dist/{fulltext-strategy-C27vXaeB.d.cts → index-Bq7vSPHy.d.ts} +3195 -2646
  257. package/dist/{fulltext-strategy-DebsMrqg.d.ts → index-CrFL_ENI.d.cts} +3195 -2646
  258. package/dist/index.cjs +326 -315
  259. package/dist/index.cjs.map +1 -1
  260. package/dist/index.d.cts +59 -240
  261. package/dist/index.d.ts +59 -240
  262. package/dist/index.js +46 -79
  263. package/dist/index.js.map +1 -1
  264. package/dist/indexes/index.cjs +26 -38
  265. package/dist/indexes/index.d.cts +6 -41
  266. package/dist/indexes/index.d.ts +6 -41
  267. package/dist/indexes/index.js +14 -10
  268. package/dist/interchange/index.cjs +48 -39
  269. package/dist/interchange/index.cjs.map +1 -1
  270. package/dist/interchange/index.d.cts +7 -8
  271. package/dist/interchange/index.d.ts +7 -8
  272. package/dist/interchange/index.js +23 -14
  273. package/dist/interchange/index.js.map +1 -1
  274. package/dist/local-options-CZ1BnIoF.d.cts +29 -0
  275. package/dist/local-options-CZ1BnIoF.d.ts +29 -0
  276. package/dist/{manager-D00_NXvT.d.ts → manager-CASfhmzV.d.ts} +4 -173
  277. package/dist/{manager-nU1vTJLy.d.cts → manager-nCEJiYBb.d.cts} +4 -173
  278. package/dist/{materialize-indexes-zK2J_flP.d.ts → materialize-indexes-D4iei4Kp.d.ts} +1 -1
  279. package/dist/{materialize-indexes-CuR3gAZb.d.cts → materialize-indexes-ExQ6OrAh.d.cts} +1 -1
  280. package/dist/{postgres-IaBA4RgE.d.ts → postgres-Cl1ZAN1G.d.ts} +1 -1
  281. package/dist/{postgres-YrYmPlaU.d.cts → postgres-DMgIKQU-.d.cts} +1 -1
  282. package/dist/postgres-execution-fKW0qRiN.d.cts +14 -0
  283. package/dist/postgres-execution-fKW0qRiN.d.ts +14 -0
  284. package/dist/profiler/index.cjs +9 -8
  285. package/dist/profiler/index.cjs.map +1 -1
  286. package/dist/profiler/index.d.cts +9 -17
  287. package/dist/profiler/index.d.ts +9 -17
  288. package/dist/profiler/index.js +8 -7
  289. package/dist/profiler/index.js.map +1 -1
  290. package/dist/provenance/index.cjs +61 -55
  291. package/dist/provenance/index.cjs.map +1 -1
  292. package/dist/provenance/index.d.cts +7 -8
  293. package/dist/provenance/index.d.ts +7 -8
  294. package/dist/provenance/index.js +34 -28
  295. package/dist/provenance/index.js.map +1 -1
  296. package/dist/schema/index.cjs +46 -37
  297. package/dist/schema/index.cjs.map +1 -1
  298. package/dist/schema/index.d.cts +8 -10
  299. package/dist/schema/index.d.ts +8 -10
  300. package/dist/schema/index.js +22 -13
  301. package/dist/schema/index.js.map +1 -1
  302. package/dist/{sqlite-BUOHPx7p.d.ts → sqlite-BDkW39aa.d.cts} +1 -1
  303. package/dist/{sqlite-Pp8O19WE.d.cts → sqlite-CYfhvESj.d.ts} +1 -1
  304. package/dist/sqlite-execution-DwbE2a9y.d.cts +32 -0
  305. package/dist/sqlite-execution-DwbE2a9y.d.ts +32 -0
  306. package/dist/{store-view-X96Rd00T.d.cts → store-view-BoHqdHjB.d.cts} +394 -1393
  307. package/dist/{store-view-ANL6mTph.d.ts → store-view-Ctq-3OHy.d.ts} +394 -1393
  308. package/dist/temporal-BC_NQV5Y.d.cts +281 -0
  309. package/dist/temporal-DqtOEo_B.d.ts +281 -0
  310. package/dist/{types-r-Zyq2Hz.d.cts → types-COq3-vMC.d.cts} +2 -2
  311. package/dist/{types-wsvuBgPK.d.ts → types-CUevi_D1.d.ts} +2 -2
  312. package/dist/{where-CJOpJj3a.d.ts → where-BdE_cYtx.d.ts} +5 -5
  313. package/dist/{where-K3uBP33l.d.cts → where-C92TXCzT.d.cts} +5 -5
  314. package/package.json +37 -6
  315. package/dist/chunk-27SSDCEP.cjs.map +0 -1
  316. package/dist/chunk-2N6EOBTH.cjs.map +0 -1
  317. package/dist/chunk-3C2RYI6L.cjs.map +0 -1
  318. package/dist/chunk-3DS7Z4T4.cjs.map +0 -1
  319. package/dist/chunk-3GH67G4Z.cjs.map +0 -1
  320. package/dist/chunk-3RWZPJKV.js.map +0 -1
  321. package/dist/chunk-3SLPDKHQ.js.map +0 -1
  322. package/dist/chunk-3XXGYU62.cjs.map +0 -1
  323. package/dist/chunk-44TA22QT.js +0 -1478
  324. package/dist/chunk-44TA22QT.js.map +0 -1
  325. package/dist/chunk-5AVRFNP4.cjs.map +0 -1
  326. package/dist/chunk-5KEQ74YU.cjs.map +0 -1
  327. package/dist/chunk-5KPNWT6X.js.map +0 -1
  328. package/dist/chunk-5PNMDJ7J.js.map +0 -1
  329. package/dist/chunk-6EEO3OVU.cjs.map +0 -1
  330. package/dist/chunk-7YSP4V4R.cjs +0 -69
  331. package/dist/chunk-7YSP4V4R.cjs.map +0 -1
  332. package/dist/chunk-A42GCBGX.cjs.map +0 -1
  333. package/dist/chunk-BVRDGYXQ.cjs.map +0 -1
  334. package/dist/chunk-BYPOGQWK.js.map +0 -1
  335. package/dist/chunk-CUHM5CWJ.cjs +0 -12
  336. package/dist/chunk-CUHM5CWJ.cjs.map +0 -1
  337. package/dist/chunk-DIQ3AV5W.cjs.map +0 -1
  338. package/dist/chunk-EJYMTO3K.cjs.map +0 -1
  339. package/dist/chunk-EXU3RASM.js.map +0 -1
  340. package/dist/chunk-GA4TT3DH.js.map +0 -1
  341. package/dist/chunk-IP3CGGPA.cjs.map +0 -1
  342. package/dist/chunk-IPSVVTWT.cjs +0 -1540
  343. package/dist/chunk-IPSVVTWT.cjs.map +0 -1
  344. package/dist/chunk-IXGYRP2P.js.map +0 -1
  345. package/dist/chunk-K3Q3LJY3.js.map +0 -1
  346. package/dist/chunk-KQJ54OG5.js.map +0 -1
  347. package/dist/chunk-L7HQ2OSI.js.map +0 -1
  348. package/dist/chunk-M6VES7V6.js +0 -239
  349. package/dist/chunk-M6VES7V6.js.map +0 -1
  350. package/dist/chunk-NUIG3BCV.cjs.map +0 -1
  351. package/dist/chunk-NXQFATMF.cjs.map +0 -1
  352. package/dist/chunk-OHMP6N2J.js +0 -47
  353. package/dist/chunk-OHMP6N2J.js.map +0 -1
  354. package/dist/chunk-QERAIDRJ.js.map +0 -1
  355. package/dist/chunk-QSXTWU4U.cjs +0 -12
  356. package/dist/chunk-RCVLFTCT.js.map +0 -1
  357. package/dist/chunk-TGOMW4MB.cjs.map +0 -1
  358. package/dist/chunk-TKT2XHED.js.map +0 -1
  359. package/dist/chunk-UGZUAYAR.js.map +0 -1
  360. package/dist/chunk-UV3WP5WZ.js.map +0 -1
  361. package/dist/chunk-UXLSNRYL.js.map +0 -1
  362. package/dist/chunk-UYQMBBWJ.js.map +0 -1
  363. package/dist/chunk-VKGKDOKR.js.map +0 -1
  364. package/dist/chunk-VL2V6PEN.cjs +0 -261
  365. package/dist/chunk-VL2V6PEN.cjs.map +0 -1
  366. package/dist/chunk-WOJMKB3N.cjs.map +0 -1
  367. package/dist/chunk-WWFHO375.cjs.map +0 -1
  368. package/dist/chunk-XGPUQ56G.js.map +0 -1
  369. package/dist/chunk-XGU7DZDA.cjs +0 -1095
  370. package/dist/chunk-XGU7DZDA.cjs.map +0 -1
  371. package/dist/chunk-XPCZADMT.cjs.map +0 -1
  372. package/dist/chunk-XWV4JT34.js.map +0 -1
@@ -1,103 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var chunkIPSVVTWT_cjs = require('./chunk-IPSVVTWT.cjs');
4
- var chunk3GH67G4Z_cjs = require('./chunk-3GH67G4Z.cjs');
5
- var chunk7YSP4V4R_cjs = require('./chunk-7YSP4V4R.cjs');
3
+ var chunkZDH3DX3C_cjs = require('./chunk-ZDH3DX3C.cjs');
4
+ var chunkGNPGGLAE_cjs = require('./chunk-GNPGGLAE.cjs');
5
+ var chunkSVUKGWSN_cjs = require('./chunk-SVUKGWSN.cjs');
6
+ var chunkO5H62ZWJ_cjs = require('./chunk-O5H62ZWJ.cjs');
7
+ var chunkDDCYVIVV_cjs = require('./chunk-DDCYVIVV.cjs');
8
+ var chunkNAUA4PW5_cjs = require('./chunk-NAUA4PW5.cjs');
9
+ var chunkZ5QHVL5U_cjs = require('./chunk-Z5QHVL5U.cjs');
10
+ var chunkX6RDQ5NB_cjs = require('./chunk-X6RDQ5NB.cjs');
11
+ var chunkSJDMVITW_cjs = require('./chunk-SJDMVITW.cjs');
12
+ var chunk764JHTLT_cjs = require('./chunk-764JHTLT.cjs');
6
13
  var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
7
- var chunkBVRDGYXQ_cjs = require('./chunk-BVRDGYXQ.cjs');
8
- var drizzleOrm = require('drizzle-orm');
14
+ var chunkSAFZ6JTI_cjs = require('./chunk-SAFZ6JTI.cjs');
15
+ var chunkTDXIBCGY_cjs = require('./chunk-TDXIBCGY.cjs');
9
16
  var nanoid = require('nanoid');
10
17
 
11
- // src/core/temporal.ts
12
- var RECORDED_MAX = "9999-12-31T23:59:59.999Z";
13
- function assertValidRecordedInstant(value, path) {
14
- chunk3GH67G4Z_cjs.validateCanonicalIsoDate(value, path);
15
- if (value >= RECORDED_MAX) {
16
- throw new chunkBVRDGYXQ_cjs.ValidationError(
17
- `${path} must be before the recorded-time open sentinel ${RECORDED_MAX}.`,
18
- {
19
- issues: [
20
- {
21
- path,
22
- message: `Expected a timestamp before ${RECORDED_MAX}, got "${value}"`
23
- }
24
- ]
25
- },
26
- {
27
- suggestion: "Use a real recorded-time commit instant, not the open-interval sentinel."
28
- }
29
- );
30
- }
31
- }
32
- function asRecordedInstant(value) {
33
- assertValidRecordedInstant(value, "asRecordedInstant");
34
- return value;
35
- }
36
- function resolveReadCoordinate(mode, asOf, suggestion) {
37
- if (mode !== "asOf" && asOf !== void 0) {
38
- throw new chunkBVRDGYXQ_cjs.ValidationError(
39
- `Temporal mode "${mode}" does not take an asOf timestamp.`,
40
- {
41
- issues: [
42
- {
43
- path: "asOf",
44
- message: `asOf is only valid with mode "asOf", not "${mode}"`
45
- }
46
- ]
47
- },
48
- {
49
- suggestion: 'Pin an instant with store.asOf(timestamp) or store.view({ mode: "asOf", asOf }); drop asOf for other modes.'
50
- }
51
- );
52
- }
53
- assertValidAsOf(
54
- mode,
55
- asOf,
56
- suggestion === void 0 ? void 0 : { suggestion }
57
- );
58
- return { valid: asOf === void 0 ? { mode } : { mode, asOf } };
59
- }
60
- function withRecordedCoordinate(coordinate, recordedAsOf) {
61
- assertValidRecordedInstant(recordedAsOf, "asOfRecorded");
62
- return {
63
- ...coordinate,
64
- recorded: { asOf: recordedAsOf }
65
- };
66
- }
67
- function assertValidAsOf(mode, asOf, options) {
68
- if (mode === "asOf" && asOf === void 0) {
69
- throw new chunkBVRDGYXQ_cjs.ValidationError(
70
- 'Temporal mode "asOf" requires a timestamp',
71
- {
72
- issues: [
73
- { path: "asOf", message: "Timestamp is required for asOf mode" }
74
- ]
75
- },
76
- {
77
- suggestion: options?.suggestion ?? 'Provide an ISO-8601 timestamp for asOf mode, e.g. "2026-01-01T00:00:00.000Z".'
78
- }
79
- );
80
- }
81
- if (asOf !== void 0) {
82
- chunk3GH67G4Z_cjs.validateCanonicalIsoDate(asOf, "asOf");
83
- }
84
- }
85
- function describeCoordinate(coordinate) {
86
- const { mode, asOf } = coordinate.valid;
87
- const valid = asOf === void 0 ? `mode "${mode}"` : `mode "${mode}" asOf ${asOf}`;
88
- return coordinate.recorded === void 0 ? valid : `${valid}, recorded asOf ${coordinate.recorded.asOf}`;
89
- }
90
- function coordinateContext(coordinate) {
91
- const { mode, asOf } = coordinate.valid;
92
- return {
93
- temporalMode: mode,
94
- ...asOf !== void 0 && { asOf },
95
- ...coordinate.recorded === void 0 ? {} : { recordedAsOf: coordinate.recorded.asOf }
96
- };
97
- }
98
- var SqlSchemaDescriptor = class {
99
- // Private field gives SqlSchema nominal identity; runtime checks use instanceof.
100
- #brand = true;
18
+ // src/query/compiler/schema.ts
19
+ var SQL_SCHEMA_BRAND = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol("sql-schema-v1");
20
+ var SqlSchema = class {
21
+ };
22
+ var SqlSchemaDescriptor = class extends SqlSchema {
101
23
  tables;
102
24
  nodesTable;
103
25
  edgesTable;
@@ -107,6 +29,13 @@ var SqlSchemaDescriptor = class {
107
29
  revisionOriginsTable;
108
30
  fulltextTable;
109
31
  constructor(fields) {
32
+ super();
33
+ Object.defineProperty(this, SQL_SCHEMA_BRAND, {
34
+ configurable: false,
35
+ enumerable: false,
36
+ value: true,
37
+ writable: false
38
+ });
110
39
  this.tables = fields.tables;
111
40
  this.nodesTable = fields.nodesTable;
112
41
  this.edgesTable = fields.edgesTable;
@@ -115,7 +44,6 @@ var SqlSchemaDescriptor = class {
115
44
  this.recordedClockTable = fields.recordedClockTable;
116
45
  this.revisionOriginsTable = fields.revisionOriginsTable;
117
46
  this.fulltextTable = fields.fulltextTable;
118
- void this.#brand;
119
47
  Object.freeze(this);
120
48
  }
121
49
  };
@@ -144,31 +72,30 @@ function resolveTableNames(names) {
144
72
  var VALID_IDENTIFIER_PATTERN = /^[a-z_][a-z0-9_$]*$/i;
145
73
  function validateTableName(name, label) {
146
74
  if (!name || name.length === 0) {
147
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(`${label} table name cannot be empty`);
75
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(`${label} table name cannot be empty`);
148
76
  }
149
- if (name.length > chunk7YSP4V4R_cjs.MAX_PG_IDENTIFIER_LENGTH) {
150
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
151
- `${label} table name exceeds maximum length of ${chunk7YSP4V4R_cjs.MAX_PG_IDENTIFIER_LENGTH} characters`
77
+ if (name.length > chunkNAUA4PW5_cjs.MAX_PG_IDENTIFIER_LENGTH) {
78
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
79
+ `${label} table name exceeds maximum length of ${chunkNAUA4PW5_cjs.MAX_PG_IDENTIFIER_LENGTH} characters`
152
80
  );
153
81
  }
154
82
  if (!VALID_IDENTIFIER_PATTERN.test(name)) {
155
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
83
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
156
84
  `${label} table name "${name}" is not a valid SQL identifier. Table names must start with a letter or underscore and contain only letters, digits, underscores, or dollar signs.`
157
85
  );
158
86
  }
159
87
  }
160
- function quoteIdentifier(name) {
161
- return `"${name.replaceAll('"', '""')}"`;
162
- }
163
88
  function freezeSqlSchema(fields) {
164
89
  return new SqlSchemaDescriptor(fields);
165
90
  }
166
91
  function isSqlSchema(schema) {
167
- return schema instanceof SqlSchemaDescriptor && Object.isFrozen(schema);
92
+ if (typeof schema !== "object" || schema === null) return false;
93
+ const candidate = schema;
94
+ return candidate[SQL_SCHEMA_BRAND] === true && typeof candidate["tables"] === "object" && candidate["tables"] !== null && Object.isFrozen(candidate["tables"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["nodesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["edgesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedNodesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedEdgesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedClockTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["revisionOriginsTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["fulltextTable"]) && Object.isFrozen(candidate);
168
95
  }
169
96
  function requireSqlSchema(schema, surface = "SqlSchema") {
170
97
  if (isSqlSchema(schema)) return schema;
171
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
98
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
172
99
  `${surface} must be created with createSqlSchema(...).`,
173
100
  { code: "INVALID_SQL_SCHEMA", surface },
174
101
  {
@@ -188,20 +115,20 @@ function createSqlSchema(names = {}) {
188
115
  validateTableName(tables.uniques, "uniques");
189
116
  return freezeSqlSchema({
190
117
  tables: Object.freeze(tables),
191
- nodesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.nodes)),
192
- edgesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.edges)),
193
- recordedNodesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.recordedNodes)),
194
- recordedEdgesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.recordedEdges)),
195
- recordedClockTable: drizzleOrm.sql.raw(quoteIdentifier(tables.recordedClock)),
196
- revisionOriginsTable: drizzleOrm.sql.raw(quoteIdentifier(tables.revisionOrigins)),
197
- fulltextTable: drizzleOrm.sql.raw(quoteIdentifier(tables.fulltext))
118
+ nodesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.nodes),
119
+ edgesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.edges),
120
+ recordedNodesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedNodes),
121
+ recordedEdgesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedEdges),
122
+ recordedClockTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedClock),
123
+ revisionOriginsTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.revisionOrigins),
124
+ fulltextTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.fulltext)
198
125
  });
199
126
  }
200
- var EXTERNAL_RECORDED_READ_SOURCE = /* @__PURE__ */ Symbol(
201
- "ExternalRecordedReadSource"
127
+ var EXTERNAL_RECORDED_READ_SOURCE = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
128
+ "external-recorded-read-source-v1"
202
129
  );
203
- var TYPEGRAPH_RECORDED_READ_SOURCE = /* @__PURE__ */ Symbol(
204
- "TypeGraphRecordedReadSource"
130
+ var TYPEGRAPH_RECORDED_READ_SOURCE = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
131
+ "typegraph-recorded-read-source-v1"
205
132
  );
206
133
  function recordedRelation(options) {
207
134
  const schema = requireSqlSchema(options.schema, "recordedRelation schema");
@@ -214,7 +141,7 @@ function recordedRelation(options) {
214
141
  function requireExternalRecordedReadSource(source) {
215
142
  if (source === void 0) return void 0;
216
143
  if (isExternalRecordedReadSource(source)) return source;
217
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
144
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
218
145
  "recordedRead must be created with recordedRelation({ schema }).",
219
146
  { code: "INVALID_RECORDED_READ_SOURCE" },
220
147
  {
@@ -238,7 +165,7 @@ function createRecordedReadBinding(schema) {
238
165
  function requireRecordedReadBinding(binding, surface) {
239
166
  if (isRecordedReadBinding(binding)) return binding;
240
167
  if (binding !== void 0) {
241
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
168
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
242
169
  "Recorded-time reads require a recorded read relation created by TypeGraph.",
243
170
  { code: "INVALID_RECORDED_READ_BINDING", surface },
244
171
  {
@@ -246,7 +173,7 @@ function requireRecordedReadBinding(binding, surface) {
246
173
  }
247
174
  );
248
175
  }
249
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
176
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
250
177
  "Recorded-time reads require a recorded read relation.",
251
178
  { code: "RECORDED_READ_REQUIRES_BINDING", surface },
252
179
  {
@@ -291,12 +218,666 @@ var ALIAS_CTE_PREFIX = "cte_";
291
218
  var EMBEDDINGS_CTE_ALIAS = "cte_embeddings";
292
219
  var FULLTEXT_CTE_ALIAS = "cte_fulltext";
293
220
  var HYBRID_CANDIDATES_CTE_ALIAS = "cte_relevance_candidates";
221
+
222
+ // src/store/types.ts
223
+ var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
224
+ var TRANSACTION_RUNTIME = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
225
+ "transaction-runtime-v1"
226
+ );
227
+
228
+ // src/store/runtime-port.ts
229
+ var STORE_RUNTIME = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol("store-runtime-v1");
230
+ function storeRuntime(store) {
231
+ const runtime = store[STORE_RUNTIME];
232
+ if (runtime === void 0) {
233
+ throw new TypeError(
234
+ "Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
235
+ );
236
+ }
237
+ return runtime;
238
+ }
239
+ function storeBackend(store) {
240
+ return storeRuntime(store).backend;
241
+ }
242
+ function transactionBackend(transaction) {
243
+ const runtime = transaction[TRANSACTION_RUNTIME];
244
+ if (runtime === void 0) {
245
+ throw new TypeError(
246
+ "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
247
+ );
248
+ }
249
+ return runtime.backend;
250
+ }
251
+ function transactionNodeOperationHookRunner(transaction) {
252
+ const runtime = transaction[TRANSACTION_RUNTIME];
253
+ if (runtime === void 0) {
254
+ throw new TypeError(
255
+ "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
256
+ );
257
+ }
258
+ return runtime.runNodeOperationHooks;
259
+ }
260
+
261
+ // src/query/compiler/temporal.ts
262
+ var pinnedReadInstant;
263
+ function withPinnedReadInstant(emit) {
264
+ if (pinnedReadInstant !== void 0) return emit();
265
+ pinnedReadInstant = chunkDDCYVIVV_cjs.nowIso();
266
+ try {
267
+ return emit();
268
+ } finally {
269
+ pinnedReadInstant = void 0;
270
+ }
271
+ }
272
+ function currentReadInstant() {
273
+ return chunkX6RDQ5NB_cjs.sql`${pinnedReadInstant ?? chunkDDCYVIVV_cjs.nowIso()}`;
274
+ }
275
+ var CURRENT_READ_INSTANT_PLACEHOLDER = "__typegraph_current_read_instant__";
276
+ function currentReadInstantPlaceholder() {
277
+ return chunkX6RDQ5NB_cjs.sql`${chunkX6RDQ5NB_cjs.sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
278
+ }
279
+ function currentReadInstantFor(mode) {
280
+ return mode === "placeholder" ? currentReadInstantPlaceholder() : currentReadInstant();
281
+ }
282
+ function compileTemporalFilter(options) {
283
+ const { mode, asOf, tableAlias, currentTimestamp, recordedAsOf } = options;
284
+ const prefix = tableAlias ? chunkX6RDQ5NB_cjs.sql.raw(`${tableAlias}.`) : chunkX6RDQ5NB_cjs.sql.raw("");
285
+ const deletedAt = chunkX6RDQ5NB_cjs.sql`${prefix}deleted_at`;
286
+ const validFrom = chunkX6RDQ5NB_cjs.sql`${prefix}valid_from`;
287
+ const validTo = chunkX6RDQ5NB_cjs.sql`${prefix}valid_to`;
288
+ const validFilter = (() => {
289
+ switch (mode) {
290
+ case "current": {
291
+ const now = recordedAsOf === void 0 ? currentTimestamp ?? currentReadInstant() : chunkX6RDQ5NB_cjs.sql`${recordedAsOf}`;
292
+ return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
293
+ }
294
+ case "asOf": {
295
+ if (asOf === void 0) {
296
+ throw new Error(
297
+ `asOf timestamp is required for temporal mode "asOf"`
298
+ );
299
+ }
300
+ const timestamp = asOf;
301
+ return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
302
+ }
303
+ case "includeEnded": {
304
+ return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL`;
305
+ }
306
+ case "includeTombstones": {
307
+ return chunkX6RDQ5NB_cjs.sql.raw("1=1");
308
+ }
309
+ }
310
+ })();
311
+ if (recordedAsOf === void 0) return validFilter;
312
+ const recordedFrom = chunkX6RDQ5NB_cjs.sql`${prefix}recorded_from`;
313
+ const recordedTo = chunkX6RDQ5NB_cjs.sql`${prefix}recorded_to`;
314
+ return chunkX6RDQ5NB_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${recordedAsOf} AND ${recordedAsOf} < ${recordedTo}`;
315
+ }
316
+ function extractTemporalOptions(ast, tableAlias) {
317
+ return {
318
+ mode: ast.temporalMode.mode,
319
+ asOf: ast.temporalMode.asOf,
320
+ recordedAsOf: ast.recordedAsOf,
321
+ tableAlias
322
+ };
323
+ }
324
+
325
+ // src/query/subquery-utils.ts
326
+ function normalizeValueType(valueType) {
327
+ if (valueType === void 0 || valueType === "unknown") {
328
+ return void 0;
329
+ }
330
+ return valueType;
331
+ }
332
+ function isUnsupportedInSubqueryValueType(valueType) {
333
+ const normalized = normalizeValueType(valueType);
334
+ return normalized === "array" || normalized === "object" || normalized === "embedding";
335
+ }
336
+ function isInSubqueryTypeCompatible(left, right) {
337
+ const normalizedLeft = normalizeValueType(left);
338
+ const normalizedRight = normalizeValueType(right);
339
+ if (normalizedLeft === void 0 || normalizedRight === void 0) {
340
+ return true;
341
+ }
342
+ return normalizedLeft === normalizedRight;
343
+ }
344
+ function getAggregateValueType(aggregate) {
345
+ switch (aggregate.function) {
346
+ case "count":
347
+ case "countDistinct":
348
+ case "sum":
349
+ case "avg": {
350
+ return "number";
351
+ }
352
+ case "min":
353
+ case "max": {
354
+ return normalizeValueType(aggregate.field.valueType);
355
+ }
356
+ }
357
+ }
358
+ function getProjectedValueTypes(subquery) {
359
+ if (subquery.selectiveFields && subquery.selectiveFields.length > 0) {
360
+ return subquery.selectiveFields.map(
361
+ (field) => normalizeValueType(field.valueType)
362
+ );
363
+ }
364
+ return subquery.projection.fields.map((field) => {
365
+ if (field.source.__type === "aggregate") {
366
+ return getAggregateValueType(field.source);
367
+ }
368
+ return normalizeValueType(field.source.valueType);
369
+ });
370
+ }
371
+ function getSubqueryColumnCount(subquery) {
372
+ return getProjectedValueTypes(subquery).length;
373
+ }
374
+ function getSingleSubqueryColumnValueType(subquery) {
375
+ const valueTypes = getProjectedValueTypes(subquery);
376
+ if (valueTypes.length !== 1) {
377
+ return void 0;
378
+ }
379
+ return valueTypes[0];
380
+ }
381
+
382
+ // src/query/predicates.ts
383
+ function predicate(expr) {
384
+ return {
385
+ __expr: expr,
386
+ and: (other) => predicate({
387
+ __type: "and",
388
+ predicates: [expr, other.__expr]
389
+ }),
390
+ or: (other) => predicate({
391
+ __type: "or",
392
+ predicates: [expr, other.__expr]
393
+ }),
394
+ not: () => predicate({
395
+ __type: "not",
396
+ predicate: expr
397
+ })
398
+ };
399
+ }
400
+ function param(name) {
401
+ if (name === CURRENT_READ_INSTANT_PLACEHOLDER) {
402
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
403
+ `Parameter name "${name}" is reserved for internal use`,
404
+ { parameterName: name }
405
+ );
406
+ }
407
+ return { __type: "parameter", name };
408
+ }
409
+ function isParameterRef(value) {
410
+ if (typeof value !== "object" || value === null) return false;
411
+ return value.__type === "parameter";
412
+ }
413
+ function fieldRef(alias, path, options) {
414
+ return {
415
+ __type: "field_ref",
416
+ alias,
417
+ path,
418
+ ...options?.jsonPointer !== void 0 && {
419
+ jsonPointer: options.jsonPointer
420
+ },
421
+ ...options?.valueType !== void 0 && { valueType: options.valueType },
422
+ ...options?.elementType !== void 0 && {
423
+ elementType: options.elementType
424
+ }
425
+ };
426
+ }
427
+ function coerceLiteralValue(value) {
428
+ if (value instanceof Date) {
429
+ return value;
430
+ }
431
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
432
+ return value;
433
+ }
434
+ throw new Error(`Unsupported literal value type: ${typeof value}`);
435
+ }
436
+ function inferLiteralValueType(value) {
437
+ if (typeof value === "string") {
438
+ return "string";
439
+ }
440
+ if (typeof value === "number") {
441
+ return "number";
442
+ }
443
+ return "boolean";
444
+ }
445
+ function literal(value) {
446
+ if (value instanceof Date) {
447
+ return { __type: "literal", value: value.toISOString(), valueType: "date" };
448
+ }
449
+ const valueType = inferLiteralValueType(value);
450
+ return {
451
+ __type: "literal",
452
+ value,
453
+ valueType
454
+ };
455
+ }
456
+ function comparison(op, field, value) {
457
+ if (isParameterRef(value)) {
458
+ const expr2 = {
459
+ __type: "comparison",
460
+ op,
461
+ left: field,
462
+ right: value
463
+ };
464
+ return predicate(expr2);
465
+ }
466
+ const coercedValue = coerceLiteralValue(value);
467
+ const expr = {
468
+ __type: "comparison",
469
+ op,
470
+ left: field,
471
+ right: literal(coercedValue)
472
+ };
473
+ return predicate(expr);
474
+ }
475
+ function inComparison(op, field, values) {
476
+ const literals = values.map((value) => literal(coerceLiteralValue(value)));
477
+ const expr = {
478
+ __type: "comparison",
479
+ op,
480
+ left: field,
481
+ right: literals
482
+ };
483
+ return predicate(expr);
484
+ }
485
+ function stringOp(op, field, pattern) {
486
+ if (isParameterRef(pattern)) {
487
+ const expr2 = {
488
+ __type: "string_op",
489
+ op,
490
+ field,
491
+ pattern
492
+ };
493
+ return predicate(expr2);
494
+ }
495
+ const expr = {
496
+ __type: "string_op",
497
+ op,
498
+ field,
499
+ pattern
500
+ };
501
+ return predicate(expr);
502
+ }
503
+ function nullCheck(op, field) {
504
+ const expr = {
505
+ __type: "null_check",
506
+ op,
507
+ field
508
+ };
509
+ return predicate(expr);
510
+ }
511
+ function between(field, lower, upper) {
512
+ const expr = {
513
+ __type: "between",
514
+ field,
515
+ lower: isParameterRef(lower) ? lower : literal(lower),
516
+ upper: isParameterRef(upper) ? upper : literal(upper)
517
+ };
518
+ return predicate(expr);
519
+ }
520
+ function baseFieldBuilder(field) {
521
+ return {
522
+ eq: (value) => comparison("eq", field, value),
523
+ neq: (value) => comparison("neq", field, value),
524
+ isNull: () => nullCheck("isNull", field),
525
+ isNotNull: () => nullCheck("isNotNull", field),
526
+ in: (values) => inComparison("in", field, values),
527
+ notIn: (values) => inComparison("notIn", field, values)
528
+ };
529
+ }
530
+ function stringField(field) {
531
+ return {
532
+ ...baseFieldBuilder(field),
533
+ gt: (value) => comparison("gt", field, value),
534
+ gte: (value) => comparison("gte", field, value),
535
+ lt: (value) => comparison("lt", field, value),
536
+ lte: (value) => comparison("lte", field, value),
537
+ contains: (pattern) => stringOp("contains", field, pattern),
538
+ startsWith: (pattern) => stringOp("startsWith", field, pattern),
539
+ endsWith: (pattern) => stringOp("endsWith", field, pattern),
540
+ like: (pattern) => stringOp("like", field, pattern),
541
+ ilike: (pattern) => stringOp("ilike", field, pattern)
542
+ };
543
+ }
544
+ var DEFAULT_FULLTEXT_MATCH_K = 50;
545
+ function createFulltextAccessor(alias, hasSearchableField) {
546
+ return {
547
+ matches: (query, k, options) => {
548
+ if (!hasSearchableField()) {
549
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
550
+ `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" })\`.`
551
+ );
552
+ }
553
+ return fulltextMatch(
554
+ fieldRef(alias, ["$fulltext"]),
555
+ query,
556
+ k ?? DEFAULT_FULLTEXT_MATCH_K,
557
+ options
558
+ );
559
+ }
560
+ };
561
+ }
562
+ function fulltextMatch(field, query, limit, options) {
563
+ if (!Number.isFinite(limit) || limit <= 0) {
564
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
565
+ `matches() limit must be a positive finite number, got ${String(limit)}`
566
+ );
567
+ }
568
+ const expr = {
569
+ __type: "fulltext_match",
570
+ field,
571
+ query,
572
+ mode: options?.mode ?? "websearch",
573
+ limit,
574
+ ...options?.language === void 0 ? {} : { language: options.language },
575
+ ...options?.minScore === void 0 ? {} : { minScore: options.minScore }
576
+ };
577
+ return predicate(expr);
578
+ }
579
+ function numberField(field) {
580
+ return {
581
+ ...baseFieldBuilder(field),
582
+ gt: (value) => comparison("gt", field, value),
583
+ gte: (value) => comparison("gte", field, value),
584
+ lt: (value) => comparison("lt", field, value),
585
+ lte: (value) => comparison("lte", field, value),
586
+ between: (lower, upper) => between(field, lower, upper)
587
+ };
588
+ }
589
+ function dateField(field) {
590
+ return {
591
+ ...baseFieldBuilder(field),
592
+ gt: (value) => comparison("gt", field, value),
593
+ gte: (value) => comparison("gte", field, value),
594
+ lt: (value) => comparison("lt", field, value),
595
+ lte: (value) => comparison("lte", field, value),
596
+ between: (lower, upper) => between(field, lower, upper)
597
+ };
598
+ }
599
+ function baseField(field) {
600
+ return baseFieldBuilder(field);
601
+ }
602
+ function arrayOp(op, field, values, length) {
603
+ const expr = {
604
+ __type: "array_op",
605
+ op,
606
+ field,
607
+ ...values !== void 0 && {
608
+ values: values.map((value) => literal(coerceLiteralValue(value)))
609
+ },
610
+ ...length !== void 0 && { length }
611
+ };
612
+ return predicate(expr);
613
+ }
614
+ function arrayField(field) {
615
+ return {
616
+ ...baseFieldBuilder(field),
617
+ contains: (value) => arrayOp("contains", field, [value]),
618
+ containsAll: (values) => arrayOp("containsAll", field, values),
619
+ containsAny: (values) => arrayOp("containsAny", field, values),
620
+ isEmpty: () => arrayOp("isEmpty", field),
621
+ isNotEmpty: () => arrayOp("isNotEmpty", field),
622
+ lengthEq: (length) => arrayOp("lengthEq", field, void 0, length),
623
+ lengthGt: (length) => arrayOp("lengthGt", field, void 0, length),
624
+ lengthGte: (length) => arrayOp("lengthGte", field, void 0, length),
625
+ lengthLt: (length) => arrayOp("lengthLt", field, void 0, length),
626
+ lengthLte: (length) => arrayOp("lengthLte", field, void 0, length)
627
+ };
628
+ }
629
+ function vectorSimilarity(field, queryEmbedding, limit, options) {
630
+ const expr = {
631
+ __type: "vector_similarity",
632
+ field,
633
+ queryEmbedding,
634
+ // Leave metric unset when the caller didn't specify one, so the compiler
635
+ // resolves the field's declared metric per kind. Defaulting to "cosine"
636
+ // here would mis-rank l2/inner_product fields and bypass their ANN index.
637
+ ...options?.metric !== void 0 && { metric: options.metric },
638
+ limit,
639
+ ...options?.minScore !== void 0 && { minScore: options.minScore },
640
+ ...options?.approximate !== void 0 && {
641
+ approximate: options.approximate
642
+ }
643
+ };
644
+ return predicate(expr);
645
+ }
646
+ function embeddingField(field) {
647
+ return {
648
+ ...baseFieldBuilder(field),
649
+ similarTo: (queryEmbedding, k, options) => vectorSimilarity(field, queryEmbedding, k, options)
650
+ };
651
+ }
652
+ function buildFieldBuilderForTypeInfo(field, typeInfo) {
653
+ if (!typeInfo) {
654
+ return baseField(field);
655
+ }
656
+ switch (typeInfo.valueType) {
657
+ case "string": {
658
+ return stringField(field);
659
+ }
660
+ case "number": {
661
+ return numberField(field);
662
+ }
663
+ case "boolean": {
664
+ return baseField(field);
665
+ }
666
+ case "date": {
667
+ return dateField(field);
668
+ }
669
+ case "array": {
670
+ return arrayField(field);
671
+ }
672
+ case "object": {
673
+ return objectField(field, { typeInfo });
674
+ }
675
+ case "embedding": {
676
+ return embeddingField(field);
677
+ }
678
+ case "unknown": {
679
+ return baseField(field);
680
+ }
681
+ }
682
+ }
683
+ function resolvePointerTypeInfo(typeInfo, pointer) {
684
+ return chunkSJDMVITW_cjs.resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
685
+ }
686
+ function objectOp(op, field, pointer, value, options) {
687
+ const expr = {
688
+ __type: "object_op",
689
+ op,
690
+ field,
691
+ pointer,
692
+ ...value !== void 0 && {
693
+ value: literal(coerceLiteralValue(value))
694
+ },
695
+ ...options?.valueType !== void 0 && { valueType: options.valueType },
696
+ ...options?.elementType !== void 0 && {
697
+ elementType: options.elementType
698
+ }
699
+ };
700
+ return predicate(expr);
701
+ }
702
+ function objectField(field, options) {
703
+ const basePointer = field.jsonPointer;
704
+ return {
705
+ ...baseFieldBuilder(field),
706
+ get: (key) => {
707
+ const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
708
+ const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, pointer);
709
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, pointer);
710
+ const nestedRef = fieldRef(field.alias, field.path, {
711
+ jsonPointer: nestedPointer,
712
+ ...resolved?.valueType !== void 0 && {
713
+ valueType: resolved.valueType
714
+ },
715
+ ...resolved?.elementType !== void 0 && {
716
+ elementType: resolved.elementType
717
+ }
718
+ });
719
+ return buildFieldBuilderForTypeInfo(nestedRef, resolved);
720
+ },
721
+ hasKey: (key) => {
722
+ const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
723
+ resolvePointerTypeInfo(options?.typeInfo, pointer);
724
+ return objectOp("hasKey", field, pointer);
725
+ },
726
+ hasPath: (pointer) => {
727
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
728
+ resolvePointerTypeInfo(options?.typeInfo, normalized);
729
+ return objectOp("hasPath", field, normalized);
730
+ },
731
+ pathEquals: (pointer, value) => {
732
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
733
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
734
+ if (resolved && (resolved.valueType === "array" || resolved.valueType === "object")) {
735
+ throw new Error("pathEquals is only supported for scalar JSON values");
736
+ }
737
+ const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
738
+ return objectOp("pathEquals", field, normalized, value, predicateOptions);
739
+ },
740
+ pathContains: (pointer, value) => {
741
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
742
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
743
+ if (resolved && resolved.valueType !== "array") {
744
+ throw new Error("pathContains is only supported for JSON array values");
745
+ }
746
+ const predicateOptions = resolved?.elementType === void 0 ? void 0 : { elementType: resolved.elementType };
747
+ return objectOp(
748
+ "pathContains",
749
+ field,
750
+ normalized,
751
+ value,
752
+ predicateOptions
753
+ );
754
+ },
755
+ pathIsNull: (pointer) => {
756
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
757
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
758
+ const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
759
+ return objectOp(
760
+ "pathIsNull",
761
+ field,
762
+ normalized,
763
+ void 0,
764
+ predicateOptions
765
+ );
766
+ },
767
+ pathIsNotNull: (pointer) => {
768
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
769
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
770
+ const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
771
+ return objectOp(
772
+ "pathIsNotNull",
773
+ field,
774
+ normalized,
775
+ void 0,
776
+ predicateOptions
777
+ );
778
+ },
779
+ field: (pointer) => {
780
+ const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
781
+ const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, normalized);
782
+ const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
783
+ const nestedRef = fieldRef(field.alias, field.path, {
784
+ jsonPointer: nestedPointer,
785
+ ...resolved?.valueType !== void 0 && {
786
+ valueType: resolved.valueType
787
+ },
788
+ ...resolved?.elementType !== void 0 && {
789
+ elementType: resolved.elementType
790
+ }
791
+ });
792
+ return buildFieldBuilderForTypeInfo(nestedRef, resolved);
793
+ }
794
+ };
795
+ }
796
+ function exists(subquery) {
797
+ const expr = {
798
+ __type: "exists",
799
+ subquery,
800
+ negated: false
801
+ };
802
+ return predicate(expr);
803
+ }
804
+ function notExists(subquery) {
805
+ const expr = {
806
+ __type: "exists",
807
+ subquery,
808
+ negated: true
809
+ };
810
+ return predicate(expr);
811
+ }
812
+ function inSubquery(field, subquery) {
813
+ assertSingleColumnSubquery(subquery);
814
+ assertCompatibleSubqueryValueTypes(field, subquery);
815
+ const expr = {
816
+ __type: "in_subquery",
817
+ field,
818
+ subquery,
819
+ negated: false
820
+ };
821
+ return predicate(expr);
822
+ }
823
+ function notInSubquery(field, subquery) {
824
+ assertSingleColumnSubquery(subquery);
825
+ assertCompatibleSubqueryValueTypes(field, subquery);
826
+ const expr = {
827
+ __type: "in_subquery",
828
+ field,
829
+ subquery,
830
+ negated: true
831
+ };
832
+ return predicate(expr);
833
+ }
834
+ function assertSingleColumnSubquery(subquery) {
835
+ const columnCount = getSubqueryColumnCount(subquery);
836
+ if (columnCount === 1) return;
837
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
838
+ `IN/NOT IN subquery must project exactly 1 column, but got ${columnCount}`,
839
+ { subqueryColumnCount: columnCount },
840
+ {
841
+ suggestion: "Use aggregate() with exactly one projected field for scalar IN/NOT IN subqueries."
842
+ }
843
+ );
844
+ }
845
+ function assertCompatibleSubqueryValueTypes(field, subquery) {
846
+ const fieldValueType = field.valueType;
847
+ const subqueryValueType = getSingleSubqueryColumnValueType(subquery);
848
+ const resolvedValueType = fieldValueType ?? subqueryValueType;
849
+ if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
850
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
851
+ `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
852
+ { valueType: resolvedValueType },
853
+ {
854
+ suggestion: "Use scalar fields (string/number/boolean/date) in IN/NOT IN predicates."
855
+ }
856
+ );
857
+ }
858
+ if (isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
859
+ return;
860
+ }
861
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
862
+ `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
863
+ {
864
+ fieldValueType,
865
+ subqueryValueType
866
+ }
867
+ );
868
+ }
294
869
  function generateId() {
295
870
  return nanoid.nanoid();
296
871
  }
872
+
873
+ // src/store/recorded-capture/guards.ts
874
+ var RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK = {
875
+ postgres: true,
876
+ sqlite: false
877
+ };
297
878
  function requireRecordedSchema(target) {
298
879
  if (target.tableNames === void 0) {
299
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
880
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
300
881
  "Recorded-time capture requires the backend to expose tableNames.",
301
882
  { dialect: target.dialect },
302
883
  {
@@ -308,7 +889,7 @@ function requireRecordedSchema(target) {
308
889
  }
309
890
  function requireCaptureStatements(target) {
310
891
  if (target.executeStatement === void 0) {
311
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
892
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
312
893
  "Recorded-time capture requires backend.executeStatement support on the transaction backend.",
313
894
  { dialect: target.dialect },
314
895
  {
@@ -319,10 +900,10 @@ function requireCaptureStatements(target) {
319
900
  }
320
901
  async function executeStatement(target, query) {
321
902
  requireCaptureStatements(target);
322
- await target.executeStatement(chunkIPSVVTWT_cjs.asCompiledStatementSql(query));
903
+ await target.executeStatement(chunkX6RDQ5NB_cjs.asCompiledStatementSql(query));
323
904
  }
324
905
  function unsupportedPostgresIsolationError(isolationLevel) {
325
- return new chunkBVRDGYXQ_cjs.ConfigurationError(
906
+ return new chunkSAFZ6JTI_cjs.ConfigurationError(
326
907
  "Recorded-time capture on PostgreSQL requires read_committed isolation.",
327
908
  { isolationLevel: isolationLevel ?? "unknown" },
328
909
  {
@@ -334,7 +915,7 @@ function isSupportedRecordedIsolationLevel(isolationLevel) {
334
915
  return isolationLevel === void 0 || isolationLevel === "read_committed" || isolationLevel === "read_uncommitted";
335
916
  }
336
917
  function assertRequestedRecordedIsolation(backend, options) {
337
- if (backend.dialect !== "postgres") return;
918
+ if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[backend.dialect]) return;
338
919
  if (options?.accessMode === "read_only") return;
339
920
  const isolationLevel = options?.isolationLevel;
340
921
  if (isSupportedRecordedIsolationLevel(isolationLevel)) return;
@@ -345,10 +926,10 @@ function normalizeIsolationLevel(value) {
345
926
  return value.replaceAll(" ", "_").toLowerCase();
346
927
  }
347
928
  async function assertRecordedCaptureTransactionIsolation(target, options) {
348
- if (target.dialect !== "postgres") return;
929
+ if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[target.dialect]) return;
349
930
  if (options?.accessMode === "read_only") return;
350
931
  const rows = await target.execute(
351
- chunkIPSVVTWT_cjs.asCompiledRowsSql(drizzleOrm.sql`
932
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
352
933
  SELECT current_setting('transaction_isolation') AS transaction_isolation
353
934
  `)
354
935
  );
@@ -359,7 +940,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
359
940
  throw unsupportedPostgresIsolationError(isolationLevel);
360
941
  }
361
942
  function recordedCaptureRequiresCallbackTransactionError(details = {}) {
362
- return new chunkBVRDGYXQ_cjs.ConfigurationError(
943
+ return new chunkSAFZ6JTI_cjs.ConfigurationError(
363
944
  "withTransaction() has no recorded-time capture flush point when history is enabled.",
364
945
  {
365
946
  ...details,
@@ -371,7 +952,7 @@ function recordedCaptureRequiresCallbackTransactionError(details = {}) {
371
952
  );
372
953
  }
373
954
  function historyUnsafeRawWriteError(surface) {
374
- return new chunkBVRDGYXQ_cjs.ConfigurationError(
955
+ return new chunkSAFZ6JTI_cjs.ConfigurationError(
375
956
  `${surface} is not available when history capture is enabled because raw SQL writes bypass recorded-time capture.`,
376
957
  {
377
958
  code: "RECORDED_CAPTURE_RAW_SQL_DISABLED"
@@ -382,7 +963,7 @@ function historyUnsafeRawWriteError(surface) {
382
963
  );
383
964
  }
384
965
  function revisionTrackingUnsafeRawWriteError(surface) {
385
- return new chunkBVRDGYXQ_cjs.ConfigurationError(
966
+ return new chunkSAFZ6JTI_cjs.ConfigurationError(
386
967
  `${surface} is not available when revision tracking is enabled because raw SQL writes bypass the revision anchor.`,
387
968
  {
388
969
  code: "REVISION_TRACKING_RAW_SQL_DISABLED"
@@ -392,57 +973,12 @@ function revisionTrackingUnsafeRawWriteError(surface) {
392
973
  }
393
974
  );
394
975
  }
395
- function failHistoryUnsafeSqlRef() {
976
+ function throwHistoryUnsafeSqlAccess() {
396
977
  throw historyUnsafeRawWriteError("tx.sql");
397
978
  }
398
- function failRevisionTrackingUnsafeSqlRef() {
979
+ function throwRevisionTrackingUnsafeSqlAccess() {
399
980
  throw revisionTrackingUnsafeRawWriteError("tx.sql");
400
981
  }
401
- function createHistoryUnsafeSqlRef() {
402
- return createUnsafeSqlRef(failHistoryUnsafeSqlRef);
403
- }
404
- function createRevisionTrackingUnsafeSqlRef() {
405
- return createUnsafeSqlRef(failRevisionTrackingUnsafeSqlRef);
406
- }
407
- function createUnsafeSqlRef(fail) {
408
- return new Proxy(
409
- function unsafeSqlRef() {
410
- return fail();
411
- },
412
- {
413
- get() {
414
- return fail();
415
- },
416
- apply() {
417
- return fail();
418
- },
419
- set() {
420
- return fail();
421
- },
422
- defineProperty() {
423
- return fail();
424
- },
425
- deleteProperty() {
426
- return fail();
427
- },
428
- // Enumeration / inspection traps too, so spreading (`{...tx.sql}`),
429
- // `Object.keys`, `in`, and prototype reads also fail loudly rather than
430
- // silently yielding an empty object that reads as "no raw handle".
431
- has() {
432
- return fail();
433
- },
434
- ownKeys() {
435
- return fail();
436
- },
437
- getOwnPropertyDescriptor() {
438
- return fail();
439
- },
440
- getPrototypeOf() {
441
- return fail();
442
- }
443
- }
444
- );
445
- }
446
982
  function rawWriteGuards(target, prefix) {
447
983
  return {
448
984
  ...target.executeStatement === void 0 ? {} : {
@@ -463,7 +999,7 @@ function rawWriteGuards(target, prefix) {
463
999
  }
464
1000
  function assertCapturableBackend(backend) {
465
1001
  if (!backend.capabilities.transactions) {
466
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1002
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
467
1003
  "history: true requires a backend with transaction support.",
468
1004
  { dialect: backend.dialect },
469
1005
  {
@@ -472,7 +1008,7 @@ function assertCapturableBackend(backend) {
472
1008
  );
473
1009
  }
474
1010
  if (backend.executeStatement === void 0) {
475
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1011
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
476
1012
  "history: true requires a backend that supports executeStatement.",
477
1013
  { dialect: backend.dialect },
478
1014
  {
@@ -481,7 +1017,7 @@ function assertCapturableBackend(backend) {
481
1017
  );
482
1018
  }
483
1019
  if (backend.capabilities.returning === false) {
484
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1020
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
485
1021
  "history: true requires a backend that supports UPDATE \u2026 RETURNING.",
486
1022
  { dialect: backend.dialect },
487
1023
  {
@@ -490,7 +1026,7 @@ function assertCapturableBackend(backend) {
490
1026
  );
491
1027
  }
492
1028
  if (backend.tableNames === void 0) {
493
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1029
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
494
1030
  "history: true requires a backend that exposes tableNames.",
495
1031
  { dialect: backend.dialect },
496
1032
  {
@@ -501,7 +1037,7 @@ function assertCapturableBackend(backend) {
501
1037
  }
502
1038
  function assertRevisionTrackableBackend(backend) {
503
1039
  if (!backend.capabilities.transactions) {
504
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1040
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
505
1041
  "revisionTracking: true requires a backend with transaction support.",
506
1042
  { dialect: backend.dialect },
507
1043
  {
@@ -510,7 +1046,7 @@ function assertRevisionTrackableBackend(backend) {
510
1046
  );
511
1047
  }
512
1048
  if (backend.executeStatement === void 0) {
513
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1049
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
514
1050
  "revisionTracking: true requires a backend that supports executeStatement.",
515
1051
  { dialect: backend.dialect },
516
1052
  {
@@ -519,7 +1055,7 @@ function assertRevisionTrackableBackend(backend) {
519
1055
  );
520
1056
  }
521
1057
  if (backend.tableNames === void 0) {
522
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1058
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
523
1059
  "revisionTracking: true requires a backend that exposes tableNames.",
524
1060
  { dialect: backend.dialect },
525
1061
  {
@@ -528,7 +1064,7 @@ function assertRevisionTrackableBackend(backend) {
528
1064
  );
529
1065
  }
530
1066
  if (backend.ensureRevisionOriginsTable === void 0) {
531
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1067
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
532
1068
  "revisionTracking: true requires a backend that can bootstrap revision origins.",
533
1069
  { dialect: backend.dialect },
534
1070
  {
@@ -540,11 +1076,15 @@ function assertRevisionTrackableBackend(backend) {
540
1076
 
541
1077
  // src/store/recorded-capture/clock.ts
542
1078
  var RECORDED_MIN = "1970-01-01T00:00:00.000Z";
543
- var RECORDED_MAX_TIME = new Date(RECORDED_MAX).getTime();
1079
+ var RECORDED_MAX_TIME = new Date(chunkSVUKGWSN_cjs.RECORDED_MAX).getTime();
544
1080
  var RECORDED_CLOCK_ADVISORY_LOCK_NAMESPACE = "typegraph:recorded-clock";
545
1081
  var RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE = "typegraph:recorded-graph-write";
1082
+ var USES_RECORDED_GRAPH_ADVISORY_LOCK = {
1083
+ postgres: true,
1084
+ sqlite: false
1085
+ };
546
1086
  function graphAdvisoryLockSql(namespace, graphId) {
547
- return drizzleOrm.sql`
1087
+ return chunkX6RDQ5NB_cjs.sql`
548
1088
  SELECT pg_advisory_xact_lock(
549
1089
  hashtext(${namespace}),
550
1090
  hashtext(${graphId})
@@ -576,11 +1116,13 @@ function registerRecordedGraphLockMemo(backend, memo) {
576
1116
  }
577
1117
  async function acquireRecordedGraphWriteLock(target, graphId) {
578
1118
  await target.execute(
579
- chunkIPSVVTWT_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
1119
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
580
1120
  );
581
1121
  }
582
1122
  async function lockRecordedGraphWrite(target, graphId, memo) {
583
- if (target.dialect !== "postgres") return graphWriteLockEvidence();
1123
+ if (!USES_RECORDED_GRAPH_ADVISORY_LOCK[target.dialect]) {
1124
+ return graphWriteLockEvidence();
1125
+ }
584
1126
  const effectiveMemo = memo ?? recordedGraphLockMemos.get(target);
585
1127
  if (effectiveMemo === void 0) {
586
1128
  await acquireRecordedGraphWriteLock(target, graphId);
@@ -600,7 +1142,7 @@ async function lockRecordedGraphWrite(target, graphId, memo) {
600
1142
  return graphWriteLockEvidence();
601
1143
  }
602
1144
  function failInvalidClockTimestamp(value) {
603
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1145
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
604
1146
  "Recorded clock row contained an invalid timestamp",
605
1147
  { value }
606
1148
  );
@@ -622,7 +1164,9 @@ function clockTimestampMs(value) {
622
1164
  const offsetMatch = OFFSET_DATETIME_PATTERN.exec(value);
623
1165
  if (offsetMatch) {
624
1166
  const [, date, time, offset] = offsetMatch;
625
- return Date.parse(`${date}T${time}${normalizeOffsetDesignator(offset)}`);
1167
+ return Date.parse(
1168
+ `${date}T${time}${normalizeOffsetDesignator(chunk764JHTLT_cjs.requireDefined(offset))}`
1169
+ );
626
1170
  }
627
1171
  return Date.parse(value);
628
1172
  }
@@ -639,12 +1183,12 @@ function toCanonicalIso(value) {
639
1183
  return failInvalidClockTimestamp(value);
640
1184
  }
641
1185
  function nextRecordedCommitTime(previous) {
642
- const wallTime = Date.parse(chunk3GH67G4Z_cjs.nowIso());
1186
+ const wallTime = Date.parse(chunkDDCYVIVV_cjs.nowIso());
643
1187
  return previous === void 0 ? wallTime : Math.max(wallTime, Date.parse(previous) + 1);
644
1188
  }
645
1189
  async function readRecordedClock(target, schema, graphId) {
646
1190
  const rows = await target.execute(
647
- chunkIPSVVTWT_cjs.asCompiledRowsSql(drizzleOrm.sql`
1191
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
648
1192
  SELECT recorded_at
649
1193
  FROM ${schema.recordedClockTable}
650
1194
  WHERE graph_id = ${graphId}
@@ -655,7 +1199,7 @@ async function readRecordedClock(target, schema, graphId) {
655
1199
  }
656
1200
  async function readRevisionOrigin(target, schema, graphId) {
657
1201
  const rows = await target.execute(
658
- chunkIPSVVTWT_cjs.asCompiledRowsSql(drizzleOrm.sql`
1202
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
659
1203
  SELECT origin
660
1204
  FROM ${schema.revisionOriginsTable}
661
1205
  WHERE graph_id = ${graphId}
@@ -664,7 +1208,7 @@ async function readRevisionOrigin(target, schema, graphId) {
664
1208
  const first = rows[0];
665
1209
  if (first === void 0) return void 0;
666
1210
  if (typeof first.origin !== "string" || first.origin.length === 0) {
667
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1211
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
668
1212
  "Revision origin row contained an invalid origin",
669
1213
  { graphId, origin: first.origin }
670
1214
  );
@@ -674,7 +1218,7 @@ async function readRevisionOrigin(target, schema, graphId) {
674
1218
  async function ensureRevisionOrigin(target, schema, graphId) {
675
1219
  const ensureTable = target.ensureRevisionOriginsTable;
676
1220
  if (ensureTable === void 0) {
677
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1221
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
678
1222
  "Revision tracking requires a backend that can bootstrap revision origins.",
679
1223
  { dialect: target.dialect },
680
1224
  {
@@ -687,7 +1231,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
687
1231
  if (existing !== void 0) return existing;
688
1232
  await executeStatement(
689
1233
  target,
690
- drizzleOrm.sql`
1234
+ chunkX6RDQ5NB_cjs.sql`
691
1235
  INSERT INTO ${schema.revisionOriginsTable} (graph_id, origin)
692
1236
  VALUES (${graphId}, ${generateId()})
693
1237
  ON CONFLICT (graph_id) DO NOTHING
@@ -695,7 +1239,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
695
1239
  );
696
1240
  const origin = await readRevisionOrigin(target, schema, graphId);
697
1241
  if (origin !== void 0) return origin;
698
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
1242
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
699
1243
  "Revision origin was not persisted after initialization.",
700
1244
  { graphId, dialect: target.dialect }
701
1245
  );
@@ -703,7 +1247,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
703
1247
  async function writeRecordedClock(target, schema, graphId, recordedAt) {
704
1248
  await executeStatement(
705
1249
  target,
706
- drizzleOrm.sql`
1250
+ chunkX6RDQ5NB_cjs.sql`
707
1251
  INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
708
1252
  VALUES (${graphId}, ${recordedAt})
709
1253
  ON CONFLICT (graph_id) DO UPDATE SET recorded_at = ${recordedAt}
@@ -711,29 +1255,37 @@ async function writeRecordedClock(target, schema, graphId, recordedAt) {
711
1255
  );
712
1256
  }
713
1257
  async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
714
- if (target.dialect === "postgres") {
715
- await target.execute(
716
- chunkIPSVVTWT_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
717
- );
718
- return;
1258
+ switch (target.dialect) {
1259
+ case "postgres": {
1260
+ await target.execute(
1261
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
1262
+ );
1263
+ return;
1264
+ }
1265
+ case "sqlite": {
1266
+ if (ownsWriteLock) return;
1267
+ await executeStatement(
1268
+ target,
1269
+ chunkX6RDQ5NB_cjs.sql`
1270
+ INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
1271
+ VALUES (${graphId}, ${RECORDED_MIN})
1272
+ ON CONFLICT (graph_id) DO UPDATE SET recorded_at = recorded_at
1273
+ `
1274
+ );
1275
+ return;
1276
+ }
1277
+ default: {
1278
+ target.dialect;
1279
+ }
719
1280
  }
720
- if (ownsWriteLock) return;
721
- await executeStatement(
722
- target,
723
- drizzleOrm.sql`
724
- INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
725
- VALUES (${graphId}, ${RECORDED_MIN})
726
- ON CONFLICT (graph_id) DO UPDATE SET recorded_at = recorded_at
727
- `
728
- );
729
1281
  }
730
1282
  async function allocateRecordedCommit(target, schema, graphId, ownsWriteLock, previousRevision) {
731
1283
  await lockRecordedClock(target, schema, graphId, ownsWriteLock);
732
1284
  const previous = previousRevision ?? await readRecordedClock(target, schema, graphId);
733
1285
  const recordedCommitTime = nextRecordedCommitTime(previous);
734
1286
  if (!Number.isFinite(recordedCommitTime) || recordedCommitTime >= RECORDED_MAX_TIME) {
735
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
736
- `Recorded commit clock reached the open sentinel ${RECORDED_MAX}`,
1287
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
1288
+ `Recorded commit clock reached the open sentinel ${chunkSVUKGWSN_cjs.RECORDED_MAX}`,
737
1289
  { graphId, recordedCommitTime },
738
1290
  {
739
1291
  suggestion: "Use a graph with a normal recorded-time clock; the open sentinel is reserved for relation intervals."
@@ -754,21 +1306,125 @@ async function advanceRevisionClock(target, schema, graphId, ownsWriteLock, prev
754
1306
  );
755
1307
  }
756
1308
 
1309
+ // src/backend/graph-backend-projection.ts
1310
+ var GRAPH_BACKEND_PROJECTION_KEYS = [
1311
+ "dialect",
1312
+ "capabilities",
1313
+ "tableNames",
1314
+ "fulltextStrategy",
1315
+ "vectorStrategy",
1316
+ "insertNode",
1317
+ "insertNodeNoReturn",
1318
+ "insertNodesBatch",
1319
+ "insertNodesBatchReturning",
1320
+ "updateNode",
1321
+ "deleteNode",
1322
+ "hardDeleteNode",
1323
+ "getNode",
1324
+ "getNodes",
1325
+ "insertEdge",
1326
+ "insertEdgeNoReturn",
1327
+ "insertEdgesBatch",
1328
+ "insertEdgesBatchReturning",
1329
+ "updateEdge",
1330
+ "deleteEdge",
1331
+ "hardDeleteEdge",
1332
+ "deleteEdgesBatch",
1333
+ "hardDeleteEdgesBatch",
1334
+ "getEdge",
1335
+ "getEdges",
1336
+ "countEdgesFrom",
1337
+ "edgeExistsBetween",
1338
+ "findEdgesConnectedTo",
1339
+ "findNodesByKind",
1340
+ "countNodesByKind",
1341
+ "findEdgesByKind",
1342
+ "countEdgesByKind",
1343
+ "insertUnique",
1344
+ "insertUniqueBatch",
1345
+ "deleteUnique",
1346
+ "checkUnique",
1347
+ "checkUniqueBatch",
1348
+ "getActiveSchema",
1349
+ "getSchemaVersion",
1350
+ "commitSchemaVersion",
1351
+ "setActiveVersion",
1352
+ "upsertEmbedding",
1353
+ "upsertEmbeddingBatch",
1354
+ "deleteEmbedding",
1355
+ "vectorSearch",
1356
+ "createVectorIndex",
1357
+ "dropVectorIndex",
1358
+ "hybridSearch",
1359
+ "upsertFulltext",
1360
+ "deleteFulltext",
1361
+ "upsertFulltextBatch",
1362
+ "deleteFulltextBatch",
1363
+ "fulltextSearch",
1364
+ "ensureIndexMaterializationsTable",
1365
+ "ensureRevisionOriginsTable",
1366
+ "getIndexMaterialization",
1367
+ "getIndexMaterializations",
1368
+ "recordIndexMaterialization",
1369
+ "claimIndexMaterialization",
1370
+ "releaseIndexMaterializationClaim",
1371
+ "ensureContributionMaterializationsTable",
1372
+ "getContributionMaterialization",
1373
+ "recordContributionMaterialization",
1374
+ "assertRuntimeContributionsInitialized",
1375
+ "ensureKindRemovalsTable",
1376
+ "getPendingKindRemovals",
1377
+ "getAllKindRemovals",
1378
+ "recordKindRemoval",
1379
+ "ensureReconciliationMarkersTable",
1380
+ "ensureRuntimeContributions",
1381
+ "ensureVectorSlotContribution",
1382
+ "ensureVectorSlotContributions",
1383
+ "assertVectorSlotInitialized",
1384
+ "assertVectorSlotsInitialized",
1385
+ "deleteVectorSlotContribution",
1386
+ "ensureFulltextTable",
1387
+ "getReconciliationMarker",
1388
+ "setReconciliationMarker",
1389
+ "clearGraph",
1390
+ "bootstrapTables",
1391
+ "refreshStatistics",
1392
+ "trustedImport",
1393
+ "execute",
1394
+ "executeStatement",
1395
+ "executeTemporaryStatement",
1396
+ "executeRaw",
1397
+ "compileSql",
1398
+ "executeDdl",
1399
+ "transaction",
1400
+ "close"
1401
+ ];
1402
+ function projectBackendMembers(backend, keys) {
1403
+ const entries = keys.flatMap((key) => {
1404
+ if (!Reflect.has(backend, key)) return [];
1405
+ return [[key, Reflect.get(backend, key)]];
1406
+ });
1407
+ return Object.fromEntries(entries);
1408
+ }
1409
+ function createGraphBackendProjection(backend) {
1410
+ return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
1411
+ }
1412
+
757
1413
  // src/store/insert-dispatch.ts
758
1414
  function nodeInsertDispatch(backend) {
759
1415
  return {
760
1416
  one: (params) => backend.insertNode(params),
761
- oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => backend.insertNodeNoReturn(params),
762
- batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => backend.insertNodesBatch(params),
763
- batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => backend.insertNodesBatchReturning(params)
1417
+ oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodeNoReturn)(params),
1418
+ batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatch)(params),
1419
+ batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatchReturning)(params)
764
1420
  };
765
1421
  }
766
1422
  function edgeInsertDispatch(backend) {
767
1423
  return {
768
1424
  one: (params) => backend.insertEdge(params),
769
- oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => backend.insertEdgeNoReturn(params),
770
- batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => backend.insertEdgesBatch(params),
771
- batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => backend.insertEdgesBatchReturning(params)
1425
+ oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
1426
+ batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatch)(params),
1427
+ batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatchReturning)(params)
772
1428
  };
773
1429
  }
774
1430
  async function runInsertNoReturn(dispatch, params) {
@@ -799,6 +1455,680 @@ async function runInsertBatchReturning(dispatch, params) {
799
1455
  return rows;
800
1456
  }
801
1457
 
1458
+ // src/query/compiler/predicates.ts
1459
+ var COMPARISON_OP_SQL = {
1460
+ eq: "=",
1461
+ neq: "!=",
1462
+ gt: ">",
1463
+ gte: ">=",
1464
+ lt: "<",
1465
+ lte: "<="
1466
+ };
1467
+ function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
1468
+ if (cteColumnPrefix !== void 0) {
1469
+ const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
1470
+ if (field.path.length === 1 && field.path[0] === "id") {
1471
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}id`);
1472
+ }
1473
+ if (field.path.length === 1 && field.path[0] === "kind") {
1474
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}kind`);
1475
+ }
1476
+ if (field.path.length > 0 && field.path[0] === "props") {
1477
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}props`);
1478
+ }
1479
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
1480
+ }
1481
+ const prefix = field.alias;
1482
+ const qualifier = cteAlias ? `${cteAlias}.` : "";
1483
+ if (field.path.length === 1 && field.path[0] === "id") {
1484
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_id`);
1485
+ }
1486
+ if (field.path.length === 1 && field.path[0] === "kind") {
1487
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_kind`);
1488
+ }
1489
+ if (field.path.length > 0 && field.path[0] === "props") {
1490
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_props`);
1491
+ }
1492
+ return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
1493
+ }
1494
+ function getFieldPointer(field) {
1495
+ if (field.jsonPointer !== void 0) {
1496
+ return field.jsonPointer;
1497
+ }
1498
+ if (field.path.length > 1 && field.path[0] === "props") {
1499
+ return chunkTDXIBCGY_cjs.jsonPointer(field.path.slice(1));
1500
+ }
1501
+ return void 0;
1502
+ }
1503
+ function isJsonField(field) {
1504
+ return field.path.length > 0 && field.path[0] === "props";
1505
+ }
1506
+ function normalizeValueType2(valueType) {
1507
+ if (!valueType || valueType === "unknown") {
1508
+ return void 0;
1509
+ }
1510
+ return valueType;
1511
+ }
1512
+ function compileFieldValue(field, dialect, valueType, cteAlias, pointerOverride, cteColumnPrefix) {
1513
+ const resolved = normalizeValueType2(valueType);
1514
+ const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
1515
+ if (!isJsonField(field)) {
1516
+ return column;
1517
+ }
1518
+ const pointer = pointerOverride ?? getFieldPointer(field);
1519
+ if (!pointer || pointer === "") {
1520
+ return column;
1521
+ }
1522
+ switch (resolved) {
1523
+ case "number": {
1524
+ return dialect.jsonExtractNumber(column, pointer);
1525
+ }
1526
+ case "boolean": {
1527
+ return dialect.jsonExtractBoolean(column, pointer);
1528
+ }
1529
+ case "date": {
1530
+ return dialect.jsonExtractDate(column, pointer);
1531
+ }
1532
+ case "array":
1533
+ case "object":
1534
+ case "embedding": {
1535
+ return dialect.jsonExtract(column, pointer);
1536
+ }
1537
+ case "string":
1538
+ case "unknown":
1539
+ case void 0: {
1540
+ return dialect.jsonExtractText(column, pointer);
1541
+ }
1542
+ }
1543
+ }
1544
+ function compileFieldTextValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
1545
+ const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
1546
+ if (!isJsonField(field)) {
1547
+ return column;
1548
+ }
1549
+ const pointer = getFieldPointer(field);
1550
+ if (!pointer || pointer === "") {
1551
+ return column;
1552
+ }
1553
+ return dialect.jsonExtractText(column, pointer);
1554
+ }
1555
+ function compileFieldJsonValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
1556
+ const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
1557
+ if (!isJsonField(field)) {
1558
+ return column;
1559
+ }
1560
+ const pointer = pointerOverride ?? getFieldPointer(field);
1561
+ if (!pointer || pointer === "") {
1562
+ return column;
1563
+ }
1564
+ return dialect.jsonExtract(column, pointer);
1565
+ }
1566
+ function resolveLiteralValueTypes(literals) {
1567
+ const resolved = /* @__PURE__ */ new Set();
1568
+ for (const literal2 of literals) {
1569
+ const valueType = normalizeValueType2(literal2.valueType);
1570
+ if (valueType) {
1571
+ resolved.add(valueType);
1572
+ }
1573
+ }
1574
+ if (resolved.size > 1) {
1575
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1576
+ "Mixed literal value types are not supported in predicates",
1577
+ { valueTypes: [...resolved] }
1578
+ );
1579
+ }
1580
+ return resolved.values().next().value;
1581
+ }
1582
+ function resolveComparisonValueType(field, right) {
1583
+ if (isParameterRef(right)) {
1584
+ return normalizeValueType2(right.valueType) ?? normalizeValueType2(field.valueType);
1585
+ }
1586
+ const literals = Array.isArray(right) ? right : [right];
1587
+ const literalType = resolveLiteralValueTypes(literals);
1588
+ const fieldType = normalizeValueType2(field.valueType);
1589
+ if (fieldType === "date" && literalType === "string") {
1590
+ return fieldType;
1591
+ }
1592
+ if (literalType) {
1593
+ return literalType;
1594
+ }
1595
+ return fieldType;
1596
+ }
1597
+ function resolvePredicateValueType(preferred, literal2) {
1598
+ const normalizedPreferred = normalizeValueType2(preferred);
1599
+ if (normalizedPreferred) {
1600
+ return normalizedPreferred;
1601
+ }
1602
+ return literal2 ? normalizeValueType2(literal2.valueType) : void 0;
1603
+ }
1604
+ function convertValueForSql(value, dialect) {
1605
+ return dialect.bindValue(value);
1606
+ }
1607
+ function compileStringPattern(op, pattern) {
1608
+ const escaped = pattern.replaceAll(
1609
+ chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER,
1610
+ `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}`
1611
+ ).replaceAll("%", `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}_`);
1612
+ switch (op) {
1613
+ case "contains": {
1614
+ return `%${escaped}%`;
1615
+ }
1616
+ case "startsWith": {
1617
+ return `${escaped}%`;
1618
+ }
1619
+ case "endsWith": {
1620
+ return `%${escaped}`;
1621
+ }
1622
+ case "like":
1623
+ case "ilike": {
1624
+ return pattern;
1625
+ }
1626
+ default: {
1627
+ return escaped;
1628
+ }
1629
+ }
1630
+ }
1631
+ function escapeLikePatternParameter(parameter) {
1632
+ const doubledEscape = `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}`;
1633
+ return chunkX6RDQ5NB_cjs.sql`REPLACE(REPLACE(REPLACE(${parameter}, ${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}_`})`;
1634
+ }
1635
+ function compileParameterizedStringPattern(op, parameter) {
1636
+ switch (op) {
1637
+ case "contains": {
1638
+ const escaped = escapeLikePatternParameter(parameter);
1639
+ return chunkX6RDQ5NB_cjs.sql`'%' || ${escaped} || '%'`;
1640
+ }
1641
+ case "startsWith": {
1642
+ const escaped = escapeLikePatternParameter(parameter);
1643
+ return chunkX6RDQ5NB_cjs.sql`${escaped} || '%'`;
1644
+ }
1645
+ case "endsWith": {
1646
+ const escaped = escapeLikePatternParameter(parameter);
1647
+ return chunkX6RDQ5NB_cjs.sql`'%' || ${escaped}`;
1648
+ }
1649
+ case "like":
1650
+ case "ilike": {
1651
+ return parameter;
1652
+ }
1653
+ default: {
1654
+ return escapeLikePatternParameter(parameter);
1655
+ }
1656
+ }
1657
+ }
1658
+ function compilePredicateExpression(expr, ctx) {
1659
+ const { dialect } = ctx;
1660
+ const cteColumnPrefix = ctx.cteColumnPrefix;
1661
+ switch (expr.__type) {
1662
+ case "comparison": {
1663
+ return compileComparisonPredicate(expr, dialect, cteColumnPrefix);
1664
+ }
1665
+ case "string_op": {
1666
+ const field = compileFieldTextValue(
1667
+ expr.field,
1668
+ dialect,
1669
+ void 0,
1670
+ void 0,
1671
+ cteColumnPrefix
1672
+ );
1673
+ if (isParameterRef(expr.pattern)) {
1674
+ const placeholder = chunkX6RDQ5NB_cjs.sql`${chunkX6RDQ5NB_cjs.sql.placeholder(expr.pattern.name)}`;
1675
+ const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
1676
+ if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1677
+ return dialect.ilike(field, pattern2);
1678
+ }
1679
+ return chunkX6RDQ5NB_cjs.sql`${field} LIKE ${pattern2} ${chunkZ5QHVL5U_cjs.likeEscapeClause}`;
1680
+ }
1681
+ const pattern = compileStringPattern(expr.op, expr.pattern);
1682
+ if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1683
+ return dialect.ilike(field, pattern);
1684
+ }
1685
+ return chunkX6RDQ5NB_cjs.sql`${field} LIKE ${pattern} ${chunkZ5QHVL5U_cjs.likeEscapeClause}`;
1686
+ }
1687
+ case "null_check": {
1688
+ const field = compileFieldTextValue(
1689
+ expr.field,
1690
+ dialect,
1691
+ void 0,
1692
+ void 0,
1693
+ cteColumnPrefix
1694
+ );
1695
+ return expr.op === "isNull" ? chunkX6RDQ5NB_cjs.sql`${field} IS NULL` : chunkX6RDQ5NB_cjs.sql`${field} IS NOT NULL`;
1696
+ }
1697
+ case "between": {
1698
+ const lowerIsParam = isParameterRef(expr.lower);
1699
+ const upperIsParam = isParameterRef(expr.upper);
1700
+ const boundsForType = [];
1701
+ if (!lowerIsParam) boundsForType.push(expr.lower);
1702
+ if (!upperIsParam) boundsForType.push(expr.upper);
1703
+ const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
1704
+ if (valueType === "array" || valueType === "object") {
1705
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1706
+ "Between comparisons are not supported for JSON arrays or objects"
1707
+ );
1708
+ }
1709
+ const field = compileFieldValue(
1710
+ expr.field,
1711
+ dialect,
1712
+ valueType,
1713
+ void 0,
1714
+ void 0,
1715
+ cteColumnPrefix
1716
+ );
1717
+ const lower = lowerIsParam ? chunkX6RDQ5NB_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
1718
+ const upper = upperIsParam ? chunkX6RDQ5NB_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
1719
+ return chunkX6RDQ5NB_cjs.sql`${field} BETWEEN ${lower} AND ${upper}`;
1720
+ }
1721
+ case "and": {
1722
+ const parts = expr.predicates.map(
1723
+ (p) => compilePredicateExpression(p, ctx)
1724
+ );
1725
+ return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(parts, chunkX6RDQ5NB_cjs.sql` AND `)})`;
1726
+ }
1727
+ case "or": {
1728
+ const parts = expr.predicates.map(
1729
+ (p) => compilePredicateExpression(p, ctx)
1730
+ );
1731
+ return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(parts, chunkX6RDQ5NB_cjs.sql` OR `)})`;
1732
+ }
1733
+ case "not": {
1734
+ const inner = compilePredicateExpression(expr.predicate, ctx);
1735
+ return chunkX6RDQ5NB_cjs.sql`NOT (${inner})`;
1736
+ }
1737
+ case "array_op": {
1738
+ return compileArrayPredicate(expr, dialect, cteColumnPrefix);
1739
+ }
1740
+ case "object_op": {
1741
+ return compileObjectPredicate(expr, dialect, cteColumnPrefix);
1742
+ }
1743
+ case "aggregate_comparison": {
1744
+ return compileAggregatePredicate(expr, dialect);
1745
+ }
1746
+ case "exists": {
1747
+ return compileExistsSubquery(expr, ctx);
1748
+ }
1749
+ case "in_subquery": {
1750
+ return compileInSubquery(expr, ctx);
1751
+ }
1752
+ case "vector_similarity":
1753
+ case "fulltext_match": {
1754
+ return STRUCTURAL_PREDICATE_NOOP;
1755
+ }
1756
+ }
1757
+ }
1758
+ var STRUCTURAL_PREDICATE_NOOP = chunkX6RDQ5NB_cjs.sql.raw("1=1");
1759
+ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1760
+ if (isParameterRef(expr.right)) {
1761
+ const parameterValueType = normalizeValueType2(expr.right.valueType) ?? normalizeValueType2(expr.left.valueType);
1762
+ const left2 = compileFieldValue(
1763
+ expr.left,
1764
+ dialect,
1765
+ parameterValueType,
1766
+ void 0,
1767
+ void 0,
1768
+ cteColumnPrefix
1769
+ );
1770
+ const opSql2 = COMPARISON_OP_SQL[expr.op];
1771
+ if (!opSql2) {
1772
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1773
+ `Comparison operation "${expr.op}" is not supported for parameterized predicates`
1774
+ );
1775
+ }
1776
+ return chunkX6RDQ5NB_cjs.sql`${left2} ${chunkX6RDQ5NB_cjs.sql.raw(opSql2)} ${chunkX6RDQ5NB_cjs.sql.placeholder(expr.right.name)}`;
1777
+ }
1778
+ const valueType = resolveComparisonValueType(expr.left, expr.right);
1779
+ if (valueType === "array" || valueType === "object") {
1780
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1781
+ `Comparison operation "${expr.op}" is not supported for ${valueType} values`
1782
+ );
1783
+ }
1784
+ const left = compileFieldValue(
1785
+ expr.left,
1786
+ dialect,
1787
+ valueType,
1788
+ void 0,
1789
+ void 0,
1790
+ cteColumnPrefix
1791
+ );
1792
+ if (expr.op === "in" || expr.op === "notIn") {
1793
+ const values = Array.isArray(expr.right) ? expr.right : [expr.right];
1794
+ if (values.length === 0) {
1795
+ return expr.op === "in" ? chunkX6RDQ5NB_cjs.sql.raw("1=0") : chunkX6RDQ5NB_cjs.sql.raw("1=1");
1796
+ }
1797
+ const convertedValues = values.map(
1798
+ (value) => convertValueForSql(value.value, dialect)
1799
+ );
1800
+ return dialect.inList(left, convertedValues, expr.op === "notIn");
1801
+ }
1802
+ const right = expr.right;
1803
+ const rightValue = Array.isArray(right) ? chunk764JHTLT_cjs.requireDefined(right[0]) : right;
1804
+ const convertedRight = convertValueForSql(rightValue.value, dialect);
1805
+ const opSql = COMPARISON_OP_SQL[expr.op];
1806
+ if (!opSql) {
1807
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1808
+ `Comparison operation "${expr.op}" is not supported`
1809
+ );
1810
+ }
1811
+ return chunkX6RDQ5NB_cjs.sql`${left} ${chunkX6RDQ5NB_cjs.sql.raw(opSql)} ${convertedRight}`;
1812
+ }
1813
+ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1814
+ const field = compileFieldJsonValue(
1815
+ expr.field,
1816
+ dialect,
1817
+ void 0,
1818
+ void 0,
1819
+ cteColumnPrefix
1820
+ );
1821
+ const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
1822
+ switch (expr.op) {
1823
+ case "isEmpty": {
1824
+ return chunkX6RDQ5NB_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
1825
+ }
1826
+ case "isNotEmpty": {
1827
+ return chunkX6RDQ5NB_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
1828
+ }
1829
+ case "lengthEq": {
1830
+ return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1831
+ }
1832
+ case "lengthGt": {
1833
+ return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1834
+ }
1835
+ case "lengthGte": {
1836
+ return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1837
+ }
1838
+ case "lengthLt": {
1839
+ return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1840
+ }
1841
+ case "lengthLte": {
1842
+ return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1843
+ }
1844
+ case "contains": {
1845
+ const value = values[0];
1846
+ if (value === void 0) {
1847
+ return chunkX6RDQ5NB_cjs.sql.raw("1=0");
1848
+ }
1849
+ return dialect.jsonArrayContains(field, value);
1850
+ }
1851
+ case "containsAll": {
1852
+ return dialect.jsonArrayContainsAll(field, values);
1853
+ }
1854
+ case "containsAny": {
1855
+ return dialect.jsonArrayContainsAny(field, values);
1856
+ }
1857
+ }
1858
+ }
1859
+ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1860
+ const basePointer = getFieldPointer(expr.field);
1861
+ const pointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, expr.pointer);
1862
+ const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
1863
+ switch (expr.op) {
1864
+ case "hasKey":
1865
+ case "hasPath": {
1866
+ return dialect.jsonHasPath(column, pointer);
1867
+ }
1868
+ case "pathEquals": {
1869
+ if (!expr.value) {
1870
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1871
+ "pathEquals requires a comparison value"
1872
+ );
1873
+ }
1874
+ const valueType = resolvePredicateValueType(expr.valueType, expr.value);
1875
+ if (valueType === "array" || valueType === "object") {
1876
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1877
+ "pathEquals is not supported for JSON arrays or objects"
1878
+ );
1879
+ }
1880
+ const left = compileFieldValue(
1881
+ expr.field,
1882
+ dialect,
1883
+ valueType,
1884
+ void 0,
1885
+ pointer,
1886
+ cteColumnPrefix
1887
+ );
1888
+ return chunkX6RDQ5NB_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1889
+ }
1890
+ case "pathContains": {
1891
+ if (!expr.value) {
1892
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1893
+ "pathContains requires a comparison value"
1894
+ );
1895
+ }
1896
+ const arrayField2 = compileFieldJsonValue(
1897
+ expr.field,
1898
+ dialect,
1899
+ void 0,
1900
+ pointer,
1901
+ cteColumnPrefix
1902
+ );
1903
+ return dialect.jsonArrayContains(
1904
+ arrayField2,
1905
+ convertValueForSql(expr.value.value, dialect)
1906
+ );
1907
+ }
1908
+ case "pathIsNull": {
1909
+ return dialect.jsonPathIsNull(column, pointer);
1910
+ }
1911
+ case "pathIsNotNull": {
1912
+ return dialect.jsonPathIsNotNull(column, pointer);
1913
+ }
1914
+ }
1915
+ }
1916
+ function compileAggregatePredicate(expr, dialect) {
1917
+ const aggregate = compileAggregateExpr(expr.aggregate, dialect);
1918
+ const op = COMPARISON_OP_SQL[expr.op];
1919
+ if (!op) {
1920
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1921
+ `Comparison operation "${expr.op}" is not supported for aggregate predicates`
1922
+ );
1923
+ }
1924
+ const convertedValue = convertValueForSql(expr.value.value, dialect);
1925
+ return chunkX6RDQ5NB_cjs.sql`${aggregate} ${chunkX6RDQ5NB_cjs.sql.raw(op)} ${convertedValue}`;
1926
+ }
1927
+ function compileAggregateExpr(expr, dialect) {
1928
+ const cteAlias = `cte_${expr.field.alias}`;
1929
+ const field = compileFieldValue(
1930
+ expr.field,
1931
+ dialect,
1932
+ expr.field.valueType,
1933
+ cteAlias
1934
+ );
1935
+ switch (expr.function) {
1936
+ case "count": {
1937
+ return chunkX6RDQ5NB_cjs.sql`COUNT(${field})`;
1938
+ }
1939
+ case "countDistinct": {
1940
+ return chunkX6RDQ5NB_cjs.sql`COUNT(DISTINCT ${field})`;
1941
+ }
1942
+ case "sum": {
1943
+ return chunkX6RDQ5NB_cjs.sql`SUM(${field})`;
1944
+ }
1945
+ case "avg": {
1946
+ return chunkX6RDQ5NB_cjs.sql`AVG(${field})`;
1947
+ }
1948
+ case "min": {
1949
+ return chunkX6RDQ5NB_cjs.sql`MIN(${field})`;
1950
+ }
1951
+ case "max": {
1952
+ return chunkX6RDQ5NB_cjs.sql`MAX(${field})`;
1953
+ }
1954
+ default: {
1955
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1956
+ `Unknown aggregate function: ${expr.function}`
1957
+ );
1958
+ }
1959
+ }
1960
+ }
1961
+ function compileExistsSubquery(expr, ctx) {
1962
+ if (expr.subquery.graphId === void 0) {
1963
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
1964
+ }
1965
+ const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1966
+ return expr.negated ? chunkX6RDQ5NB_cjs.sql`NOT EXISTS (${subSql})` : chunkX6RDQ5NB_cjs.sql`EXISTS (${subSql})`;
1967
+ }
1968
+ function compileInSubquery(expr, ctx) {
1969
+ const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
1970
+ if (subqueryColumnCount !== 1) {
1971
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1972
+ `IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
1973
+ { subqueryColumnCount }
1974
+ );
1975
+ }
1976
+ const fieldValueType = normalizeValueType2(expr.field.valueType);
1977
+ const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
1978
+ const resolvedValueType = fieldValueType ?? subqueryValueType;
1979
+ if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
1980
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1981
+ `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
1982
+ { valueType: resolvedValueType }
1983
+ );
1984
+ }
1985
+ if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
1986
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1987
+ `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
1988
+ {
1989
+ fieldValueType,
1990
+ subqueryValueType
1991
+ }
1992
+ );
1993
+ }
1994
+ const valueType = fieldValueType ?? subqueryValueType;
1995
+ if (expr.subquery.graphId === void 0) {
1996
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
1997
+ "IN/NOT IN subquery must have a graphId"
1998
+ );
1999
+ }
2000
+ const fieldSql = compileFieldValue(
2001
+ expr.field,
2002
+ ctx.dialect,
2003
+ valueType,
2004
+ void 0,
2005
+ void 0,
2006
+ ctx.cteColumnPrefix
2007
+ );
2008
+ const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
2009
+ return expr.negated ? chunkX6RDQ5NB_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkX6RDQ5NB_cjs.sql`${fieldSql} IN (${subSql})`;
2010
+ }
2011
+ function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
2012
+ const results = [];
2013
+ function visit(expr, inDisallowedBranch) {
2014
+ if (isMatch(expr)) {
2015
+ if (inDisallowedBranch) {
2016
+ throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(rejectionMessage);
2017
+ }
2018
+ results.push(expr);
2019
+ return;
2020
+ }
2021
+ switch (expr.__type) {
2022
+ case "and": {
2023
+ for (const child of expr.predicates) visit(child, inDisallowedBranch);
2024
+ return;
2025
+ }
2026
+ case "or": {
2027
+ for (const child of expr.predicates) visit(child, true);
2028
+ return;
2029
+ }
2030
+ case "not": {
2031
+ visit(expr.predicate, true);
2032
+ return;
2033
+ }
2034
+ case "comparison":
2035
+ case "string_op":
2036
+ case "null_check":
2037
+ case "between":
2038
+ case "array_op":
2039
+ case "object_op":
2040
+ case "aggregate_comparison":
2041
+ case "exists":
2042
+ case "in_subquery":
2043
+ case "vector_similarity":
2044
+ case "fulltext_match": {
2045
+ return;
2046
+ }
2047
+ }
2048
+ }
2049
+ for (const pred of predicates) visit(pred.expression, false);
2050
+ return results;
2051
+ }
2052
+ function extractVectorSimilarityPredicates(predicates) {
2053
+ return extractStructuralPredicates(
2054
+ predicates,
2055
+ (expr) => expr.__type === "vector_similarity",
2056
+ "Vector similarity predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
2057
+ );
2058
+ }
2059
+ function extractFulltextMatchPredicates(predicates) {
2060
+ return extractStructuralPredicates(
2061
+ predicates,
2062
+ (expr) => expr.__type === "fulltext_match",
2063
+ "Fulltext match predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
2064
+ );
2065
+ }
2066
+
2067
+ // src/query/compiler/predicate-utils.ts
2068
+ var EMPTY_PREDICATES = [];
2069
+ function sqlValueList(values) {
2070
+ return chunkX6RDQ5NB_cjs.sql.join(
2071
+ values.map((value) => chunkX6RDQ5NB_cjs.sql`${value}`),
2072
+ chunkX6RDQ5NB_cjs.sql`, `
2073
+ );
2074
+ }
2075
+ function buildPredicateIndexKey(alias, targetType) {
2076
+ return `${alias}\0${targetType}`;
2077
+ }
2078
+ function resolvePredicateTargetType(predicate2) {
2079
+ return predicate2.targetType === "edge" ? "edge" : "node";
2080
+ }
2081
+ function buildPredicateIndex(ast) {
2082
+ const byAliasAndType = /* @__PURE__ */ new Map();
2083
+ for (const predicate2 of ast.predicates) {
2084
+ const key = buildPredicateIndexKey(
2085
+ predicate2.targetAlias,
2086
+ resolvePredicateTargetType(predicate2)
2087
+ );
2088
+ const existing = byAliasAndType.get(key);
2089
+ if (existing === void 0) {
2090
+ byAliasAndType.set(key, [predicate2]);
2091
+ } else {
2092
+ existing.push(predicate2);
2093
+ }
2094
+ }
2095
+ return { byAliasAndType };
2096
+ }
2097
+ function getPredicatesForAlias(predicateIndex, alias, targetType) {
2098
+ return predicateIndex.byAliasAndType.get(
2099
+ buildPredicateIndexKey(alias, targetType)
2100
+ ) ?? EMPTY_PREDICATES;
2101
+ }
2102
+ function compilePredicateClauses(predicates, predicateContext) {
2103
+ return predicates.map(
2104
+ (predicate2) => compilePredicateExpression(predicate2.expression, predicateContext)
2105
+ );
2106
+ }
2107
+ function compileKindFilter(column, kinds) {
2108
+ if (kinds.length === 0) {
2109
+ return chunkX6RDQ5NB_cjs.sql`1 = 0`;
2110
+ }
2111
+ if (kinds.length === 1) {
2112
+ return chunkX6RDQ5NB_cjs.sql`${column} = ${kinds[0]}`;
2113
+ }
2114
+ return chunkX6RDQ5NB_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
2115
+ }
2116
+ function getNodeKindsForAlias(ast, alias) {
2117
+ if (alias === ast.start.alias) {
2118
+ return ast.start.kinds;
2119
+ }
2120
+ for (const traversal of ast.traversals) {
2121
+ if (traversal.nodeAlias === alias) {
2122
+ return traversal.nodeKinds;
2123
+ }
2124
+ }
2125
+ throw new chunkSAFZ6JTI_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
2126
+ }
2127
+ function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
2128
+ if (!vectorPredicate || !fulltextPredicate) return void 0;
2129
+ return vectorPredicate.field.alias === fulltextPredicate.field.alias ? vectorPredicate.field.alias : void 0;
2130
+ }
2131
+
802
2132
  // src/store/row-fetch.ts
803
2133
  async function getRowsByIds(ids, policy) {
804
2134
  const rowsById = /* @__PURE__ */ new Map();
@@ -821,7 +2151,7 @@ async function getRowsByIds(ids, policy) {
821
2151
  // src/store/edge-fetch.ts
822
2152
  async function getEdgeRowsByIds(backend, graphId, ids) {
823
2153
  return getRowsByIds(ids, {
824
- batch: backend.getEdges === void 0 ? void 0 : (batchIds) => backend.getEdges(graphId, batchIds),
2154
+ batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
825
2155
  one: (id) => backend.getEdge(graphId, id)
826
2156
  });
827
2157
  }
@@ -829,10 +2159,12 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
829
2159
  // src/store/node-fetch.ts
830
2160
  async function getNodeRowsByIds(backend, graphId, kind, ids) {
831
2161
  return getRowsByIds(ids, {
832
- batch: backend.getNodes === void 0 ? void 0 : (batchIds) => backend.getNodes(graphId, kind, batchIds),
2162
+ batch: backend.getNodes === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getNodes)(graphId, kind, batchIds),
833
2163
  one: (id) => backend.getNode(graphId, kind, id)
834
2164
  });
835
2165
  }
2166
+
2167
+ // src/store/recorded-capture/relations.ts
836
2168
  var RECORDED_HISTORY_META = "{}";
837
2169
  var RECORDED_NODE_COLUMNS = [
838
2170
  "history_id",
@@ -875,13 +2207,13 @@ var RECORDED_EDGE_COLUMNS = [
875
2207
  "tx_id",
876
2208
  "meta"
877
2209
  ];
878
- var RECORDED_NODE_COLUMN_LIST = drizzleOrm.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
879
- var RECORDED_EDGE_COLUMN_LIST = drizzleOrm.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
2210
+ var RECORDED_NODE_COLUMN_LIST = chunkX6RDQ5NB_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
2211
+ var RECORDED_EDGE_COLUMN_LIST = chunkX6RDQ5NB_cjs.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
880
2212
  var RECORDED_BIND_PARAM_BUDGET = 900;
881
2213
  function recordedBindParamBudget(target) {
882
2214
  const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
883
2215
  if (!Number.isSafeInteger(budget) || budget < 1) {
884
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
2216
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
885
2217
  `backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
886
2218
  {
887
2219
  code: "INVALID_BACKEND_CAPABILITY",
@@ -896,42 +2228,45 @@ function recordedChunkSize(target, columnCount) {
896
2228
  const budget = recordedBindParamBudget(target);
897
2229
  return Math.max(1, Math.floor(budget / columnCount));
898
2230
  }
2231
+ function sqlNull(value) {
2232
+ return value === void 0 ? chunkX6RDQ5NB_cjs.sql.raw("NULL") : chunkX6RDQ5NB_cjs.sql`${value}`;
2233
+ }
899
2234
  function recordedCommonCells() {
900
2235
  return {
901
- history_id: () => drizzleOrm.sql`${generateId()}`,
902
- graph_id: (row) => drizzleOrm.sql`${row.graph_id}`,
903
- id: (row) => drizzleOrm.sql`${row.id}`,
904
- kind: (row) => drizzleOrm.sql`${row.kind}`,
905
- props: (row) => drizzleOrm.sql`${chunkIPSVVTWT_cjs.rowPropsToJsonText(row.props)}`,
906
- valid_from: (row) => drizzleOrm.sql`${chunk7YSP4V4R_cjs.sqlNull(row.valid_from)}`,
907
- valid_to: (row) => drizzleOrm.sql`${chunk7YSP4V4R_cjs.sqlNull(row.valid_to)}`,
908
- created_at: (row) => drizzleOrm.sql`${row.created_at}`,
909
- updated_at: (row) => drizzleOrm.sql`${row.updated_at}`,
910
- deleted_at: (row) => drizzleOrm.sql`${chunk7YSP4V4R_cjs.sqlNull(row.deleted_at)}`,
911
- recorded_from: (_row, recordedCommit) => drizzleOrm.sql`${recordedCommit}`,
912
- recorded_to: () => drizzleOrm.sql`${RECORDED_MAX}`,
913
- op: (_row, _recordedCommit, operation) => drizzleOrm.sql`${operation}`,
914
- schema_version: () => drizzleOrm.sql`NULL`,
915
- tx_id: () => drizzleOrm.sql`NULL`,
916
- meta: () => drizzleOrm.sql`${RECORDED_HISTORY_META}`
2236
+ history_id: () => chunkX6RDQ5NB_cjs.sql`${generateId()}`,
2237
+ graph_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.graph_id}`,
2238
+ id: (row) => chunkX6RDQ5NB_cjs.sql`${row.id}`,
2239
+ kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.kind}`,
2240
+ props: (row) => chunkX6RDQ5NB_cjs.sql`${chunkGNPGGLAE_cjs.rowPropsToJsonText(row.props)}`,
2241
+ valid_from: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.valid_from)}`,
2242
+ valid_to: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.valid_to)}`,
2243
+ created_at: (row) => chunkX6RDQ5NB_cjs.sql`${row.created_at}`,
2244
+ updated_at: (row) => chunkX6RDQ5NB_cjs.sql`${row.updated_at}`,
2245
+ deleted_at: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.deleted_at)}`,
2246
+ recorded_from: (_row, recordedCommit) => chunkX6RDQ5NB_cjs.sql`${recordedCommit}`,
2247
+ recorded_to: () => chunkX6RDQ5NB_cjs.sql`${chunkSVUKGWSN_cjs.RECORDED_MAX}`,
2248
+ op: (_row, _recordedCommit, operation) => chunkX6RDQ5NB_cjs.sql`${operation}`,
2249
+ schema_version: () => chunkX6RDQ5NB_cjs.sql`NULL`,
2250
+ tx_id: () => chunkX6RDQ5NB_cjs.sql`NULL`,
2251
+ meta: () => chunkX6RDQ5NB_cjs.sql`${RECORDED_HISTORY_META}`
917
2252
  };
918
2253
  }
919
2254
  var recordedNodeCells = {
920
2255
  ...recordedCommonCells(),
921
- version: (row) => drizzleOrm.sql`${row.version}`
2256
+ version: (row) => chunkX6RDQ5NB_cjs.sql`${row.version}`
922
2257
  };
923
2258
  var recordedEdgeCells = {
924
2259
  ...recordedCommonCells(),
925
- from_kind: (row) => drizzleOrm.sql`${row.from_kind}`,
926
- from_id: (row) => drizzleOrm.sql`${row.from_id}`,
927
- to_kind: (row) => drizzleOrm.sql`${row.to_kind}`,
928
- to_id: (row) => drizzleOrm.sql`${row.to_id}`
2260
+ from_kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.from_kind}`,
2261
+ from_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.from_id}`,
2262
+ to_kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.to_kind}`,
2263
+ to_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.to_id}`
929
2264
  };
930
2265
  function recordedValuesTuple(columns, cells, row, recordedCommit, operation) {
931
2266
  const tuple = columns.map(
932
2267
  (column) => cells[column](row, recordedCommit, operation)
933
2268
  );
934
- return drizzleOrm.sql`(${drizzleOrm.sql.join(tuple, drizzleOrm.sql`, `)})`;
2269
+ return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(tuple, chunkX6RDQ5NB_cjs.sql`, `)})`;
935
2270
  }
936
2271
  async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedCommit) {
937
2272
  if (inserts.length === 0) return;
@@ -946,9 +2281,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
946
2281
  );
947
2282
  await executeStatement(
948
2283
  target,
949
- drizzleOrm.sql`
2284
+ chunkX6RDQ5NB_cjs.sql`
950
2285
  INSERT INTO ${table} (${columnList})
951
- VALUES ${drizzleOrm.sql.join(values, drizzleOrm.sql`, `)}
2286
+ VALUES ${chunkX6RDQ5NB_cjs.sql.join(values, chunkX6RDQ5NB_cjs.sql`, `)}
952
2287
  `
953
2288
  );
954
2289
  }
@@ -993,22 +2328,22 @@ function entityKey(entity) {
993
2328
  }
994
2329
  }
995
2330
  async function closeOpenReturning(target, table, graphId, ids, recordedCommit, kind) {
996
- const kindFilter = kind === void 0 ? drizzleOrm.sql`` : drizzleOrm.sql`AND kind = ${kind}`;
2331
+ const kindFilter = kind === void 0 ? chunkX6RDQ5NB_cjs.sql`` : chunkX6RDQ5NB_cjs.sql`AND kind = ${kind}`;
997
2332
  const rows = await target.execute(
998
- chunkIPSVVTWT_cjs.asCompiledRowsSql(drizzleOrm.sql`
2333
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
999
2334
  UPDATE ${table}
1000
2335
  SET recorded_to = ${recordedCommit}
1001
2336
  WHERE graph_id = ${graphId}
1002
2337
  ${kindFilter}
1003
- AND recorded_to = ${RECORDED_MAX}
1004
- AND id IN (${chunkIPSVVTWT_cjs.sqlValueList(ids)})
2338
+ AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
2339
+ AND id IN (${sqlValueList(ids)})
1005
2340
  RETURNING id, deleted_at
1006
2341
  `)
1007
2342
  );
1008
- return new Map(rows.map((row) => [row.id, chunkIPSVVTWT_cjs.isPresent(row.deleted_at)]));
2343
+ return new Map(rows.map((row) => [row.id, chunk764JHTLT_cjs.isPresent(row.deleted_at)]));
1009
2344
  }
1010
2345
  function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
1011
- if (chunkIPSVVTWT_cjs.isPresent(after.deleted_at)) return "delete";
2346
+ if (chunk764JHTLT_cjs.isPresent(after.deleted_at)) return "delete";
1012
2347
  if (!hadOpenRow || priorRowWasTombstone) return "create";
1013
2348
  return "update";
1014
2349
  }
@@ -1045,7 +2380,7 @@ function recordedInsertsFor(afterById, closed) {
1045
2380
  async function flushNodes(target, schema, graphId, entities, recordedCommit) {
1046
2381
  const chunkSize = recordedNodeChunkSize(target);
1047
2382
  for (const [kind, group] of groupNodesByKind(entities)) {
1048
- for (const entityChunk of chunkIPSVVTWT_cjs.chunk(group, chunkSize)) {
2383
+ for (const entityChunk of chunkZDH3DX3C_cjs.chunk(group, chunkSize)) {
1049
2384
  const ids = entityChunk.map((entity) => entity.id);
1050
2385
  const closed = await closeOpenReturning(
1051
2386
  target,
@@ -1070,7 +2405,7 @@ async function flushNodes(target, schema, graphId, entities, recordedCommit) {
1070
2405
  }
1071
2406
  async function flushEdges(target, schema, graphId, entities, recordedCommit) {
1072
2407
  const chunkSize = recordedEdgeChunkSize(target);
1073
- for (const entityChunk of chunkIPSVVTWT_cjs.chunk(entities, chunkSize)) {
2408
+ for (const entityChunk of chunkZDH3DX3C_cjs.chunk(entities, chunkSize)) {
1074
2409
  const ids = entityChunk.map((entity) => entity.id);
1075
2410
  const closed = await closeOpenReturning(
1076
2411
  target,
@@ -1094,24 +2429,24 @@ async function flushEdges(target, schema, graphId, entities, recordedCommit) {
1094
2429
  async function closeOpenByKind(target, table, graphId, kind, recordedCommit) {
1095
2430
  await executeStatement(
1096
2431
  target,
1097
- drizzleOrm.sql`
2432
+ chunkX6RDQ5NB_cjs.sql`
1098
2433
  UPDATE ${table}
1099
2434
  SET recorded_to = ${recordedCommit}
1100
2435
  WHERE graph_id = ${graphId}
1101
2436
  AND kind = ${kind}
1102
- AND recorded_to = ${RECORDED_MAX}
2437
+ AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
1103
2438
  `
1104
2439
  );
1105
2440
  }
1106
2441
  async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedCommit) {
1107
2442
  await executeStatement(
1108
2443
  target,
1109
- drizzleOrm.sql`
2444
+ chunkX6RDQ5NB_cjs.sql`
1110
2445
  UPDATE ${schema.recordedEdgesTable}
1111
2446
  SET recorded_to = ${recordedCommit}
1112
2447
  WHERE graph_id = ${graphId}
1113
2448
  AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
1114
- AND recorded_to = ${RECORDED_MAX}
2449
+ AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
1115
2450
  `
1116
2451
  );
1117
2452
  }
@@ -1149,7 +2484,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
1149
2484
  }
1150
2485
  async function queryConnectedEdgeIds(target, schema, params) {
1151
2486
  const rows = await target.execute(
1152
- chunkIPSVVTWT_cjs.asCompiledRowsSql(drizzleOrm.sql`
2487
+ chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
1153
2488
  SELECT id
1154
2489
  FROM ${schema.edgesTable}
1155
2490
  WHERE graph_id = ${params.graphId}
@@ -1197,7 +2532,7 @@ function edgeRowIdentityKey(row) {
1197
2532
  return edgeIdentityKey(row.graph_id, row.id);
1198
2533
  }
1199
2534
  function recordedCaptureSealedError(details) {
1200
- return new chunkBVRDGYXQ_cjs.ConfigurationError(
2535
+ return new chunkSAFZ6JTI_cjs.ConfigurationError(
1201
2536
  "Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
1202
2537
  details,
1203
2538
  {
@@ -1230,7 +2565,7 @@ function createRecordedCaptureSession() {
1230
2565
  },
1231
2566
  async flush(target, schema, ownsWriteLock) {
1232
2567
  if (sealed) {
1233
- throw new chunkBVRDGYXQ_cjs.ConfigurationError(
2568
+ throw new chunkSAFZ6JTI_cjs.ConfigurationError(
1234
2569
  "Recorded-time capture session was already flushed.",
1235
2570
  {},
1236
2571
  {
@@ -1241,7 +2576,7 @@ function createRecordedCaptureSession() {
1241
2576
  sealed = true;
1242
2577
  if (touched.size === 0) return /* @__PURE__ */ new Map();
1243
2578
  const recordedByGraph = /* @__PURE__ */ new Map();
1244
- const byGraph = chunkIPSVVTWT_cjs.groupBy(touched.values(), (entity) => entity.graphId);
2579
+ const byGraph = chunkZDH3DX3C_cjs.groupBy(touched.values(), (entity) => entity.graphId);
1245
2580
  for (const [graphId, entities] of byGraph) {
1246
2581
  const recordedCommit = await allocateRecordedCommit(
1247
2582
  target,
@@ -1279,7 +2614,7 @@ function createRecordedTransactionBackend(target, session, schema) {
1279
2614
  await lockRecordedGraphWrite(target, graphId, graphLocks);
1280
2615
  }
1281
2616
  }
1282
- const overlay = chunkIPSVVTWT_cjs.createBackendOverlay(target, {
2617
+ const overlay = chunkGNPGGLAE_cjs.createBackendOverlay(target, {
1283
2618
  ...rawWriteGuards(target, "tx.backend"),
1284
2619
  async insertNode(params) {
1285
2620
  session.assertOpen();
@@ -1418,7 +2753,7 @@ function createRecordedTransactionBackend(target, session, schema) {
1418
2753
  async deleteEdgesBatch(params) {
1419
2754
  session.assertOpen();
1420
2755
  await lockGraph(params.graphId);
1421
- await target.deleteEdgesBatch(params);
2756
+ await chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params);
1422
2757
  for (const id of params.ids) {
1423
2758
  session.touchEdge(params.graphId, id);
1424
2759
  }
@@ -1428,7 +2763,7 @@ function createRecordedTransactionBackend(target, session, schema) {
1428
2763
  async hardDeleteEdgesBatch(params) {
1429
2764
  session.assertOpen();
1430
2765
  await lockGraph(params.graphId);
1431
- await target.hardDeleteEdgesBatch(params);
2766
+ await chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
1432
2767
  for (const id of params.ids) {
1433
2768
  session.touchEdge(params.graphId, id);
1434
2769
  }
@@ -1445,7 +2780,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
1445
2780
  return {
1446
2781
  backend: createRecordedTransactionBackend(target, session, resolvedSchema),
1447
2782
  async flush() {
1448
- return chunk3GH67G4Z_cjs.withRecordedRelationsPrecondition(
2783
+ return chunkO5H62ZWJ_cjs.withRecordedRelationsPrecondition(
1449
2784
  session.flush(target, resolvedSchema, ownsWriteLock),
1450
2785
  { dialect: target.dialect, surface: "capture-flush" }
1451
2786
  );
@@ -1465,7 +2800,8 @@ async function runCapturedAutocommit(backend, schema, fn, options) {
1465
2800
  function createRecordedBackend(backend, schema) {
1466
2801
  assertCapturableBackend(backend);
1467
2802
  const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
1468
- return chunkIPSVVTWT_cjs.createBackendOverlay(backend, {
2803
+ const projectedBackend = createGraphBackendProjection(backend);
2804
+ return chunkGNPGGLAE_cjs.createBackendOverlay(projectedBackend, {
1469
2805
  ...rawWriteGuards(backend, "backend"),
1470
2806
  async insertNode(params) {
1471
2807
  return capture((target) => target.insertNode(params));
@@ -1535,12 +2871,16 @@ function createRecordedBackend(backend, schema) {
1535
2871
  },
1536
2872
  ...backend.deleteEdgesBatch === void 0 ? {} : {
1537
2873
  async deleteEdgesBatch(params) {
1538
- await capture((target) => target.deleteEdgesBatch(params));
2874
+ await capture(
2875
+ (target) => chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params)
2876
+ );
1539
2877
  }
1540
2878
  },
1541
2879
  ...backend.hardDeleteEdgesBatch === void 0 ? {} : {
1542
2880
  async hardDeleteEdgesBatch(params) {
1543
- await capture((target) => target.hardDeleteEdgesBatch(params));
2881
+ await capture(
2882
+ (target) => chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
2883
+ );
1544
2884
  }
1545
2885
  },
1546
2886
  async transaction(fn, options) {
@@ -1551,18 +2891,11 @@ function createRecordedBackend(backend, schema) {
1551
2891
  await assertRecordedCaptureTransactionIsolation(target, backendOptions);
1552
2892
  const readOnly = backendOptions?.accessMode === "read_only";
1553
2893
  const scope = createRecordedTransactionScope(target, schema, !readOnly);
1554
- const result = await fn(scope.backend, createHistoryUnsafeSqlRef());
2894
+ const result = await fn(scope.backend);
1555
2895
  const instants = await scope.flush();
1556
2896
  observer?.(instants);
1557
2897
  return result;
1558
2898
  }, backendOptions);
1559
- },
1560
- ...backend.adoptTransaction === void 0 ? {} : {
1561
- adoptTransaction(externalTx) {
1562
- throw recordedCaptureRequiresCallbackTransactionError({
1563
- externalTxType: typeof externalTx
1564
- });
1565
- }
1566
2899
  }
1567
2900
  });
1568
2901
  }
@@ -1825,8 +3158,8 @@ function checkWherePredicate(constraint, props) {
1825
3158
  return true;
1826
3159
  }
1827
3160
  const predicateBuilder = buildPredicateContext(props);
1828
- const predicate = constraint.where(predicateBuilder);
1829
- return evaluatePredicate(predicate, props);
3161
+ const predicate2 = constraint.where(predicateBuilder);
3162
+ return evaluatePredicate(predicate2, props);
1830
3163
  }
1831
3164
  function buildPredicateContext(props) {
1832
3165
  const context = {};
@@ -1846,11 +3179,11 @@ function buildPredicateContext(props) {
1846
3179
  }
1847
3180
  return context;
1848
3181
  }
1849
- function evaluatePredicate(predicate, props) {
1850
- if (typeof predicate !== "object" || predicate === null || !("__type" in predicate)) {
3182
+ function evaluatePredicate(predicate2, props) {
3183
+ if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
1851
3184
  return true;
1852
3185
  }
1853
- const pred = predicate;
3186
+ const pred = predicate2;
1854
3187
  if (pred.__type !== "unique_predicate") {
1855
3188
  return true;
1856
3189
  }
@@ -1858,7 +3191,7 @@ function evaluatePredicate(predicate, props) {
1858
3191
  if (pred.op === "isNull") {
1859
3192
  return value === null || value === void 0;
1860
3193
  }
1861
- return chunkIPSVVTWT_cjs.isPresent(value);
3194
+ return chunk764JHTLT_cjs.isPresent(value);
1862
3195
  }
1863
3196
  function getKindsForUniquenessCheck(baseKind, scope, registry) {
1864
3197
  if (scope === "kind") {
@@ -1887,7 +3220,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
1887
3220
  }
1888
3221
  case "one": {
1889
3222
  if (existingEdgeCount > 0) {
1890
- return new chunkBVRDGYXQ_cjs.CardinalityError({
3223
+ return new chunkSAFZ6JTI_cjs.CardinalityError({
1891
3224
  edgeKind,
1892
3225
  fromKind,
1893
3226
  fromId,
@@ -1902,7 +3235,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
1902
3235
  }
1903
3236
  case "oneActive": {
1904
3237
  if (hasActiveEdge) {
1905
- return new chunkBVRDGYXQ_cjs.CardinalityError({
3238
+ return new chunkSAFZ6JTI_cjs.CardinalityError({
1906
3239
  edgeKind,
1907
3240
  fromKind,
1908
3241
  fromId,
@@ -1916,7 +3249,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
1916
3249
  }
1917
3250
  function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
1918
3251
  if (existingCount > 0) {
1919
- return new chunkBVRDGYXQ_cjs.CardinalityError({
3252
+ return new chunkSAFZ6JTI_cjs.CardinalityError({
1920
3253
  edgeKind,
1921
3254
  fromKind,
1922
3255
  fromId,
@@ -1929,7 +3262,7 @@ function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCou
1929
3262
  function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
1930
3263
  const validFromKinds = registration.from.map((node) => node.kind);
1931
3264
  if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
1932
- return new chunkBVRDGYXQ_cjs.EndpointError({
3265
+ return new chunkSAFZ6JTI_cjs.EndpointError({
1933
3266
  edgeKind,
1934
3267
  endpoint: "from",
1935
3268
  actualKind: fromKind,
@@ -1938,7 +3271,7 @@ function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registr
1938
3271
  }
1939
3272
  const validToKinds = registration.to.map((node) => node.kind);
1940
3273
  if (!registry.isAssignableToAny(toKind, validToKinds)) {
1941
- return new chunkBVRDGYXQ_cjs.EndpointError({
3274
+ return new chunkSAFZ6JTI_cjs.EndpointError({
1942
3275
  edgeKind,
1943
3276
  endpoint: "to",
1944
3277
  actualKind: toKind,
@@ -1950,7 +3283,7 @@ function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registr
1950
3283
  function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
1951
3284
  for (const existingKind of existingKinds) {
1952
3285
  if (registry.areDisjoint(nodeKind, existingKind)) {
1953
- return new chunkBVRDGYXQ_cjs.DisjointError({
3286
+ return new chunkSAFZ6JTI_cjs.DisjointError({
1954
3287
  nodeId,
1955
3288
  attemptedKind: nodeKind,
1956
3289
  conflictingKind: existingKind
@@ -1987,7 +3320,7 @@ async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
1987
3320
  key
1988
3321
  });
1989
3322
  if (existing && existing.node_id !== id) {
1990
- throw new chunkBVRDGYXQ_cjs.UniquenessError({
3323
+ throw new chunkSAFZ6JTI_cjs.UniquenessError({
1991
3324
  constraintName: constraint.name,
1992
3325
  kind: kindToCheck,
1993
3326
  existingId: existing.node_id,
@@ -2093,7 +3426,7 @@ async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constr
2093
3426
  key: newKey
2094
3427
  });
2095
3428
  if (existing && existing.node_id !== id) {
2096
- throw new chunkBVRDGYXQ_cjs.UniquenessError({
3429
+ throw new chunkSAFZ6JTI_cjs.UniquenessError({
2097
3430
  constraintName: constraint.name,
2098
3431
  kind: kindToCheck,
2099
3432
  existingId: existing.node_id,
@@ -2150,7 +3483,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
2150
3483
  if (connectedEdges.length === 0) return;
2151
3484
  switch (behavior) {
2152
3485
  case "restrict": {
2153
- throw new chunkBVRDGYXQ_cjs.RestrictedDeleteError({
3486
+ throw new chunkSAFZ6JTI_cjs.RestrictedDeleteError({
2154
3487
  nodeKind: args.kind,
2155
3488
  nodeId: args.id,
2156
3489
  edgeCount: connectedEdges.length,
@@ -2161,7 +3494,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
2161
3494
  case "disconnect": {
2162
3495
  const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
2163
3496
  if (batchDelete !== void 0) {
2164
- await batchDelete.call(backend, {
3497
+ await batchDelete({
2165
3498
  graphId: ctx.graphId,
2166
3499
  ids: connectedEdges.map((edge) => edge.id)
2167
3500
  });
@@ -2223,7 +3556,7 @@ async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
2223
3556
  );
2224
3557
  }
2225
3558
  function parseRowProps(row) {
2226
- return chunkIPSVVTWT_cjs.rowPropsToObject(row.props);
3559
+ return chunkGNPGGLAE_cjs.rowPropsToObject(row.props);
2227
3560
  }
2228
3561
  async function applyNodeUpdate(ctx, args, backend) {
2229
3562
  const { kind, id } = args.existing;
@@ -2353,10 +3686,14 @@ async function applyNodeResurrect(ctx, args, backend) {
2353
3686
  }
2354
3687
 
2355
3688
  exports.ALIAS_CTE_PREFIX = ALIAS_CTE_PREFIX;
3689
+ exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
3690
+ exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
2356
3691
  exports.DEFAULT_SQL_SCHEMA = DEFAULT_SQL_SCHEMA;
2357
3692
  exports.EMBEDDINGS_CTE_ALIAS = EMBEDDINGS_CTE_ALIAS;
2358
3693
  exports.FULLTEXT_CTE_ALIAS = FULLTEXT_CTE_ALIAS;
2359
3694
  exports.HYBRID_CANDIDATES_CTE_ALIAS = HYBRID_CANDIDATES_CTE_ALIAS;
3695
+ exports.STORE_RUNTIME = STORE_RUNTIME;
3696
+ exports.TRANSACTION_RUNTIME = TRANSACTION_RUNTIME;
2360
3697
  exports.advanceRevisionClock = advanceRevisionClock;
2361
3698
  exports.applyNodeHardDelete = applyNodeHardDelete;
2362
3699
  exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
@@ -2364,37 +3701,62 @@ exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
2364
3701
  exports.applyNodeResurrect = applyNodeResurrect;
2365
3702
  exports.applyNodeSoftDelete = applyNodeSoftDelete;
2366
3703
  exports.applyNodeUpdate = applyNodeUpdate;
2367
- exports.asRecordedInstant = asRecordedInstant;
3704
+ exports.arrayField = arrayField;
2368
3705
  exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
2369
3706
  exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
2370
- exports.assertValidRecordedInstant = assertValidRecordedInstant;
3707
+ exports.baseField = baseField;
3708
+ exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
3709
+ exports.buildPredicateIndex = buildPredicateIndex;
2371
3710
  exports.checkCardinality = checkCardinality;
2372
3711
  exports.checkDisjointness = checkDisjointness;
2373
3712
  exports.checkUniqueEdge = checkUniqueEdge;
2374
3713
  exports.checkUniquenessConstraints = checkUniquenessConstraints;
2375
3714
  exports.checkWherePredicate = checkWherePredicate;
2376
3715
  exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
3716
+ exports.compileFieldValue = compileFieldValue;
3717
+ exports.compileKindFilter = compileKindFilter;
3718
+ exports.compilePredicateClauses = compilePredicateClauses;
3719
+ exports.compilePredicateExpression = compilePredicateExpression;
3720
+ exports.compileTemporalFilter = compileTemporalFilter;
2377
3721
  exports.computeFulltextContent = computeFulltextContent;
2378
3722
  exports.computeUniqueKey = computeUniqueKey;
2379
- exports.coordinateContext = coordinateContext;
2380
- exports.createHistoryUnsafeSqlRef = createHistoryUnsafeSqlRef;
3723
+ exports.createFulltextAccessor = createFulltextAccessor;
3724
+ exports.createGraphBackendProjection = createGraphBackendProjection;
2381
3725
  exports.createNodeWriteContext = createNodeWriteContext;
2382
3726
  exports.createRecordedBackend = createRecordedBackend;
2383
3727
  exports.createRecordedReadBinding = createRecordedReadBinding;
2384
3728
  exports.createRecordedTransactionScope = createRecordedTransactionScope;
2385
- exports.createRevisionTrackingUnsafeSqlRef = createRevisionTrackingUnsafeSqlRef;
2386
3729
  exports.createSqlSchema = createSqlSchema;
2387
3730
  exports.createUniquenessContext = createUniquenessContext;
2388
- exports.describeCoordinate = describeCoordinate;
3731
+ exports.currentReadInstant = currentReadInstant;
3732
+ exports.currentReadInstantFor = currentReadInstantFor;
3733
+ exports.dateField = dateField;
2389
3734
  exports.edgeInsertDispatch = edgeInsertDispatch;
2390
3735
  exports.ensureRevisionOrigin = ensureRevisionOrigin;
3736
+ exports.exists = exists;
3737
+ exports.extractFulltextMatchPredicates = extractFulltextMatchPredicates;
3738
+ exports.extractTemporalOptions = extractTemporalOptions;
3739
+ exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
3740
+ exports.fieldRef = fieldRef;
2391
3741
  exports.generateId = generateId;
2392
3742
  exports.getEdgeRowsByIds = getEdgeRowsByIds;
2393
3743
  exports.getEmbeddingFields = getEmbeddingFields;
3744
+ exports.getFieldPointer = getFieldPointer;
3745
+ exports.getHybridTargetAlias = getHybridTargetAlias;
2394
3746
  exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
3747
+ exports.getNodeKindsForAlias = getNodeKindsForAlias;
2395
3748
  exports.getNodeRowsByIds = getNodeRowsByIds;
3749
+ exports.getPredicatesForAlias = getPredicatesForAlias;
3750
+ exports.inSubquery = inSubquery;
3751
+ exports.isParameterRef = isParameterRef;
2396
3752
  exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
2397
3753
  exports.nodeInsertDispatch = nodeInsertDispatch;
3754
+ exports.notExists = notExists;
3755
+ exports.notInSubquery = notInSubquery;
3756
+ exports.numberField = numberField;
3757
+ exports.objectField = objectField;
3758
+ exports.param = param;
3759
+ exports.projectBackendMembers = projectBackendMembers;
2398
3760
  exports.readRecordedClock = readRecordedClock;
2399
3761
  exports.readRevisionOrigin = readRevisionOrigin;
2400
3762
  exports.recordedBindParamBudget = recordedBindParamBudget;
@@ -2405,14 +3767,21 @@ exports.recordedRelation = recordedRelation;
2405
3767
  exports.requireExternalRecordedReadSource = requireExternalRecordedReadSource;
2406
3768
  exports.requireRecordedReadBinding = requireRecordedReadBinding;
2407
3769
  exports.requireSqlSchema = requireSqlSchema;
2408
- exports.resolveReadCoordinate = resolveReadCoordinate;
2409
3770
  exports.runInsertBatch = runInsertBatch;
2410
3771
  exports.runInsertBatchReturning = runInsertBatchReturning;
2411
3772
  exports.runInsertNoReturn = runInsertNoReturn;
3773
+ exports.sqlValueList = sqlValueList;
3774
+ exports.storeBackend = storeBackend;
3775
+ exports.storeRuntime = storeRuntime;
3776
+ exports.stringField = stringField;
3777
+ exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
3778
+ exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
3779
+ exports.transactionBackend = transactionBackend;
3780
+ exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
2412
3781
  exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
2413
3782
  exports.validateEdgeEndpoints = validateEdgeEndpoints;
2414
3783
  exports.vectorSlotKey = vectorSlotKey;
2415
- exports.withRecordedCoordinate = withRecordedCoordinate;
3784
+ exports.withPinnedReadInstant = withPinnedReadInstant;
2416
3785
  exports.withRecordedFlushObserver = withRecordedFlushObserver;
2417
- //# sourceMappingURL=chunk-WOJMKB3N.cjs.map
2418
- //# sourceMappingURL=chunk-WOJMKB3N.cjs.map
3786
+ //# sourceMappingURL=chunk-NWYCOFEZ.cjs.map
3787
+ //# sourceMappingURL=chunk-NWYCOFEZ.cjs.map