@nicia-ai/typegraph 0.37.0 → 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-NBP2WTJW.cjs → chunk-2SL7OGPR.cjs} +2900 -1597
  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-552KNYQJ.js → chunk-A2FGSWMQ.js} +1907 -607
  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-J4IUSYFF.js → chunk-TE5ZA4VX.js} +69 -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-JBNOGRKW.cjs → chunk-YLINFV7Z.cjs} +157 -115
  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-552KNYQJ.js.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-EXU3RASM.js.map +0 -1
  339. package/dist/chunk-IP3CGGPA.cjs.map +0 -1
  340. package/dist/chunk-IPSVVTWT.cjs +0 -1540
  341. package/dist/chunk-IPSVVTWT.cjs.map +0 -1
  342. package/dist/chunk-IXGYRP2P.js.map +0 -1
  343. package/dist/chunk-J4IUSYFF.js.map +0 -1
  344. package/dist/chunk-JBNOGRKW.cjs.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-NBP2WTJW.cjs.map +0 -1
  351. package/dist/chunk-NUIG3BCV.cjs.map +0 -1
  352. package/dist/chunk-NXQFATMF.cjs.map +0 -1
  353. package/dist/chunk-OHMP6N2J.js +0 -47
  354. package/dist/chunk-OHMP6N2J.js.map +0 -1
  355. package/dist/chunk-QERAIDRJ.js.map +0 -1
  356. package/dist/chunk-QSXTWU4U.cjs +0 -12
  357. package/dist/chunk-RCVLFTCT.js.map +0 -1
  358. package/dist/chunk-TGOMW4MB.cjs.map +0 -1
  359. package/dist/chunk-TKT2XHED.js.map +0 -1
  360. package/dist/chunk-UGZUAYAR.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,1478 +0,0 @@
1
- import { nowIso } from './chunk-XGPUQ56G.js';
2
- import { likeEscapeClause, LIKE_ESCAPE_CHARACTER } from './chunk-OHMP6N2J.js';
3
- import { resolveFieldTypeInfoAtJsonPointer } from './chunk-SNXVDZAJ.js';
4
- import { ConfigurationError, UnsupportedPredicateError, CompilerInvariantError } from './chunk-5PNMDJ7J.js';
5
- import { normalizeJsonPointer, joinJsonPointers, jsonPointer } from './chunk-G6Q5UM7U.js';
6
- import { sql } from 'drizzle-orm';
7
-
8
- // src/backend/types.ts
9
- function normalizeGraphAnalyticsCapabilities(capabilities) {
10
- if (capabilities.graphAnalytics?.supported !== true || capabilities.transactions && capabilities.windowFunctions && capabilities.returning !== false) {
11
- return capabilities;
12
- }
13
- return {
14
- ...capabilities,
15
- graphAnalytics: { ...capabilities.graphAnalytics, supported: false }
16
- };
17
- }
18
- function rowPropsToObject(props) {
19
- return typeof props === "string" ? JSON.parse(props) : props;
20
- }
21
- function rowPropsToJsonText(props) {
22
- return typeof props === "string" ? props : JSON.stringify(props);
23
- }
24
- function isLiveNodeRow(row) {
25
- return row.deleted_at === void 0;
26
- }
27
- function isTombstonedNodeRow(row) {
28
- return row.deleted_at !== void 0;
29
- }
30
- var INTERNAL_TEMPORARY_WRITES = /* @__PURE__ */ Symbol(
31
- "typegraph.internalTemporaryWrites"
32
- );
33
- function createBackendOverlay(target, overlay) {
34
- const boundTargetMethods = /* @__PURE__ */ new Map();
35
- function hasOverlayProperty(property) {
36
- return Object.hasOwn(overlay, property);
37
- }
38
- function targetValue(targetObject, property) {
39
- const value = Reflect.get(targetObject, property, targetObject);
40
- if (typeof value !== "function") return value;
41
- const cached = boundTargetMethods.get(property);
42
- if (cached !== void 0) return cached;
43
- const method = value;
44
- const bound = method.bind(targetObject);
45
- boundTargetMethods.set(property, bound);
46
- return bound;
47
- }
48
- return new Proxy(target, {
49
- get(targetObject, property) {
50
- if (hasOverlayProperty(property)) {
51
- return Reflect.get(overlay, property, overlay);
52
- }
53
- return targetValue(targetObject, property);
54
- },
55
- has(targetObject, property) {
56
- return hasOverlayProperty(property) || Reflect.has(targetObject, property);
57
- },
58
- ownKeys(targetObject) {
59
- return [
60
- .../* @__PURE__ */ new Set([
61
- ...Reflect.ownKeys(targetObject),
62
- ...Reflect.ownKeys(overlay)
63
- ])
64
- ];
65
- },
66
- getOwnPropertyDescriptor(targetObject, property) {
67
- if (hasOverlayProperty(property)) {
68
- const descriptor = Reflect.getOwnPropertyDescriptor(overlay, property);
69
- if (descriptor === void 0) return;
70
- return { ...descriptor, configurable: true };
71
- }
72
- return Reflect.getOwnPropertyDescriptor(targetObject, property);
73
- },
74
- set(targetObject, property, value) {
75
- if (hasOverlayProperty(property)) {
76
- return Reflect.set(overlay, property, value, overlay);
77
- }
78
- return Reflect.set(targetObject, property, value, targetObject);
79
- },
80
- defineProperty(targetObject, property, attributes) {
81
- if (hasOverlayProperty(property)) {
82
- return Reflect.defineProperty(overlay, property, attributes);
83
- }
84
- return Reflect.defineProperty(targetObject, property, attributes);
85
- },
86
- deleteProperty(targetObject, property) {
87
- if (hasOverlayProperty(property)) {
88
- return Reflect.deleteProperty(overlay, property);
89
- }
90
- return Reflect.deleteProperty(targetObject, property);
91
- }
92
- });
93
- }
94
- function wrapWithManagedClose(backend, teardown) {
95
- let isClosed = false;
96
- return createBackendOverlay(backend, {
97
- async close() {
98
- if (isClosed) return;
99
- isClosed = true;
100
- await backend.close();
101
- await teardown();
102
- }
103
- });
104
- }
105
- async function runOptionallyInTransaction(backend, fn, fallback) {
106
- if ("transaction" in backend && backend.capabilities.transactions) {
107
- return backend.transaction((tx) => fn(tx));
108
- }
109
- return fn(fallback ?? backend);
110
- }
111
- var SQLITE_MAX_BIND_PARAMETERS = 999;
112
- var MODERN_SQLITE_MAX_BIND_PARAMETERS = 32766;
113
- var D1_MAX_BIND_PARAMETERS = 100;
114
- var DURABLE_OBJECT_MAX_BIND_PARAMETERS = 100;
115
- var POSTGRES_MAX_BIND_PARAMETERS = 65535;
116
- var SQLITE_CAPABILITIES = {
117
- transactions: true,
118
- // SQLite supports transactions
119
- windowFunctions: true,
120
- // SQLite has supported window functions since 3.25.0
121
- returning: true,
122
- // SQLite has supported RETURNING since 3.35.0
123
- maxBindParameters: SQLITE_MAX_BIND_PARAMETERS,
124
- // Generic SQLite builds do not guarantee ENABLE_MATH_FUNCTIONS. The local
125
- // better-sqlite3 factory overrides this flag for its bundled build contract.
126
- graphAnalytics: { supported: true, mathFunctions: false }
127
- };
128
- var POSTGRES_CAPABILITIES = {
129
- transactions: true,
130
- // PostgreSQL supports transactions
131
- windowFunctions: true,
132
- // PostgreSQL supports ROW_NUMBER() and related windows
133
- returning: true,
134
- // PostgreSQL has supported RETURNING since 8.2
135
- maxBindParameters: POSTGRES_MAX_BIND_PARAMETERS,
136
- graphAnalytics: { supported: true, mathFunctions: true }
137
- };
138
-
139
- // src/query/sql-intent.ts
140
- function asCompiledRowsSql(query) {
141
- return query;
142
- }
143
- function asCompiledSelectSql(query) {
144
- return asCompiledRowsSql(query);
145
- }
146
- function asCompiledStatementSql(query) {
147
- return query;
148
- }
149
- function asCompiledTemporaryStatementSql(query) {
150
- return query;
151
- }
152
- var forceCustomPlanQueries = /* @__PURE__ */ new WeakSet();
153
- function markForceCustomPlan(query) {
154
- forceCustomPlanQueries.add(query);
155
- }
156
- function shouldForceCustomPlan(query) {
157
- return forceCustomPlanQueries.has(query);
158
- }
159
- var annIndexScanQueries = /* @__PURE__ */ new WeakMap();
160
- function markAnnIndexScan(query, indexTypes) {
161
- annIndexScanQueries.set(query, indexTypes);
162
- }
163
- function annIndexScanTypes(query) {
164
- return annIndexScanQueries.get(query);
165
- }
166
- function isRawExecutable(query) {
167
- return !shouldForceCustomPlan(query) && annIndexScanTypes(query) === void 0;
168
- }
169
- var pinnedReadInstant;
170
- function withPinnedReadInstant(emit) {
171
- if (pinnedReadInstant !== void 0) return emit();
172
- pinnedReadInstant = nowIso();
173
- try {
174
- return emit();
175
- } finally {
176
- pinnedReadInstant = void 0;
177
- }
178
- }
179
- function currentReadInstant() {
180
- return sql`${pinnedReadInstant ?? nowIso()}`;
181
- }
182
- var CURRENT_READ_INSTANT_PLACEHOLDER = "__typegraph_current_read_instant__";
183
- function currentReadInstantPlaceholder() {
184
- return sql`${sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
185
- }
186
- function currentReadInstantFor(mode) {
187
- return mode === "placeholder" ? currentReadInstantPlaceholder() : currentReadInstant();
188
- }
189
- function compileTemporalFilter(options) {
190
- const { mode, asOf, tableAlias, currentTimestamp, recordedAsOf } = options;
191
- const prefix = tableAlias ? sql.raw(`${tableAlias}.`) : sql.raw("");
192
- const deletedAt = sql`${prefix}deleted_at`;
193
- const validFrom = sql`${prefix}valid_from`;
194
- const validTo = sql`${prefix}valid_to`;
195
- const validFilter = (() => {
196
- switch (mode) {
197
- case "current": {
198
- const now = recordedAsOf === void 0 ? currentTimestamp ?? currentReadInstant() : sql`${recordedAsOf}`;
199
- return sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
200
- }
201
- case "asOf": {
202
- if (asOf === void 0) {
203
- throw new Error(
204
- `asOf timestamp is required for temporal mode "asOf"`
205
- );
206
- }
207
- const timestamp = asOf;
208
- return sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
209
- }
210
- case "includeEnded": {
211
- return sql`${deletedAt} IS NULL`;
212
- }
213
- case "includeTombstones": {
214
- return sql.raw("1=1");
215
- }
216
- }
217
- })();
218
- if (recordedAsOf === void 0) return validFilter;
219
- const recordedFrom = sql`${prefix}recorded_from`;
220
- const recordedTo = sql`${prefix}recorded_to`;
221
- return sql`(${validFilter}) AND ${recordedFrom} <= ${recordedAsOf} AND ${recordedAsOf} < ${recordedTo}`;
222
- }
223
- function extractTemporalOptions(ast, tableAlias) {
224
- return {
225
- mode: ast.temporalMode.mode,
226
- asOf: ast.temporalMode.asOf,
227
- recordedAsOf: ast.recordedAsOf,
228
- tableAlias
229
- };
230
- }
231
-
232
- // src/query/subquery-utils.ts
233
- function normalizeValueType(valueType) {
234
- if (valueType === void 0 || valueType === "unknown") {
235
- return void 0;
236
- }
237
- return valueType;
238
- }
239
- function isUnsupportedInSubqueryValueType(valueType) {
240
- const normalized = normalizeValueType(valueType);
241
- return normalized === "array" || normalized === "object" || normalized === "embedding";
242
- }
243
- function isInSubqueryTypeCompatible(left, right) {
244
- const normalizedLeft = normalizeValueType(left);
245
- const normalizedRight = normalizeValueType(right);
246
- if (normalizedLeft === void 0 || normalizedRight === void 0) {
247
- return true;
248
- }
249
- return normalizedLeft === normalizedRight;
250
- }
251
- function getAggregateValueType(aggregate) {
252
- switch (aggregate.function) {
253
- case "count":
254
- case "countDistinct":
255
- case "sum":
256
- case "avg": {
257
- return "number";
258
- }
259
- case "min":
260
- case "max": {
261
- return normalizeValueType(aggregate.field.valueType);
262
- }
263
- }
264
- }
265
- function getProjectedValueTypes(subquery) {
266
- if (subquery.selectiveFields && subquery.selectiveFields.length > 0) {
267
- return subquery.selectiveFields.map(
268
- (field) => normalizeValueType(field.valueType)
269
- );
270
- }
271
- return subquery.projection.fields.map((field) => {
272
- if (field.source.__type === "aggregate") {
273
- return getAggregateValueType(field.source);
274
- }
275
- return normalizeValueType(field.source.valueType);
276
- });
277
- }
278
- function getSubqueryColumnCount(subquery) {
279
- return getProjectedValueTypes(subquery).length;
280
- }
281
- function getSingleSubqueryColumnValueType(subquery) {
282
- const valueTypes = getProjectedValueTypes(subquery);
283
- if (valueTypes.length !== 1) {
284
- return void 0;
285
- }
286
- return valueTypes[0];
287
- }
288
-
289
- // src/query/predicates.ts
290
- function predicate(expr) {
291
- return {
292
- __expr: expr,
293
- and: (other) => predicate({
294
- __type: "and",
295
- predicates: [expr, other.__expr]
296
- }),
297
- or: (other) => predicate({
298
- __type: "or",
299
- predicates: [expr, other.__expr]
300
- }),
301
- not: () => predicate({
302
- __type: "not",
303
- predicate: expr
304
- })
305
- };
306
- }
307
- function param(name) {
308
- if (name === CURRENT_READ_INSTANT_PLACEHOLDER) {
309
- throw new ConfigurationError(
310
- `Parameter name "${name}" is reserved for internal use`,
311
- { parameterName: name }
312
- );
313
- }
314
- return { __type: "parameter", name };
315
- }
316
- function isParameterRef(value) {
317
- if (typeof value !== "object" || value === null) return false;
318
- return value.__type === "parameter";
319
- }
320
- function fieldRef(alias, path, options) {
321
- return {
322
- __type: "field_ref",
323
- alias,
324
- path,
325
- ...options?.jsonPointer !== void 0 && {
326
- jsonPointer: options.jsonPointer
327
- },
328
- ...options?.valueType !== void 0 && { valueType: options.valueType },
329
- ...options?.elementType !== void 0 && {
330
- elementType: options.elementType
331
- }
332
- };
333
- }
334
- function coerceLiteralValue(value) {
335
- if (value instanceof Date) {
336
- return value;
337
- }
338
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
339
- return value;
340
- }
341
- throw new Error(`Unsupported literal value type: ${typeof value}`);
342
- }
343
- function inferLiteralValueType(value) {
344
- if (typeof value === "string") {
345
- return "string";
346
- }
347
- if (typeof value === "number") {
348
- return "number";
349
- }
350
- return "boolean";
351
- }
352
- function literal(value) {
353
- if (value instanceof Date) {
354
- return { __type: "literal", value: value.toISOString(), valueType: "date" };
355
- }
356
- const valueType = inferLiteralValueType(value);
357
- return {
358
- __type: "literal",
359
- value,
360
- valueType
361
- };
362
- }
363
- function comparison(op, field, value) {
364
- if (isParameterRef(value)) {
365
- const expr2 = {
366
- __type: "comparison",
367
- op,
368
- left: field,
369
- right: value
370
- };
371
- return predicate(expr2);
372
- }
373
- const coercedValue = coerceLiteralValue(value);
374
- const expr = {
375
- __type: "comparison",
376
- op,
377
- left: field,
378
- right: literal(coercedValue)
379
- };
380
- return predicate(expr);
381
- }
382
- function inComparison(op, field, values) {
383
- const literals = values.map((value) => literal(coerceLiteralValue(value)));
384
- const expr = {
385
- __type: "comparison",
386
- op,
387
- left: field,
388
- right: literals
389
- };
390
- return predicate(expr);
391
- }
392
- function stringOp(op, field, pattern) {
393
- if (isParameterRef(pattern)) {
394
- const expr2 = {
395
- __type: "string_op",
396
- op,
397
- field,
398
- pattern
399
- };
400
- return predicate(expr2);
401
- }
402
- const expr = {
403
- __type: "string_op",
404
- op,
405
- field,
406
- pattern
407
- };
408
- return predicate(expr);
409
- }
410
- function nullCheck(op, field) {
411
- const expr = {
412
- __type: "null_check",
413
- op,
414
- field
415
- };
416
- return predicate(expr);
417
- }
418
- function between(field, lower, upper) {
419
- const expr = {
420
- __type: "between",
421
- field,
422
- lower: isParameterRef(lower) ? lower : literal(lower),
423
- upper: isParameterRef(upper) ? upper : literal(upper)
424
- };
425
- return predicate(expr);
426
- }
427
- function baseFieldBuilder(field) {
428
- return {
429
- eq: (value) => comparison("eq", field, value),
430
- neq: (value) => comparison("neq", field, value),
431
- isNull: () => nullCheck("isNull", field),
432
- isNotNull: () => nullCheck("isNotNull", field),
433
- in: (values) => inComparison("in", field, values),
434
- notIn: (values) => inComparison("notIn", field, values)
435
- };
436
- }
437
- function stringField(field) {
438
- return {
439
- ...baseFieldBuilder(field),
440
- gt: (value) => comparison("gt", field, value),
441
- gte: (value) => comparison("gte", field, value),
442
- lt: (value) => comparison("lt", field, value),
443
- lte: (value) => comparison("lte", field, value),
444
- contains: (pattern) => stringOp("contains", field, pattern),
445
- startsWith: (pattern) => stringOp("startsWith", field, pattern),
446
- endsWith: (pattern) => stringOp("endsWith", field, pattern),
447
- like: (pattern) => stringOp("like", field, pattern),
448
- ilike: (pattern) => stringOp("ilike", field, pattern)
449
- };
450
- }
451
- var DEFAULT_FULLTEXT_MATCH_K = 50;
452
- function createFulltextAccessor(alias, hasSearchableField) {
453
- return {
454
- matches: (query, k, options) => {
455
- if (!hasSearchableField()) {
456
- throw new UnsupportedPredicateError(
457
- `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" })\`.`
458
- );
459
- }
460
- return fulltextMatch(
461
- fieldRef(alias, ["$fulltext"]),
462
- query,
463
- k ?? DEFAULT_FULLTEXT_MATCH_K,
464
- options
465
- );
466
- }
467
- };
468
- }
469
- function fulltextMatch(field, query, limit, options) {
470
- if (!Number.isFinite(limit) || limit <= 0) {
471
- throw new UnsupportedPredicateError(
472
- `matches() limit must be a positive finite number, got ${String(limit)}`
473
- );
474
- }
475
- const expr = {
476
- __type: "fulltext_match",
477
- field,
478
- query,
479
- mode: options?.mode ?? "websearch",
480
- limit,
481
- ...options?.language === void 0 ? {} : { language: options.language },
482
- ...options?.minScore === void 0 ? {} : { minScore: options.minScore }
483
- };
484
- return predicate(expr);
485
- }
486
- function numberField(field) {
487
- return {
488
- ...baseFieldBuilder(field),
489
- gt: (value) => comparison("gt", field, value),
490
- gte: (value) => comparison("gte", field, value),
491
- lt: (value) => comparison("lt", field, value),
492
- lte: (value) => comparison("lte", field, value),
493
- between: (lower, upper) => between(field, lower, upper)
494
- };
495
- }
496
- function dateField(field) {
497
- return {
498
- ...baseFieldBuilder(field),
499
- gt: (value) => comparison("gt", field, value),
500
- gte: (value) => comparison("gte", field, value),
501
- lt: (value) => comparison("lt", field, value),
502
- lte: (value) => comparison("lte", field, value),
503
- between: (lower, upper) => between(field, lower, upper)
504
- };
505
- }
506
- function baseField(field) {
507
- return baseFieldBuilder(field);
508
- }
509
- function arrayOp(op, field, values, length) {
510
- const expr = {
511
- __type: "array_op",
512
- op,
513
- field,
514
- ...values !== void 0 && {
515
- values: values.map((value) => literal(coerceLiteralValue(value)))
516
- },
517
- ...length !== void 0 && { length }
518
- };
519
- return predicate(expr);
520
- }
521
- function arrayField(field) {
522
- return {
523
- ...baseFieldBuilder(field),
524
- contains: (value) => arrayOp("contains", field, [value]),
525
- containsAll: (values) => arrayOp("containsAll", field, values),
526
- containsAny: (values) => arrayOp("containsAny", field, values),
527
- isEmpty: () => arrayOp("isEmpty", field),
528
- isNotEmpty: () => arrayOp("isNotEmpty", field),
529
- lengthEq: (length) => arrayOp("lengthEq", field, void 0, length),
530
- lengthGt: (length) => arrayOp("lengthGt", field, void 0, length),
531
- lengthGte: (length) => arrayOp("lengthGte", field, void 0, length),
532
- lengthLt: (length) => arrayOp("lengthLt", field, void 0, length),
533
- lengthLte: (length) => arrayOp("lengthLte", field, void 0, length)
534
- };
535
- }
536
- function vectorSimilarity(field, queryEmbedding, limit, options) {
537
- const expr = {
538
- __type: "vector_similarity",
539
- field,
540
- queryEmbedding,
541
- // Leave metric unset when the caller didn't specify one, so the compiler
542
- // resolves the field's declared metric per kind. Defaulting to "cosine"
543
- // here would mis-rank l2/inner_product fields and bypass their ANN index.
544
- ...options?.metric !== void 0 && { metric: options.metric },
545
- limit,
546
- ...options?.minScore !== void 0 && { minScore: options.minScore },
547
- ...options?.approximate !== void 0 && {
548
- approximate: options.approximate
549
- }
550
- };
551
- return predicate(expr);
552
- }
553
- function embeddingField(field) {
554
- return {
555
- ...baseFieldBuilder(field),
556
- similarTo: (queryEmbedding, k, options) => vectorSimilarity(field, queryEmbedding, k, options)
557
- };
558
- }
559
- function buildFieldBuilderForTypeInfo(field, typeInfo) {
560
- if (!typeInfo) {
561
- return baseField(field);
562
- }
563
- switch (typeInfo.valueType) {
564
- case "string": {
565
- return stringField(field);
566
- }
567
- case "number": {
568
- return numberField(field);
569
- }
570
- case "boolean": {
571
- return baseField(field);
572
- }
573
- case "date": {
574
- return dateField(field);
575
- }
576
- case "array": {
577
- return arrayField(field);
578
- }
579
- case "object": {
580
- return objectField(field, { typeInfo });
581
- }
582
- case "embedding": {
583
- return embeddingField(field);
584
- }
585
- case "unknown": {
586
- return baseField(field);
587
- }
588
- }
589
- }
590
- function resolvePointerTypeInfo(typeInfo, pointer) {
591
- return resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
592
- }
593
- function objectOp(op, field, pointer, value, options) {
594
- const expr = {
595
- __type: "object_op",
596
- op,
597
- field,
598
- pointer,
599
- ...value !== void 0 && {
600
- value: literal(coerceLiteralValue(value))
601
- },
602
- ...options?.valueType !== void 0 && { valueType: options.valueType },
603
- ...options?.elementType !== void 0 && {
604
- elementType: options.elementType
605
- }
606
- };
607
- return predicate(expr);
608
- }
609
- function objectField(field, options) {
610
- const basePointer = field.jsonPointer;
611
- return {
612
- ...baseFieldBuilder(field),
613
- get: (key) => {
614
- const pointer = jsonPointer([key]);
615
- const nestedPointer = joinJsonPointers(basePointer, pointer);
616
- const resolved = resolvePointerTypeInfo(options?.typeInfo, pointer);
617
- const nestedRef = fieldRef(field.alias, field.path, {
618
- jsonPointer: nestedPointer,
619
- ...resolved?.valueType !== void 0 && {
620
- valueType: resolved.valueType
621
- },
622
- ...resolved?.elementType !== void 0 && {
623
- elementType: resolved.elementType
624
- }
625
- });
626
- return buildFieldBuilderForTypeInfo(nestedRef, resolved);
627
- },
628
- hasKey: (key) => {
629
- const pointer = jsonPointer([key]);
630
- resolvePointerTypeInfo(options?.typeInfo, pointer);
631
- return objectOp("hasKey", field, pointer);
632
- },
633
- hasPath: (pointer) => {
634
- const normalized = normalizeJsonPointer(pointer);
635
- resolvePointerTypeInfo(options?.typeInfo, normalized);
636
- return objectOp("hasPath", field, normalized);
637
- },
638
- pathEquals: (pointer, value) => {
639
- const normalized = normalizeJsonPointer(pointer);
640
- const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
641
- if (resolved && (resolved.valueType === "array" || resolved.valueType === "object")) {
642
- throw new Error("pathEquals is only supported for scalar JSON values");
643
- }
644
- const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
645
- return objectOp("pathEquals", field, normalized, value, predicateOptions);
646
- },
647
- pathContains: (pointer, value) => {
648
- const normalized = normalizeJsonPointer(pointer);
649
- const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
650
- if (resolved && resolved.valueType !== "array") {
651
- throw new Error("pathContains is only supported for JSON array values");
652
- }
653
- const predicateOptions = resolved?.elementType === void 0 ? void 0 : { elementType: resolved.elementType };
654
- return objectOp(
655
- "pathContains",
656
- field,
657
- normalized,
658
- value,
659
- predicateOptions
660
- );
661
- },
662
- pathIsNull: (pointer) => {
663
- const normalized = normalizeJsonPointer(pointer);
664
- const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
665
- const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
666
- return objectOp(
667
- "pathIsNull",
668
- field,
669
- normalized,
670
- void 0,
671
- predicateOptions
672
- );
673
- },
674
- pathIsNotNull: (pointer) => {
675
- const normalized = normalizeJsonPointer(pointer);
676
- const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
677
- const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
678
- return objectOp(
679
- "pathIsNotNull",
680
- field,
681
- normalized,
682
- void 0,
683
- predicateOptions
684
- );
685
- },
686
- field: (pointer) => {
687
- const normalized = normalizeJsonPointer(pointer);
688
- const nestedPointer = joinJsonPointers(basePointer, normalized);
689
- const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
690
- const nestedRef = fieldRef(field.alias, field.path, {
691
- jsonPointer: nestedPointer,
692
- ...resolved?.valueType !== void 0 && {
693
- valueType: resolved.valueType
694
- },
695
- ...resolved?.elementType !== void 0 && {
696
- elementType: resolved.elementType
697
- }
698
- });
699
- return buildFieldBuilderForTypeInfo(nestedRef, resolved);
700
- }
701
- };
702
- }
703
- function exists(subquery) {
704
- const expr = {
705
- __type: "exists",
706
- subquery,
707
- negated: false
708
- };
709
- return predicate(expr);
710
- }
711
- function notExists(subquery) {
712
- const expr = {
713
- __type: "exists",
714
- subquery,
715
- negated: true
716
- };
717
- return predicate(expr);
718
- }
719
- function inSubquery(field, subquery) {
720
- assertSingleColumnSubquery(subquery);
721
- assertCompatibleSubqueryValueTypes(field, subquery);
722
- const expr = {
723
- __type: "in_subquery",
724
- field,
725
- subquery,
726
- negated: false
727
- };
728
- return predicate(expr);
729
- }
730
- function notInSubquery(field, subquery) {
731
- assertSingleColumnSubquery(subquery);
732
- assertCompatibleSubqueryValueTypes(field, subquery);
733
- const expr = {
734
- __type: "in_subquery",
735
- field,
736
- subquery,
737
- negated: true
738
- };
739
- return predicate(expr);
740
- }
741
- function assertSingleColumnSubquery(subquery) {
742
- const columnCount = getSubqueryColumnCount(subquery);
743
- if (columnCount === 1) return;
744
- throw new UnsupportedPredicateError(
745
- `IN/NOT IN subquery must project exactly 1 column, but got ${columnCount}`,
746
- { subqueryColumnCount: columnCount },
747
- {
748
- suggestion: "Use aggregate() with exactly one projected field for scalar IN/NOT IN subqueries."
749
- }
750
- );
751
- }
752
- function assertCompatibleSubqueryValueTypes(field, subquery) {
753
- const fieldValueType = field.valueType;
754
- const subqueryValueType = getSingleSubqueryColumnValueType(subquery);
755
- const resolvedValueType = fieldValueType ?? subqueryValueType;
756
- if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
757
- throw new UnsupportedPredicateError(
758
- `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
759
- { valueType: resolvedValueType },
760
- {
761
- suggestion: "Use scalar fields (string/number/boolean/date) in IN/NOT IN predicates."
762
- }
763
- );
764
- }
765
- if (isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
766
- return;
767
- }
768
- throw new UnsupportedPredicateError(
769
- `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
770
- {
771
- fieldValueType,
772
- subqueryValueType
773
- }
774
- );
775
- }
776
- var COMPARISON_OP_SQL = {
777
- eq: "=",
778
- neq: "!=",
779
- gt: ">",
780
- gte: ">=",
781
- lt: "<",
782
- lte: "<="
783
- };
784
- function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
785
- if (cteColumnPrefix !== void 0) {
786
- const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
787
- if (field.path.length === 1 && field.path[0] === "id") {
788
- return sql.raw(`${qualifier2}id`);
789
- }
790
- if (field.path.length === 1 && field.path[0] === "kind") {
791
- return sql.raw(`${qualifier2}kind`);
792
- }
793
- if (field.path.length > 0 && field.path[0] === "props") {
794
- return sql.raw(`${qualifier2}props`);
795
- }
796
- return sql.raw(`${qualifier2}${field.path.join("_")}`);
797
- }
798
- const prefix = field.alias;
799
- const qualifier = cteAlias ? `${cteAlias}.` : "";
800
- if (field.path.length === 1 && field.path[0] === "id") {
801
- return sql.raw(`${qualifier}${prefix}_id`);
802
- }
803
- if (field.path.length === 1 && field.path[0] === "kind") {
804
- return sql.raw(`${qualifier}${prefix}_kind`);
805
- }
806
- if (field.path.length > 0 && field.path[0] === "props") {
807
- return sql.raw(`${qualifier}${prefix}_props`);
808
- }
809
- return sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
810
- }
811
- function getFieldPointer(field) {
812
- if (field.jsonPointer !== void 0) {
813
- return field.jsonPointer;
814
- }
815
- if (field.path.length > 1 && field.path[0] === "props") {
816
- return jsonPointer(field.path.slice(1));
817
- }
818
- return void 0;
819
- }
820
- function isJsonField(field) {
821
- return field.path.length > 0 && field.path[0] === "props";
822
- }
823
- function normalizeValueType2(valueType) {
824
- if (!valueType || valueType === "unknown") {
825
- return void 0;
826
- }
827
- return valueType;
828
- }
829
- function compileFieldValue(field, dialect, valueType, cteAlias, pointerOverride, cteColumnPrefix) {
830
- const resolved = normalizeValueType2(valueType);
831
- const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
832
- if (!isJsonField(field)) {
833
- return column;
834
- }
835
- const pointer = pointerOverride ?? getFieldPointer(field);
836
- if (!pointer || pointer === "") {
837
- return column;
838
- }
839
- switch (resolved) {
840
- case "number": {
841
- return dialect.jsonExtractNumber(column, pointer);
842
- }
843
- case "boolean": {
844
- return dialect.jsonExtractBoolean(column, pointer);
845
- }
846
- case "date": {
847
- return dialect.jsonExtractDate(column, pointer);
848
- }
849
- case "array":
850
- case "object":
851
- case "embedding": {
852
- return dialect.jsonExtract(column, pointer);
853
- }
854
- case "string":
855
- case "unknown":
856
- case void 0: {
857
- return dialect.jsonExtractText(column, pointer);
858
- }
859
- }
860
- }
861
- function compileFieldTextValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
862
- const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
863
- if (!isJsonField(field)) {
864
- return column;
865
- }
866
- const pointer = getFieldPointer(field);
867
- if (!pointer || pointer === "") {
868
- return column;
869
- }
870
- return dialect.jsonExtractText(column, pointer);
871
- }
872
- function compileFieldJsonValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
873
- const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
874
- if (!isJsonField(field)) {
875
- return column;
876
- }
877
- const pointer = pointerOverride ?? getFieldPointer(field);
878
- if (!pointer || pointer === "") {
879
- return column;
880
- }
881
- return dialect.jsonExtract(column, pointer);
882
- }
883
- function resolveLiteralValueTypes(literals) {
884
- const resolved = /* @__PURE__ */ new Set();
885
- for (const literal2 of literals) {
886
- const valueType = normalizeValueType2(literal2.valueType);
887
- if (valueType) {
888
- resolved.add(valueType);
889
- }
890
- }
891
- if (resolved.size > 1) {
892
- throw new UnsupportedPredicateError(
893
- "Mixed literal value types are not supported in predicates",
894
- { valueTypes: [...resolved] }
895
- );
896
- }
897
- return resolved.values().next().value;
898
- }
899
- function resolveComparisonValueType(field, right) {
900
- if (isParameterRef(right)) {
901
- return normalizeValueType2(right.valueType) ?? normalizeValueType2(field.valueType);
902
- }
903
- const literals = Array.isArray(right) ? right : [right];
904
- const literalType = resolveLiteralValueTypes(literals);
905
- const fieldType = normalizeValueType2(field.valueType);
906
- if (fieldType === "date" && literalType === "string") {
907
- return fieldType;
908
- }
909
- if (literalType) {
910
- return literalType;
911
- }
912
- return fieldType;
913
- }
914
- function resolvePredicateValueType(preferred, literal2) {
915
- const normalizedPreferred = normalizeValueType2(preferred);
916
- if (normalizedPreferred) {
917
- return normalizedPreferred;
918
- }
919
- return literal2 ? normalizeValueType2(literal2.valueType) : void 0;
920
- }
921
- function convertValueForSql(value, dialect) {
922
- return dialect.bindValue(value);
923
- }
924
- function compileStringPattern(op, pattern) {
925
- const escaped = pattern.replaceAll(
926
- LIKE_ESCAPE_CHARACTER,
927
- `${LIKE_ESCAPE_CHARACTER}${LIKE_ESCAPE_CHARACTER}`
928
- ).replaceAll("%", `${LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${LIKE_ESCAPE_CHARACTER}_`);
929
- switch (op) {
930
- case "contains": {
931
- return `%${escaped}%`;
932
- }
933
- case "startsWith": {
934
- return `${escaped}%`;
935
- }
936
- case "endsWith": {
937
- return `%${escaped}`;
938
- }
939
- case "like":
940
- case "ilike": {
941
- return pattern;
942
- }
943
- default: {
944
- return escaped;
945
- }
946
- }
947
- }
948
- function escapeLikePatternParameter(parameter) {
949
- const doubledEscape = `${LIKE_ESCAPE_CHARACTER}${LIKE_ESCAPE_CHARACTER}`;
950
- return sql`REPLACE(REPLACE(REPLACE(${parameter}, ${LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${LIKE_ESCAPE_CHARACTER}_`})`;
951
- }
952
- function compileParameterizedStringPattern(op, parameter) {
953
- switch (op) {
954
- case "contains": {
955
- const escaped = escapeLikePatternParameter(parameter);
956
- return sql`'%' || ${escaped} || '%'`;
957
- }
958
- case "startsWith": {
959
- const escaped = escapeLikePatternParameter(parameter);
960
- return sql`${escaped} || '%'`;
961
- }
962
- case "endsWith": {
963
- const escaped = escapeLikePatternParameter(parameter);
964
- return sql`'%' || ${escaped}`;
965
- }
966
- case "like":
967
- case "ilike": {
968
- return parameter;
969
- }
970
- default: {
971
- return escapeLikePatternParameter(parameter);
972
- }
973
- }
974
- }
975
- function compilePredicateExpression(expr, ctx) {
976
- const { dialect } = ctx;
977
- const cteColumnPrefix = ctx.cteColumnPrefix;
978
- switch (expr.__type) {
979
- case "comparison": {
980
- return compileComparisonPredicate(expr, dialect, cteColumnPrefix);
981
- }
982
- case "string_op": {
983
- const field = compileFieldTextValue(
984
- expr.field,
985
- dialect,
986
- void 0,
987
- void 0,
988
- cteColumnPrefix
989
- );
990
- if (isParameterRef(expr.pattern)) {
991
- const placeholder = sql`${sql.placeholder(expr.pattern.name)}`;
992
- const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
993
- if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
994
- return dialect.ilike(field, pattern2);
995
- }
996
- return sql`${field} LIKE ${pattern2} ${likeEscapeClause}`;
997
- }
998
- const pattern = compileStringPattern(expr.op, expr.pattern);
999
- if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
1000
- return dialect.ilike(field, pattern);
1001
- }
1002
- return sql`${field} LIKE ${pattern} ${likeEscapeClause}`;
1003
- }
1004
- case "null_check": {
1005
- const field = compileFieldTextValue(
1006
- expr.field,
1007
- dialect,
1008
- void 0,
1009
- void 0,
1010
- cteColumnPrefix
1011
- );
1012
- return expr.op === "isNull" ? sql`${field} IS NULL` : sql`${field} IS NOT NULL`;
1013
- }
1014
- case "between": {
1015
- const lowerIsParam = isParameterRef(expr.lower);
1016
- const upperIsParam = isParameterRef(expr.upper);
1017
- const boundsForType = [];
1018
- if (!lowerIsParam) boundsForType.push(expr.lower);
1019
- if (!upperIsParam) boundsForType.push(expr.upper);
1020
- const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
1021
- if (valueType === "array" || valueType === "object") {
1022
- throw new UnsupportedPredicateError(
1023
- "Between comparisons are not supported for JSON arrays or objects"
1024
- );
1025
- }
1026
- const field = compileFieldValue(
1027
- expr.field,
1028
- dialect,
1029
- valueType,
1030
- void 0,
1031
- void 0,
1032
- cteColumnPrefix
1033
- );
1034
- const lower = lowerIsParam ? sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
1035
- const upper = upperIsParam ? sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
1036
- return sql`${field} BETWEEN ${lower} AND ${upper}`;
1037
- }
1038
- case "and": {
1039
- const parts = expr.predicates.map(
1040
- (p) => compilePredicateExpression(p, ctx)
1041
- );
1042
- return sql`(${sql.join(parts, sql` AND `)})`;
1043
- }
1044
- case "or": {
1045
- const parts = expr.predicates.map(
1046
- (p) => compilePredicateExpression(p, ctx)
1047
- );
1048
- return sql`(${sql.join(parts, sql` OR `)})`;
1049
- }
1050
- case "not": {
1051
- const inner = compilePredicateExpression(expr.predicate, ctx);
1052
- return sql`NOT (${inner})`;
1053
- }
1054
- case "array_op": {
1055
- return compileArrayPredicate(expr, dialect, cteColumnPrefix);
1056
- }
1057
- case "object_op": {
1058
- return compileObjectPredicate(expr, dialect, cteColumnPrefix);
1059
- }
1060
- case "aggregate_comparison": {
1061
- return compileAggregatePredicate(expr, dialect);
1062
- }
1063
- case "exists": {
1064
- return compileExistsSubquery(expr, ctx);
1065
- }
1066
- case "in_subquery": {
1067
- return compileInSubquery(expr, ctx);
1068
- }
1069
- case "vector_similarity":
1070
- case "fulltext_match": {
1071
- return STRUCTURAL_PREDICATE_NOOP;
1072
- }
1073
- }
1074
- }
1075
- var STRUCTURAL_PREDICATE_NOOP = sql.raw("1=1");
1076
- function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
1077
- if (isParameterRef(expr.right)) {
1078
- const parameterValueType = normalizeValueType2(expr.right.valueType) ?? normalizeValueType2(expr.left.valueType);
1079
- const left2 = compileFieldValue(
1080
- expr.left,
1081
- dialect,
1082
- parameterValueType,
1083
- void 0,
1084
- void 0,
1085
- cteColumnPrefix
1086
- );
1087
- const opSql2 = COMPARISON_OP_SQL[expr.op];
1088
- if (!opSql2) {
1089
- throw new UnsupportedPredicateError(
1090
- `Comparison operation "${expr.op}" is not supported for parameterized predicates`
1091
- );
1092
- }
1093
- return sql`${left2} ${sql.raw(opSql2)} ${sql.placeholder(expr.right.name)}`;
1094
- }
1095
- const valueType = resolveComparisonValueType(expr.left, expr.right);
1096
- if (valueType === "array" || valueType === "object") {
1097
- throw new UnsupportedPredicateError(
1098
- `Comparison operation "${expr.op}" is not supported for ${valueType} values`
1099
- );
1100
- }
1101
- const left = compileFieldValue(
1102
- expr.left,
1103
- dialect,
1104
- valueType,
1105
- void 0,
1106
- void 0,
1107
- cteColumnPrefix
1108
- );
1109
- if (expr.op === "in" || expr.op === "notIn") {
1110
- const values = Array.isArray(expr.right) ? expr.right : [expr.right];
1111
- if (values.length === 0) {
1112
- return expr.op === "in" ? sql.raw("1=0") : sql.raw("1=1");
1113
- }
1114
- const convertedValues = values.map(
1115
- (value) => convertValueForSql(value.value, dialect)
1116
- );
1117
- return dialect.inList(left, convertedValues, expr.op === "notIn");
1118
- }
1119
- const right = expr.right;
1120
- const rightValue = Array.isArray(right) ? right[0] : right;
1121
- const convertedRight = convertValueForSql(rightValue.value, dialect);
1122
- const opSql = COMPARISON_OP_SQL[expr.op];
1123
- if (!opSql) {
1124
- throw new UnsupportedPredicateError(
1125
- `Comparison operation "${expr.op}" is not supported`
1126
- );
1127
- }
1128
- return sql`${left} ${sql.raw(opSql)} ${convertedRight}`;
1129
- }
1130
- function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
1131
- const field = compileFieldJsonValue(
1132
- expr.field,
1133
- dialect,
1134
- void 0,
1135
- void 0,
1136
- cteColumnPrefix
1137
- );
1138
- const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
1139
- switch (expr.op) {
1140
- case "isEmpty": {
1141
- return sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
1142
- }
1143
- case "isNotEmpty": {
1144
- return sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
1145
- }
1146
- case "lengthEq": {
1147
- return sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
1148
- }
1149
- case "lengthGt": {
1150
- return sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
1151
- }
1152
- case "lengthGte": {
1153
- return sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
1154
- }
1155
- case "lengthLt": {
1156
- return sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
1157
- }
1158
- case "lengthLte": {
1159
- return sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
1160
- }
1161
- case "contains": {
1162
- const value = values[0];
1163
- if (value === void 0) {
1164
- return sql.raw("1=0");
1165
- }
1166
- return dialect.jsonArrayContains(field, value);
1167
- }
1168
- case "containsAll": {
1169
- return dialect.jsonArrayContainsAll(field, values);
1170
- }
1171
- case "containsAny": {
1172
- return dialect.jsonArrayContainsAny(field, values);
1173
- }
1174
- }
1175
- }
1176
- function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
1177
- const basePointer = getFieldPointer(expr.field);
1178
- const pointer = joinJsonPointers(basePointer, expr.pointer);
1179
- const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
1180
- switch (expr.op) {
1181
- case "hasKey":
1182
- case "hasPath": {
1183
- return dialect.jsonHasPath(column, pointer);
1184
- }
1185
- case "pathEquals": {
1186
- if (!expr.value) {
1187
- throw new UnsupportedPredicateError(
1188
- "pathEquals requires a comparison value"
1189
- );
1190
- }
1191
- const valueType = resolvePredicateValueType(expr.valueType, expr.value);
1192
- if (valueType === "array" || valueType === "object") {
1193
- throw new UnsupportedPredicateError(
1194
- "pathEquals is not supported for JSON arrays or objects"
1195
- );
1196
- }
1197
- const left = compileFieldValue(
1198
- expr.field,
1199
- dialect,
1200
- valueType,
1201
- void 0,
1202
- pointer,
1203
- cteColumnPrefix
1204
- );
1205
- return sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
1206
- }
1207
- case "pathContains": {
1208
- if (!expr.value) {
1209
- throw new UnsupportedPredicateError(
1210
- "pathContains requires a comparison value"
1211
- );
1212
- }
1213
- const arrayField2 = compileFieldJsonValue(
1214
- expr.field,
1215
- dialect,
1216
- void 0,
1217
- pointer,
1218
- cteColumnPrefix
1219
- );
1220
- return dialect.jsonArrayContains(
1221
- arrayField2,
1222
- convertValueForSql(expr.value.value, dialect)
1223
- );
1224
- }
1225
- case "pathIsNull": {
1226
- return dialect.jsonPathIsNull(column, pointer);
1227
- }
1228
- case "pathIsNotNull": {
1229
- return dialect.jsonPathIsNotNull(column, pointer);
1230
- }
1231
- }
1232
- }
1233
- function compileAggregatePredicate(expr, dialect) {
1234
- const aggregate = compileAggregateExpr(expr.aggregate, dialect);
1235
- const op = COMPARISON_OP_SQL[expr.op];
1236
- if (!op) {
1237
- throw new UnsupportedPredicateError(
1238
- `Comparison operation "${expr.op}" is not supported for aggregate predicates`
1239
- );
1240
- }
1241
- const convertedValue = convertValueForSql(expr.value.value, dialect);
1242
- return sql`${aggregate} ${sql.raw(op)} ${convertedValue}`;
1243
- }
1244
- function compileAggregateExpr(expr, dialect) {
1245
- const cteAlias = `cte_${expr.field.alias}`;
1246
- const field = compileFieldValue(
1247
- expr.field,
1248
- dialect,
1249
- expr.field.valueType,
1250
- cteAlias
1251
- );
1252
- switch (expr.function) {
1253
- case "count": {
1254
- return sql`COUNT(${field})`;
1255
- }
1256
- case "countDistinct": {
1257
- return sql`COUNT(DISTINCT ${field})`;
1258
- }
1259
- case "sum": {
1260
- return sql`SUM(${field})`;
1261
- }
1262
- case "avg": {
1263
- return sql`AVG(${field})`;
1264
- }
1265
- case "min": {
1266
- return sql`MIN(${field})`;
1267
- }
1268
- case "max": {
1269
- return sql`MAX(${field})`;
1270
- }
1271
- default: {
1272
- throw new UnsupportedPredicateError(
1273
- `Unknown aggregate function: ${expr.function}`
1274
- );
1275
- }
1276
- }
1277
- }
1278
- function compileExistsSubquery(expr, ctx) {
1279
- if (expr.subquery.graphId === void 0) {
1280
- throw new UnsupportedPredicateError("EXISTS subquery must have a graphId");
1281
- }
1282
- const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1283
- return expr.negated ? sql`NOT EXISTS (${subSql})` : sql`EXISTS (${subSql})`;
1284
- }
1285
- function compileInSubquery(expr, ctx) {
1286
- const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
1287
- if (subqueryColumnCount !== 1) {
1288
- throw new UnsupportedPredicateError(
1289
- `IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
1290
- { subqueryColumnCount }
1291
- );
1292
- }
1293
- const fieldValueType = normalizeValueType2(expr.field.valueType);
1294
- const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
1295
- const resolvedValueType = fieldValueType ?? subqueryValueType;
1296
- if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
1297
- throw new UnsupportedPredicateError(
1298
- `IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
1299
- { valueType: resolvedValueType }
1300
- );
1301
- }
1302
- if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
1303
- throw new UnsupportedPredicateError(
1304
- `IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
1305
- {
1306
- fieldValueType,
1307
- subqueryValueType
1308
- }
1309
- );
1310
- }
1311
- const valueType = fieldValueType ?? subqueryValueType;
1312
- if (expr.subquery.graphId === void 0) {
1313
- throw new UnsupportedPredicateError(
1314
- "IN/NOT IN subquery must have a graphId"
1315
- );
1316
- }
1317
- const fieldSql = compileFieldValue(
1318
- expr.field,
1319
- ctx.dialect,
1320
- valueType,
1321
- void 0,
1322
- void 0,
1323
- ctx.cteColumnPrefix
1324
- );
1325
- const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
1326
- return expr.negated ? sql`${fieldSql} NOT IN (${subSql})` : sql`${fieldSql} IN (${subSql})`;
1327
- }
1328
- function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
1329
- const results = [];
1330
- function visit(expr, inDisallowedBranch) {
1331
- if (isMatch(expr)) {
1332
- if (inDisallowedBranch) {
1333
- throw new UnsupportedPredicateError(rejectionMessage);
1334
- }
1335
- results.push(expr);
1336
- return;
1337
- }
1338
- switch (expr.__type) {
1339
- case "and": {
1340
- for (const child of expr.predicates) visit(child, inDisallowedBranch);
1341
- return;
1342
- }
1343
- case "or": {
1344
- for (const child of expr.predicates) visit(child, true);
1345
- return;
1346
- }
1347
- case "not": {
1348
- visit(expr.predicate, true);
1349
- return;
1350
- }
1351
- case "comparison":
1352
- case "string_op":
1353
- case "null_check":
1354
- case "between":
1355
- case "array_op":
1356
- case "object_op":
1357
- case "aggregate_comparison":
1358
- case "exists":
1359
- case "in_subquery":
1360
- case "vector_similarity":
1361
- case "fulltext_match": {
1362
- return;
1363
- }
1364
- }
1365
- }
1366
- for (const pred of predicates) visit(pred.expression, false);
1367
- return results;
1368
- }
1369
- function extractVectorSimilarityPredicates(predicates) {
1370
- return extractStructuralPredicates(
1371
- predicates,
1372
- (expr) => expr.__type === "vector_similarity",
1373
- "Vector similarity predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
1374
- );
1375
- }
1376
- function extractFulltextMatchPredicates(predicates) {
1377
- return extractStructuralPredicates(
1378
- predicates,
1379
- (expr) => expr.__type === "fulltext_match",
1380
- "Fulltext match predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
1381
- );
1382
- }
1383
- var EMPTY_PREDICATES = [];
1384
- function sqlValueList(values) {
1385
- return sql.join(
1386
- values.map((value) => sql`${value}`),
1387
- sql`, `
1388
- );
1389
- }
1390
- function buildPredicateIndexKey(alias, targetType) {
1391
- return `${alias}\0${targetType}`;
1392
- }
1393
- function resolvePredicateTargetType(predicate2) {
1394
- return predicate2.targetType === "edge" ? "edge" : "node";
1395
- }
1396
- function buildPredicateIndex(ast) {
1397
- const byAliasAndType = /* @__PURE__ */ new Map();
1398
- for (const predicate2 of ast.predicates) {
1399
- const key = buildPredicateIndexKey(
1400
- predicate2.targetAlias,
1401
- resolvePredicateTargetType(predicate2)
1402
- );
1403
- const existing = byAliasAndType.get(key);
1404
- if (existing === void 0) {
1405
- byAliasAndType.set(key, [predicate2]);
1406
- } else {
1407
- existing.push(predicate2);
1408
- }
1409
- }
1410
- return { byAliasAndType };
1411
- }
1412
- function getPredicatesForAlias(predicateIndex, alias, targetType) {
1413
- return predicateIndex.byAliasAndType.get(
1414
- buildPredicateIndexKey(alias, targetType)
1415
- ) ?? EMPTY_PREDICATES;
1416
- }
1417
- function compilePredicateClauses(predicates, predicateContext) {
1418
- return predicates.map(
1419
- (predicate2) => compilePredicateExpression(predicate2.expression, predicateContext)
1420
- );
1421
- }
1422
- function compileKindFilter(column, kinds) {
1423
- if (kinds.length === 0) {
1424
- return sql`1 = 0`;
1425
- }
1426
- if (kinds.length === 1) {
1427
- return sql`${column} = ${kinds[0]}`;
1428
- }
1429
- return sql`${column} IN (${sqlValueList(kinds)})`;
1430
- }
1431
- function getNodeKindsForAlias(ast, alias) {
1432
- if (alias === ast.start.alias) {
1433
- return ast.start.kinds;
1434
- }
1435
- for (const traversal of ast.traversals) {
1436
- if (traversal.nodeAlias === alias) {
1437
- return traversal.nodeKinds;
1438
- }
1439
- }
1440
- throw new CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
1441
- }
1442
- function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
1443
- if (!vectorPredicate || !fulltextPredicate) return void 0;
1444
- return vectorPredicate.field.alias === fulltextPredicate.field.alias ? vectorPredicate.field.alias : void 0;
1445
- }
1446
-
1447
- // src/utils/array.ts
1448
- function chunk(items, size) {
1449
- if (!Number.isSafeInteger(size) || size < 1) {
1450
- throw new RangeError(`chunk size must be a positive integer, got: ${size}`);
1451
- }
1452
- if (items.length === 0) return [];
1453
- if (items.length <= size) return [items];
1454
- const chunks = [];
1455
- for (let start = 0; start < items.length; start += size) {
1456
- chunks.push(items.slice(start, start + size));
1457
- }
1458
- return chunks;
1459
- }
1460
- function groupBy(items, keyFor) {
1461
- const groups = /* @__PURE__ */ new Map();
1462
- for (const item of items) {
1463
- const key = keyFor(item);
1464
- const group = groups.get(key) ?? [];
1465
- group.push(item);
1466
- groups.set(key, group);
1467
- }
1468
- return groups;
1469
- }
1470
-
1471
- // src/utils/presence.ts
1472
- function isPresent(value) {
1473
- return value !== null && value !== void 0;
1474
- }
1475
-
1476
- export { CURRENT_READ_INSTANT_PLACEHOLDER, D1_MAX_BIND_PARAMETERS, DURABLE_OBJECT_MAX_BIND_PARAMETERS, INTERNAL_TEMPORARY_WRITES, MODERN_SQLITE_MAX_BIND_PARAMETERS, POSTGRES_CAPABILITIES, POSTGRES_MAX_BIND_PARAMETERS, SQLITE_CAPABILITIES, SQLITE_MAX_BIND_PARAMETERS, annIndexScanTypes, arrayField, asCompiledRowsSql, asCompiledSelectSql, asCompiledStatementSql, asCompiledTemporaryStatementSql, baseField, buildFieldBuilderForTypeInfo, buildPredicateIndex, chunk, compileFieldValue, compileKindFilter, compilePredicateClauses, compilePredicateExpression, compileTemporalFilter, createBackendOverlay, createFulltextAccessor, currentReadInstant, currentReadInstantFor, dateField, exists, extractFulltextMatchPredicates, extractTemporalOptions, extractVectorSimilarityPredicates, fieldRef, getFieldPointer, getHybridTargetAlias, getNodeKindsForAlias, getPredicatesForAlias, groupBy, inSubquery, isLiveNodeRow, isParameterRef, isPresent, isRawExecutable, isTombstonedNodeRow, markAnnIndexScan, markForceCustomPlan, normalizeGraphAnalyticsCapabilities, notExists, notInSubquery, numberField, objectField, param, rowPropsToJsonText, rowPropsToObject, runOptionallyInTransaction, shouldForceCustomPlan, sqlValueList, stringField, withPinnedReadInstant, wrapWithManagedClose };
1477
- //# sourceMappingURL=chunk-44TA22QT.js.map
1478
- //# sourceMappingURL=chunk-44TA22QT.js.map