@nicia-ai/typegraph 0.45.0 → 0.46.1
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.
- package/dist/backend/drizzle/indexes.cjs +11 -11
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/drizzle/indexes.js +7 -7
- package/dist/backend/index.cjs +53 -54
- package/dist/backend/index.d.cts +3 -3
- package/dist/backend/index.d.ts +3 -3
- package/dist/backend/index.js +13 -14
- package/dist/backend/postgres/index.cjs +29 -30
- package/dist/backend/postgres/index.d.cts +7 -7
- package/dist/backend/postgres/index.d.ts +7 -7
- package/dist/backend/postgres/index.js +16 -17
- package/dist/backend/postgres/pglite-store.cjs +48 -42
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +15 -9
- package/dist/backend/postgres/pglite-store.d.ts +15 -9
- package/dist/backend/postgres/pglite-store.js +44 -38
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +18 -19
- package/dist/backend/postgres/pglite.d.cts +4 -4
- package/dist/backend/postgres/pglite.d.ts +4 -4
- package/dist/backend/postgres/pglite.js +17 -18
- package/dist/backend/sqlite/index.cjs +26 -27
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +14 -15
- package/dist/backend/sqlite/libsql.cjs +21 -22
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +15 -8
- package/dist/backend/sqlite/libsql.d.ts +15 -8
- package/dist/backend/sqlite/libsql.js +17 -18
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +49 -43
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +15 -10
- package/dist/backend/sqlite/local-store.d.ts +15 -10
- package/dist/backend/sqlite/local-store.js +45 -39
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +19 -20
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +17 -18
- package/dist/{chunk-S3ZRKJHY.js → chunk-2LG2XB2M.js} +3 -3
- package/dist/{chunk-S3ZRKJHY.js.map → chunk-2LG2XB2M.js.map} +1 -1
- package/dist/{chunk-7PF2L3H6.cjs → chunk-2NA5DYLO.cjs} +4 -4
- package/dist/{chunk-7PF2L3H6.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
- package/dist/chunk-2Z2Z3ZD6.js +58 -0
- package/dist/chunk-2Z2Z3ZD6.js.map +1 -0
- package/dist/{chunk-VVQM4CZD.cjs → chunk-3DHZCOT7.cjs} +20 -20
- package/dist/{chunk-VVQM4CZD.cjs.map → chunk-3DHZCOT7.cjs.map} +1 -1
- package/dist/{chunk-JXUTCSXX.cjs → chunk-4UGOKMI5.cjs} +250 -158
- package/dist/chunk-4UGOKMI5.cjs.map +1 -0
- package/dist/{chunk-RFRM3Q5K.js → chunk-5262ZMTR.js} +14 -5
- package/dist/chunk-5262ZMTR.js.map +1 -0
- package/dist/{chunk-QRNYDV5Z.js → chunk-5763DULU.js} +214 -69
- package/dist/chunk-5763DULU.js.map +1 -0
- package/dist/{chunk-BGYJW37L.js → chunk-5UVRGXD3.js} +277 -7
- package/dist/chunk-5UVRGXD3.js.map +1 -0
- package/dist/{chunk-QR24DJDF.cjs → chunk-62ZP23AW.cjs} +15 -15
- package/dist/{chunk-QR24DJDF.cjs.map → chunk-62ZP23AW.cjs.map} +1 -1
- package/dist/{chunk-ZI6VQSZA.cjs → chunk-65E3XWGF.cjs} +724 -577
- package/dist/chunk-65E3XWGF.cjs.map +1 -0
- package/dist/{chunk-S4KQ5LV4.js → chunk-775A4ZMN.js} +40 -6
- package/dist/chunk-775A4ZMN.js.map +1 -0
- package/dist/{chunk-J2ICGNHO.cjs → chunk-7BQXPCGN.cjs} +830 -169
- package/dist/chunk-7BQXPCGN.cjs.map +1 -0
- package/dist/{chunk-FJMPR3OH.cjs → chunk-7EO3TCQB.cjs} +33 -7
- package/dist/chunk-7EO3TCQB.cjs.map +1 -0
- package/dist/{chunk-DXEEHSGN.js → chunk-7VQXLT5O.js} +436 -43
- package/dist/chunk-7VQXLT5O.js.map +1 -0
- package/dist/chunk-A4OC4DVN.cjs +12 -0
- package/dist/{chunk-4SZ6XPTG.cjs.map → chunk-A4OC4DVN.cjs.map} +1 -1
- package/dist/{chunk-TDXIBCGY.cjs → chunk-A7J2YDDI.cjs} +5 -3
- package/dist/chunk-A7J2YDDI.cjs.map +1 -0
- package/dist/{chunk-55ITBQJI.js → chunk-AKLS3BYZ.js} +56 -5
- package/dist/chunk-AKLS3BYZ.js.map +1 -0
- package/dist/{chunk-D7PG5D5K.js → chunk-AMKPPFUO.js} +32 -6
- package/dist/chunk-AMKPPFUO.js.map +1 -0
- package/dist/{chunk-WUFASQUO.js → chunk-ASTI57H3.js} +3 -3
- package/dist/{chunk-WUFASQUO.js.map → chunk-ASTI57H3.js.map} +1 -1
- package/dist/{chunk-4QIKLIGG.js → chunk-BKCUOV7A.js} +15 -5
- package/dist/chunk-BKCUOV7A.js.map +1 -0
- package/dist/{chunk-JQXSZHF2.cjs → chunk-BSFJMMV3.cjs} +134 -7
- package/dist/chunk-BSFJMMV3.cjs.map +1 -0
- package/dist/{chunk-4GUTQPVO.js → chunk-C23WSN5E.js} +185 -24
- package/dist/chunk-C23WSN5E.js.map +1 -0
- package/dist/{chunk-QLUXRWKL.js → chunk-CBTIUB76.js} +3 -3
- package/dist/{chunk-QLUXRWKL.js.map → chunk-CBTIUB76.js.map} +1 -1
- package/dist/chunk-CMWHLBVN.cjs +2082 -0
- package/dist/chunk-CMWHLBVN.cjs.map +1 -0
- package/dist/{chunk-QB6VMOJ2.cjs → chunk-CXBHOOIQ.cjs} +45 -10
- package/dist/chunk-CXBHOOIQ.cjs.map +1 -0
- package/dist/{chunk-FL5UQRES.js → chunk-DCQVHAYQ.js} +5 -5
- package/dist/{chunk-FL5UQRES.js.map → chunk-DCQVHAYQ.js.map} +1 -1
- package/dist/chunk-DTVWX77L.cjs +3432 -0
- package/dist/chunk-DTVWX77L.cjs.map +1 -0
- package/dist/chunk-DYATYRY4.js +47 -0
- package/dist/chunk-DYATYRY4.js.map +1 -0
- package/dist/chunk-E4WNQBEF.cjs +217 -0
- package/dist/chunk-E4WNQBEF.cjs.map +1 -0
- package/dist/{chunk-G6Q5UM7U.js → chunk-FWJKWH6U.js} +5 -3
- package/dist/chunk-FWJKWH6U.js.map +1 -0
- package/dist/chunk-GF3KXUTW.js +3393 -0
- package/dist/chunk-GF3KXUTW.js.map +1 -0
- package/dist/{chunk-VTN3C3CH.js → chunk-HFHTMECK.js} +7 -7
- package/dist/{chunk-VTN3C3CH.js.map → chunk-HFHTMECK.js.map} +1 -1
- package/dist/{chunk-FLEQ2HBK.js → chunk-I5MOXA4H.js} +20 -14
- package/dist/chunk-I5MOXA4H.js.map +1 -0
- package/dist/{chunk-4MB3AQAQ.js → chunk-J3WZ3FA2.js} +77 -3
- package/dist/chunk-J3WZ3FA2.js.map +1 -0
- package/dist/{chunk-UR7W5YQK.js → chunk-JBQQ7THH.js} +5 -3
- package/dist/chunk-JBQQ7THH.js.map +1 -0
- package/dist/{chunk-TKP5T34P.js → chunk-JXA2ZP2Q.js} +6 -16
- package/dist/chunk-JXA2ZP2Q.js.map +1 -0
- package/dist/{chunk-GYA4JRP5.js → chunk-JXXDZTMN.js} +2 -2
- package/dist/chunk-JXXDZTMN.js.map +1 -0
- package/dist/chunk-JZUR7ZWE.js +254 -0
- package/dist/chunk-JZUR7ZWE.js.map +1 -0
- package/dist/{chunk-42PYUGLS.js → chunk-K5ELX2GT.js} +108 -8
- package/dist/chunk-K5ELX2GT.js.map +1 -0
- package/dist/{chunk-Q6EDCUXV.js → chunk-L65OU2U3.js} +556 -204
- package/dist/chunk-L65OU2U3.js.map +1 -0
- package/dist/{chunk-D54WH24V.cjs → chunk-LBJKZXDE.cjs} +115 -13
- package/dist/chunk-LBJKZXDE.cjs.map +1 -0
- package/dist/{chunk-FQ7ZPOTZ.js → chunk-LGHCOKTT.js} +637 -493
- package/dist/chunk-LGHCOKTT.js.map +1 -0
- package/dist/chunk-M3WP7RQZ.js +736 -0
- package/dist/chunk-M3WP7RQZ.js.map +1 -0
- package/dist/{chunk-4MEWSUVM.cjs → chunk-M4BDU5RX.cjs} +12 -12
- package/dist/chunk-M4BDU5RX.cjs.map +1 -0
- package/dist/chunk-MCLYU6BN.cjs +332 -0
- package/dist/chunk-MCLYU6BN.cjs.map +1 -0
- package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
- package/dist/chunk-MSY7FSX4.js.map +1 -0
- package/dist/{chunk-H7VE3FL4.cjs → chunk-MUK4BU7K.cjs} +519 -125
- package/dist/chunk-MUK4BU7K.cjs.map +1 -0
- package/dist/{chunk-D56XG4EI.cjs → chunk-MXJDTH5B.cjs} +56 -45
- package/dist/chunk-MXJDTH5B.cjs.map +1 -0
- package/dist/{chunk-5EKPX6QU.js → chunk-MZLPX2R7.js} +8 -9
- package/dist/chunk-MZLPX2R7.js.map +1 -0
- package/dist/chunk-N66HCGCY.cjs +57 -0
- package/dist/chunk-N66HCGCY.cjs.map +1 -0
- package/dist/{chunk-CPEL3YIR.cjs → chunk-NFCVHQ5P.cjs} +55 -22
- package/dist/chunk-NFCVHQ5P.cjs.map +1 -0
- package/dist/{chunk-C4F7VJ5D.cjs → chunk-NI72YOJB.cjs} +84 -2
- package/dist/chunk-NI72YOJB.cjs.map +1 -0
- package/dist/{chunk-BNS75YNF.cjs → chunk-NK5Q7UNE.cjs} +10 -20
- package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
- package/dist/{chunk-TKORQCG4.js → chunk-NLI2AVEF.js} +386 -862
- package/dist/chunk-NLI2AVEF.js.map +1 -0
- package/dist/{chunk-YMTXMPV6.js → chunk-NMWDXFPH.js} +4 -4
- package/dist/{chunk-YMTXMPV6.js.map → chunk-NMWDXFPH.js.map} +1 -1
- package/dist/{chunk-J7LXTUTP.cjs → chunk-PF6F5NLJ.cjs} +604 -1094
- package/dist/chunk-PF6F5NLJ.cjs.map +1 -0
- package/dist/{chunk-NAAMUYMS.cjs → chunk-PNN7RHVR.cjs} +58 -48
- package/dist/chunk-PNN7RHVR.cjs.map +1 -0
- package/dist/{chunk-YOALGKRE.cjs → chunk-PNTCATDE.cjs} +3528 -1763
- package/dist/chunk-PNTCATDE.cjs.map +1 -0
- package/dist/{chunk-6DCB664D.js → chunk-PQBQG7IM.js} +3 -3
- package/dist/{chunk-6DCB664D.js.map → chunk-PQBQG7IM.js.map} +1 -1
- package/dist/{chunk-UCQ3BFSY.cjs → chunk-PT7RIRIZ.cjs} +684 -332
- package/dist/chunk-PT7RIRIZ.cjs.map +1 -0
- package/dist/{chunk-ACSVZPK7.cjs → chunk-PWLJ77UV.cjs} +5 -3
- package/dist/chunk-PWLJ77UV.cjs.map +1 -0
- package/dist/chunk-Q3G6A4I3.cjs +755 -0
- package/dist/chunk-Q3G6A4I3.cjs.map +1 -0
- package/dist/{chunk-Z3WO6MND.cjs → chunk-RMQLSPA2.cjs} +297 -27
- package/dist/chunk-RMQLSPA2.cjs.map +1 -0
- package/dist/{chunk-SJDMVITW.cjs → chunk-RT5ZY4XA.cjs} +6 -5
- package/dist/chunk-RT5ZY4XA.cjs.map +1 -0
- package/dist/{chunk-ID4WXTKL.js → chunk-S6PW7VV5.js} +2382 -617
- package/dist/chunk-S6PW7VV5.js.map +1 -0
- package/dist/{chunk-4GUBTVPV.js → chunk-T4XNKYXB.js} +780 -126
- package/dist/chunk-T4XNKYXB.js.map +1 -0
- package/dist/{chunk-YDWLUT5V.cjs → chunk-TQR4KBY2.cjs} +323 -178
- package/dist/chunk-TQR4KBY2.cjs.map +1 -0
- package/dist/{chunk-OOA273IJ.cjs → chunk-U5SON7R2.cjs} +27 -27
- package/dist/{chunk-OOA273IJ.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
- package/dist/{chunk-IX64T5OL.cjs → chunk-U63GDNRC.cjs} +32 -26
- package/dist/chunk-U63GDNRC.cjs.map +1 -0
- package/dist/{chunk-WDBXJOU5.cjs → chunk-UDISNXDL.cjs} +56 -47
- package/dist/chunk-UDISNXDL.cjs.map +1 -0
- package/dist/{chunk-EFEOOCJ3.js → chunk-UV3SN74I.js} +5 -5
- package/dist/{chunk-EFEOOCJ3.js.map → chunk-UV3SN74I.js.map} +1 -1
- package/dist/{chunk-U5W4LKZV.cjs → chunk-VCRRKBLN.cjs} +9 -9
- package/dist/{chunk-U5W4LKZV.cjs.map → chunk-VCRRKBLN.cjs.map} +1 -1
- package/dist/{chunk-ISLPNELU.js → chunk-VGTJPTIC.js} +16 -5
- package/dist/chunk-VGTJPTIC.js.map +1 -0
- package/dist/chunk-VLT6PEWR.cjs +60 -0
- package/dist/chunk-VLT6PEWR.cjs.map +1 -0
- package/dist/chunk-VQH4VAWD.cjs +12 -0
- package/dist/{chunk-B3F2D3SP.cjs.map → chunk-VQH4VAWD.cjs.map} +1 -1
- package/dist/{chunk-SNXVDZAJ.js → chunk-W6OG3HDG.js} +5 -4
- package/dist/chunk-W6OG3HDG.js.map +1 -0
- package/dist/chunk-WDGA7IYB.js +207 -0
- package/dist/chunk-WDGA7IYB.js.map +1 -0
- package/dist/chunk-WQZLUGVR.js +2057 -0
- package/dist/chunk-WQZLUGVR.js.map +1 -0
- package/dist/{chunk-EKFUG4G7.cjs → chunk-XBYVV3MP.cjs} +60 -5
- package/dist/chunk-XBYVV3MP.cjs.map +1 -0
- package/dist/{chunk-5GAONX5G.cjs → chunk-XCAGZAKP.cjs} +7 -7
- package/dist/{chunk-5GAONX5G.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
- package/dist/chunk-XL7SLCXS.js +309 -0
- package/dist/chunk-XL7SLCXS.js.map +1 -0
- package/dist/{chunk-SVJ5GEXW.cjs → chunk-XUO3KQFO.cjs} +2 -2
- package/dist/chunk-XUO3KQFO.cjs.map +1 -0
- package/dist/{chunk-F4NHQHEZ.cjs → chunk-YAAM3M2S.cjs} +10 -10
- package/dist/{chunk-F4NHQHEZ.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
- package/dist/{chunk-RUQS6M7G.js → chunk-YBFHZUXX.js} +6 -6
- package/dist/chunk-YBFHZUXX.js.map +1 -0
- package/dist/{chunk-KMXWZLQX.cjs → chunk-YBQOHKHN.cjs} +99 -100
- package/dist/chunk-YBQOHKHN.cjs.map +1 -0
- package/dist/{chunk-PVUI6KGR.js → chunk-YDFDBE6D.js} +93 -6
- package/dist/chunk-YDFDBE6D.js.map +1 -0
- package/dist/{chunk-P7GTYOLB.cjs → chunk-YVWGEQJE.cjs} +297 -135
- package/dist/chunk-YVWGEQJE.cjs.map +1 -0
- package/dist/{chunk-QT6V3YRH.js → chunk-YWGVVALJ.js} +3 -3
- package/dist/{chunk-QT6V3YRH.js.map → chunk-YWGVVALJ.js.map} +1 -1
- package/dist/core/index.cjs +40 -40
- package/dist/core/index.d.cts +4 -5
- package/dist/core/index.d.ts +4 -5
- package/dist/core/index.js +8 -8
- package/dist/{ddl-BG4J805L.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
- package/dist/{ddl-CgiS9QLj.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
- package/dist/graph-extension/index.cjs +26 -22
- package/dist/graph-extension/index.d.cts +16 -6
- package/dist/graph-extension/index.d.ts +16 -6
- package/dist/graph-extension/index.js +7 -7
- package/dist/graph-merge/index.cjs +2459 -654
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +170 -33
- package/dist/graph-merge/index.d.ts +170 -33
- package/dist/graph-merge/index.js +2269 -467
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-C3y_98iN.d.cts → index-BSHvKfok.d.ts} +221 -10
- package/dist/{index-BBxZCUdu.d.ts → index-DxaYCv8Y.d.cts} +221 -10
- package/dist/index.cjs +330 -268
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +590 -576
- package/dist/index.d.ts +590 -576
- package/dist/index.js +73 -49
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +17 -17
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/indexes/index.js +10 -10
- package/dist/interchange/index.cjs +165 -51
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +261 -16
- package/dist/interchange/index.d.ts +261 -16
- package/dist/interchange/index.js +128 -25
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-YoLEfcc1.d.ts → manager-CfZAimti.d.ts} +36 -5
- package/dist/{manager-KS7CGQQT.d.cts → manager-HGk6E_HW.d.cts} +36 -5
- package/dist/{materialize-indexes-Bhhyb1B3.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
- package/dist/{materialize-indexes-OHRWypW6.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
- package/dist/{postgres-DpkW3R5Y.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
- package/dist/{postgres-DwqyIniy.d.ts → postgres-e7a9TdvR.d.ts} +1961 -439
- package/dist/profiler/index.cjs +15 -15
- package/dist/profiler/index.d.cts +9 -10
- package/dist/profiler/index.d.ts +9 -10
- package/dist/profiler/index.js +4 -4
- package/dist/provenance/index.cjs +46 -48
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +7 -7
- package/dist/provenance/index.d.ts +7 -7
- package/dist/provenance/index.js +12 -14
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +50 -48
- package/dist/schema/index.d.cts +9 -16
- package/dist/schema/index.d.ts +9 -16
- package/dist/schema/index.js +23 -21
- package/dist/{searchable-DLWEfC4a.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
- package/dist/{searchable-CIZL8Hyw.d.cts → searchable-CIje5XYD.d.cts} +1 -2
- package/dist/{sqlite-DY0WODUK.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
- package/dist/{sqlite-L-VIRzqA.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
- package/dist/{store-view-A85FFRnk.d.cts → store-B0h6x7wo.d.cts} +1289 -767
- package/dist/{store-view-66p92IPi.d.ts → store-ClQ-MZQS.d.ts} +1289 -767
- package/dist/{temporal-BNbjXqer.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
- package/dist/{temporal-Bob6Nfbp.d.ts → temporal-BtM4UALv.d.ts} +1 -1
- package/dist/{types-DeORZhxn.d.cts → types-CoIx8HX5.d.cts} +1 -1
- package/dist/{types-Ch9a0Dx6.d.ts → types-HkveCCx0.d.cts} +726 -5
- package/dist/{types-Ch9a0Dx6.d.cts → types-HkveCCx0.d.ts} +726 -5
- package/dist/{types-ClCzT-dT.d.ts → types-KFfk-8Ah.d.ts} +1 -1
- package/dist/{where-DPw52ksb.d.cts → where--fk7_0kv.d.cts} +1 -1
- package/dist/{where-kWUZPvEA.d.ts → where-ws5hf-Ov.d.ts} +1 -1
- package/package.json +3 -3
- package/dist/chunk-2L54C2C2.js +0 -144
- package/dist/chunk-2L54C2C2.js.map +0 -1
- package/dist/chunk-35S6P5ZU.js +0 -27
- package/dist/chunk-35S6P5ZU.js.map +0 -1
- package/dist/chunk-42PYUGLS.js.map +0 -1
- package/dist/chunk-4GUBTVPV.js.map +0 -1
- package/dist/chunk-4GUTQPVO.js.map +0 -1
- package/dist/chunk-4MB3AQAQ.js.map +0 -1
- package/dist/chunk-4MEWSUVM.cjs.map +0 -1
- package/dist/chunk-4QIKLIGG.js.map +0 -1
- package/dist/chunk-4SZ6XPTG.cjs +0 -12
- package/dist/chunk-55ITBQJI.js.map +0 -1
- package/dist/chunk-5EKPX6QU.js.map +0 -1
- package/dist/chunk-6RYPD3NJ.cjs +0 -1282
- package/dist/chunk-6RYPD3NJ.cjs.map +0 -1
- package/dist/chunk-764JHTLT.cjs +0 -15
- package/dist/chunk-764JHTLT.cjs.map +0 -1
- package/dist/chunk-ACSVZPK7.cjs.map +0 -1
- package/dist/chunk-B3F2D3SP.cjs +0 -12
- package/dist/chunk-BGYJW37L.js.map +0 -1
- package/dist/chunk-BNS75YNF.cjs.map +0 -1
- package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
- package/dist/chunk-CBKG6HEP.js +0 -1263
- package/dist/chunk-CBKG6HEP.js.map +0 -1
- package/dist/chunk-CPEL3YIR.cjs.map +0 -1
- package/dist/chunk-D54WH24V.cjs.map +0 -1
- package/dist/chunk-D56XG4EI.cjs.map +0 -1
- package/dist/chunk-D7PG5D5K.js.map +0 -1
- package/dist/chunk-DI74SMXS.cjs +0 -29
- package/dist/chunk-DI74SMXS.cjs.map +0 -1
- package/dist/chunk-DK2S42XB.js +0 -77
- package/dist/chunk-DK2S42XB.js.map +0 -1
- package/dist/chunk-DRACN6XG.js +0 -27
- package/dist/chunk-DRACN6XG.js.map +0 -1
- package/dist/chunk-DXEEHSGN.js.map +0 -1
- package/dist/chunk-EKFUG4G7.cjs.map +0 -1
- package/dist/chunk-EQ7JKLZO.cjs +0 -157
- package/dist/chunk-EQ7JKLZO.cjs.map +0 -1
- package/dist/chunk-FJMPR3OH.cjs.map +0 -1
- package/dist/chunk-FLEQ2HBK.js.map +0 -1
- package/dist/chunk-FQ7ZPOTZ.js.map +0 -1
- package/dist/chunk-G6Q5UM7U.js.map +0 -1
- package/dist/chunk-GYA4JRP5.js.map +0 -1
- package/dist/chunk-H7VE3FL4.cjs.map +0 -1
- package/dist/chunk-ID4WXTKL.js.map +0 -1
- package/dist/chunk-ISLPNELU.js.map +0 -1
- package/dist/chunk-ITE4IXAK.js +0 -25
- package/dist/chunk-ITE4IXAK.js.map +0 -1
- package/dist/chunk-IX64T5OL.cjs.map +0 -1
- package/dist/chunk-J2ICGNHO.cjs.map +0 -1
- package/dist/chunk-J7LXTUTP.cjs.map +0 -1
- package/dist/chunk-JQXSZHF2.cjs.map +0 -1
- package/dist/chunk-JXUTCSXX.cjs.map +0 -1
- package/dist/chunk-KCO5EFJU.js +0 -79
- package/dist/chunk-KCO5EFJU.js.map +0 -1
- package/dist/chunk-KKYELPZ2.cjs +0 -83
- package/dist/chunk-KKYELPZ2.cjs.map +0 -1
- package/dist/chunk-KMXWZLQX.cjs.map +0 -1
- package/dist/chunk-MIJKEVV7.js.map +0 -1
- package/dist/chunk-NAAMUYMS.cjs.map +0 -1
- package/dist/chunk-P7GTYOLB.cjs.map +0 -1
- package/dist/chunk-PVUI6KGR.js.map +0 -1
- package/dist/chunk-Q6EDCUXV.js.map +0 -1
- package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
- package/dist/chunk-QC4MCOFV.cjs +0 -83
- package/dist/chunk-QC4MCOFV.cjs.map +0 -1
- package/dist/chunk-QMQLUA66.js +0 -12
- package/dist/chunk-QMQLUA66.js.map +0 -1
- package/dist/chunk-QRNYDV5Z.js.map +0 -1
- package/dist/chunk-RFRM3Q5K.js.map +0 -1
- package/dist/chunk-RUQS6M7G.js.map +0 -1
- package/dist/chunk-S4KQ5LV4.js.map +0 -1
- package/dist/chunk-SJDMVITW.cjs.map +0 -1
- package/dist/chunk-SNXVDZAJ.js.map +0 -1
- package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
- package/dist/chunk-TDXIBCGY.cjs.map +0 -1
- package/dist/chunk-TKORQCG4.js.map +0 -1
- package/dist/chunk-TKP5T34P.js.map +0 -1
- package/dist/chunk-TRF4EBJT.cjs +0 -30
- package/dist/chunk-TRF4EBJT.cjs.map +0 -1
- package/dist/chunk-UCQ3BFSY.cjs.map +0 -1
- package/dist/chunk-UR7W5YQK.js.map +0 -1
- package/dist/chunk-V34A6R5V.js +0 -134
- package/dist/chunk-V34A6R5V.js.map +0 -1
- package/dist/chunk-WDAVPX46.js +0 -81
- package/dist/chunk-WDAVPX46.js.map +0 -1
- package/dist/chunk-WDBXJOU5.cjs.map +0 -1
- package/dist/chunk-YDWLUT5V.cjs.map +0 -1
- package/dist/chunk-YOALGKRE.cjs.map +0 -1
- package/dist/chunk-Z3WO6MND.cjs.map +0 -1
- package/dist/chunk-ZDH3DX3C.cjs +0 -30
- package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
- package/dist/chunk-ZI6VQSZA.cjs.map +0 -1
- package/dist/chunk-ZTAJL4DT.cjs +0 -85
- package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
- package/dist/define-graph-BGrJahvp.d.ts +0 -173
- package/dist/define-graph-alREY2wj.d.cts +0 -173
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createSqliteBackend } from './chunk-
|
|
2
|
-
import { sqliteVecStrategy } from './chunk-
|
|
3
|
-
import { tables2, generateSqliteDDL } from './chunk-
|
|
4
|
-
import { wrapWithManagedClose } from './chunk-
|
|
5
|
-
import { ConfigurationError } from './chunk-
|
|
1
|
+
import { createSqliteBackend } from './chunk-C23WSN5E.js';
|
|
2
|
+
import { sqliteVecStrategy } from './chunk-BKCUOV7A.js';
|
|
3
|
+
import { tables2, generateSqliteDDL } from './chunk-5UVRGXD3.js';
|
|
4
|
+
import { wrapWithManagedClose } from './chunk-AKLS3BYZ.js';
|
|
5
|
+
import { ConfigurationError } from './chunk-J3WZ3FA2.js';
|
|
6
6
|
import { createRequire } from 'module';
|
|
7
7
|
import Database from 'better-sqlite3';
|
|
8
8
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
@@ -179,5 +179,5 @@ function tryLoadSqliteVec(sqlite) {
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
export { DEFAULT_LOCAL_SQLITE_PRAGMAS, createLocalSqliteBackend };
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-HFHTMECK.js.map
|
|
183
|
+
//# sourceMappingURL=chunk-HFHTMECK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/sqlite/local-options.ts","../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"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","file":"chunk-VTN3C3CH.js","sourcesContent":["/** Journal modes accepted by local SQLite connections. */\nexport type LocalSqliteJournalMode =\n \"wal\" | \"delete\" | \"truncate\" | \"persist\" | \"memory\" | \"off\";\n\n/** Synchronous levels accepted by local SQLite connections. */\nexport type LocalSqliteSynchronousMode = \"off\" | \"normal\" | \"full\" | \"extra\";\n\n/** Connection pragmas applied when TypeGraph opens a local SQLite database. */\nexport type LocalSqlitePragmaOptions = Readonly<{\n /** `PRAGMA journal_mode`. Default: `\"wal\"` (no-op on `\":memory:\"`). */\n journalMode?: LocalSqliteJournalMode;\n /** `PRAGMA synchronous`. Default: `\"normal\"`. */\n synchronous?: LocalSqliteSynchronousMode;\n /** `PRAGMA busy_timeout`, in milliseconds. Default: `5000`. */\n busyTimeoutMs?: number;\n /**\n * `PRAGMA cache_size`, expressed as a negative KiB value. Positive values\n * mean pages in SQLite and are rejected to prevent accidental oversizing.\n */\n cacheSizeKib?: number | undefined;\n /** `PRAGMA mmap_size`, in non-negative bytes. */\n mmapSizeBytes?: number | undefined;\n /**\n * `PRAGMA wal_autocheckpoint`, in WAL pages. Use `0` to disable automatic\n * checkpoints and run them explicitly after controlled bulk loads.\n */\n walAutocheckpointPages?: number | undefined;\n}>;\n\n/** Defaults for TypeGraph-owned local SQLite connections. */\nexport const DEFAULT_LOCAL_SQLITE_PRAGMAS: Required<LocalSqlitePragmaOptions> =\n {\n journalMode: \"wal\",\n synchronous: \"normal\",\n busyTimeoutMs: 5000,\n cacheSizeKib: undefined,\n mmapSizeBytes: undefined,\n walAutocheckpointPages: undefined,\n };\n","/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/adapters/drizzle/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport { createRequire } from \"node:module\";\n\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { sqliteVecStrategy } from \"../../query/dialect/vector/sqlite-vec-strategy\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport { type AnySqliteDatabase } from \"../drizzle/execution\";\nexport type { AnySqliteDatabase } from \"../drizzle/execution\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\n\nexport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\nimport {\n type AdapterBackend,\n type BackendCapabilities,\n wrapWithManagedClose,\n} from \"../types\";\n\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups[\"compiled\"]);\n const required = Number(match.groups[\"required\"]);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\nconst LOCAL_SQLITE_JOURNAL_MODES: readonly LocalSqliteJournalMode[] = [\n \"wal\",\n \"delete\",\n \"truncate\",\n \"persist\",\n \"memory\",\n \"off\",\n];\n\nconst LOCAL_SQLITE_SYNCHRONOUS_MODES: readonly LocalSqliteSynchronousMode[] = [\n \"off\",\n \"normal\",\n \"full\",\n \"extra\",\n];\n\nconst SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES = 2_147_483_647;\n\nfunction applyConnectionPragmas(\n sqlite: Database.Database,\n pragmas: LocalSqlitePragmaOptions | false | undefined,\n): void {\n if (pragmas === false) return;\n const resolved: Required<LocalSqlitePragmaOptions> = {\n ...DEFAULT_LOCAL_SQLITE_PRAGMAS,\n ...pragmas,\n };\n\n // Runtime guards mirror the compile-time unions: pragma values are spliced\n // into pragma statements, so reject anything outside the allowlists rather\n // than forwarding it to SQLite.\n if (!LOCAL_SQLITE_JOURNAL_MODES.includes(resolved.journalMode)) {\n throw new ConfigurationError(\n `Invalid journalMode pragma: ${resolved.journalMode}. ` +\n `Expected one of: ${LOCAL_SQLITE_JOURNAL_MODES.join(\", \")}.`,\n { journalMode: resolved.journalMode },\n );\n }\n if (!LOCAL_SQLITE_SYNCHRONOUS_MODES.includes(resolved.synchronous)) {\n throw new ConfigurationError(\n `Invalid synchronous pragma: ${resolved.synchronous}. ` +\n `Expected one of: ${LOCAL_SQLITE_SYNCHRONOUS_MODES.join(\", \")}.`,\n { synchronous: resolved.synchronous },\n );\n }\n if (\n !Number.isSafeInteger(resolved.busyTimeoutMs) ||\n resolved.busyTimeoutMs < 0\n ) {\n throw new ConfigurationError(\n `Invalid busyTimeoutMs pragma: ${String(resolved.busyTimeoutMs)}. ` +\n \"Expected a non-negative integer number of milliseconds.\",\n { busyTimeoutMs: resolved.busyTimeoutMs },\n );\n }\n if (\n resolved.cacheSizeKib !== undefined &&\n (!Number.isSafeInteger(resolved.cacheSizeKib) || resolved.cacheSizeKib >= 0)\n ) {\n throw new ConfigurationError(\n `Invalid cacheSizeKib pragma: ${String(resolved.cacheSizeKib)}. ` +\n \"Expected a negative safe integer — SQLite's own cache_size pragma \" +\n \"interprets a positive value as a page count, not KiB, so a caller \" +\n 'who passes e.g. 131072 meaning \"131072 KiB\" silently gets ' +\n \"131072 pages (~512MiB at the default 4KiB page size) instead.\",\n { cacheSizeKib: resolved.cacheSizeKib },\n );\n }\n if (\n resolved.mmapSizeBytes !== undefined &&\n (!Number.isSafeInteger(resolved.mmapSizeBytes) ||\n resolved.mmapSizeBytes < 0)\n ) {\n throw new ConfigurationError(\n `Invalid mmapSizeBytes pragma: ${String(resolved.mmapSizeBytes)}. ` +\n \"Expected a non-negative safe integer number of bytes.\",\n { mmapSizeBytes: resolved.mmapSizeBytes },\n );\n }\n if (\n resolved.walAutocheckpointPages !== undefined &&\n (!Number.isSafeInteger(resolved.walAutocheckpointPages) ||\n resolved.walAutocheckpointPages < 0 ||\n resolved.walAutocheckpointPages > SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES)\n ) {\n throw new ConfigurationError(\n `Invalid walAutocheckpointPages pragma: ${String(resolved.walAutocheckpointPages)}. ` +\n `Expected an integer between 0 and ${SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES} ` +\n \"WAL pages (0 disables automatic checkpointing entirely).\",\n { walAutocheckpointPages: resolved.walAutocheckpointPages },\n );\n }\n\n // \":memory:\" databases always journal in memory; SQLite answers the WAL\n // request with \"memory\" instead of erroring, so no special-casing needed.\n sqlite.pragma(`journal_mode = ${resolved.journalMode}`);\n sqlite.pragma(`synchronous = ${resolved.synchronous}`);\n sqlite.pragma(`busy_timeout = ${resolved.busyTimeoutMs}`);\n if (resolved.cacheSizeKib !== undefined) {\n sqlite.pragma(`cache_size = ${resolved.cacheSizeKib}`);\n }\n if (resolved.mmapSizeBytes !== undefined) {\n sqlite.pragma(`mmap_size = ${resolved.mmapSizeBytes}`);\n }\n if (resolved.walAutocheckpointPages !== undefined) {\n sqlite.pragma(`wal_autocheckpoint = ${resolved.walAutocheckpointPages}`);\n }\n}\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Connection pragmas applied at open. Defaults to\n * {@link DEFAULT_LOCAL_SQLITE_PRAGMAS} (WAL, `synchronous=NORMAL`, 5s busy\n * timeout, and SQLite's own tiny built-in page cache / disabled mmap\n * left untouched). Individual values merge over the defaults; pass\n * `false` to skip pragma configuration entirely and keep the driver\n * defaults (rollback journal, `synchronous=FULL`, and better-sqlite3's\n * own 5s busy timeout from its `timeout` constructor option). Set\n * `cacheSizeKib`/`mmapSizeBytes` explicitly once a database's working\n * set is known to exceed SQLite's 2MiB default cache — otherwise every\n * query pays a fresh disk read per page past that tiny working set. Set\n * `walAutocheckpointPages` explicitly for a bulk-insert-heavy workload —\n * SQLite's own default checkpoints every ~4MiB of WAL growth, which gets\n * more expensive as the database file grows over a large load.\n */\n pragmas?: LocalSqlitePragmaOptions | false;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n\n /**\n * Override specific backend capabilities — e.g. to simulate an engine-level\n * gap like missing SQL window functions in tests. Forwarded to\n * createSqliteBackend.\n */\n capabilities?: Partial<BackendCapabilities>;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: AdapterBackend<AnySqliteDatabase>;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n try {\n applyConnectionPragmas(sqlite, options.pragmas);\n\n // Best-effort: load sqlite-vec so embedding fields are persisted to\n // per-`(kind, field)` `vec0` storage. Without it, nodes with\n // `embedding()` fields validate and insert but their vectors are silently\n // dropped. When the user has installed sqlite-vec as a peer dep we load\n // it and wire the strategy; otherwise we proceed without vector support.\n const hasSqliteVec = tryLoadSqliteVec(sqlite);\n\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n ...(hasSqliteVec ? { vector: sqliteVecStrategy } : {}),\n capabilities: {\n ...options.capabilities,\n graphAnalytics: {\n supported:\n options.capabilities?.graphAnalytics?.supported ??\n options.capabilities?.transactions !== false,\n mathFunctions:\n options.capabilities?.graphAnalytics?.mathFunctions ?? true,\n },\n },\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n } catch (error) {\n try {\n sqlite.close();\n } catch {\n // Preserve the provisioning error; a cleanup failure is secondary.\n }\n throw error;\n }\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/sqlite/local-options.ts","../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"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","file":"chunk-HFHTMECK.js","sourcesContent":["/** Journal modes accepted by local SQLite connections. */\nexport type LocalSqliteJournalMode =\n \"wal\" | \"delete\" | \"truncate\" | \"persist\" | \"memory\" | \"off\";\n\n/** Synchronous levels accepted by local SQLite connections. */\nexport type LocalSqliteSynchronousMode = \"off\" | \"normal\" | \"full\" | \"extra\";\n\n/** Connection pragmas applied when TypeGraph opens a local SQLite database. */\nexport type LocalSqlitePragmaOptions = Readonly<{\n /** `PRAGMA journal_mode`. Default: `\"wal\"` (no-op on `\":memory:\"`). */\n journalMode?: LocalSqliteJournalMode;\n /** `PRAGMA synchronous`. Default: `\"normal\"`. */\n synchronous?: LocalSqliteSynchronousMode;\n /** `PRAGMA busy_timeout`, in milliseconds. Default: `5000`. */\n busyTimeoutMs?: number;\n /**\n * `PRAGMA cache_size`, expressed as a negative KiB value. Positive values\n * mean pages in SQLite and are rejected to prevent accidental oversizing.\n */\n cacheSizeKib?: number | undefined;\n /** `PRAGMA mmap_size`, in non-negative bytes. */\n mmapSizeBytes?: number | undefined;\n /**\n * `PRAGMA wal_autocheckpoint`, in WAL pages. Use `0` to disable automatic\n * checkpoints and run them explicitly after controlled bulk loads.\n */\n walAutocheckpointPages?: number | undefined;\n}>;\n\n/** Defaults for TypeGraph-owned local SQLite connections. */\nexport const DEFAULT_LOCAL_SQLITE_PRAGMAS: Required<LocalSqlitePragmaOptions> =\n {\n journalMode: \"wal\",\n synchronous: \"normal\",\n busyTimeoutMs: 5000,\n cacheSizeKib: undefined,\n mmapSizeBytes: undefined,\n walAutocheckpointPages: undefined,\n };\n","/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/adapters/drizzle/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport { createRequire } from \"node:module\";\n\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { sqliteVecStrategy } from \"../../query/dialect/vector/sqlite-vec-strategy\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport { type AnySqliteDatabase } from \"../drizzle/execution\";\nexport type { AnySqliteDatabase } from \"../drizzle/execution\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\n\nexport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\nimport {\n type AdapterBackend,\n type BackendCapabilities,\n wrapWithManagedClose,\n} from \"../types\";\n\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups[\"compiled\"]);\n const required = Number(match.groups[\"required\"]);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\nconst LOCAL_SQLITE_JOURNAL_MODES: readonly LocalSqliteJournalMode[] = [\n \"wal\",\n \"delete\",\n \"truncate\",\n \"persist\",\n \"memory\",\n \"off\",\n];\n\nconst LOCAL_SQLITE_SYNCHRONOUS_MODES: readonly LocalSqliteSynchronousMode[] = [\n \"off\",\n \"normal\",\n \"full\",\n \"extra\",\n];\n\nconst SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES = 2_147_483_647;\n\nfunction applyConnectionPragmas(\n sqlite: Database.Database,\n pragmas: LocalSqlitePragmaOptions | false | undefined,\n): void {\n if (pragmas === false) return;\n const resolved: Required<LocalSqlitePragmaOptions> = {\n ...DEFAULT_LOCAL_SQLITE_PRAGMAS,\n ...pragmas,\n };\n\n // Runtime guards mirror the compile-time unions: pragma values are spliced\n // into pragma statements, so reject anything outside the allowlists rather\n // than forwarding it to SQLite.\n if (!LOCAL_SQLITE_JOURNAL_MODES.includes(resolved.journalMode)) {\n throw new ConfigurationError(\n `Invalid journalMode pragma: ${resolved.journalMode}. ` +\n `Expected one of: ${LOCAL_SQLITE_JOURNAL_MODES.join(\", \")}.`,\n { journalMode: resolved.journalMode },\n );\n }\n if (!LOCAL_SQLITE_SYNCHRONOUS_MODES.includes(resolved.synchronous)) {\n throw new ConfigurationError(\n `Invalid synchronous pragma: ${resolved.synchronous}. ` +\n `Expected one of: ${LOCAL_SQLITE_SYNCHRONOUS_MODES.join(\", \")}.`,\n { synchronous: resolved.synchronous },\n );\n }\n if (\n !Number.isSafeInteger(resolved.busyTimeoutMs) ||\n resolved.busyTimeoutMs < 0\n ) {\n throw new ConfigurationError(\n `Invalid busyTimeoutMs pragma: ${String(resolved.busyTimeoutMs)}. ` +\n \"Expected a non-negative integer number of milliseconds.\",\n { busyTimeoutMs: resolved.busyTimeoutMs },\n );\n }\n if (\n resolved.cacheSizeKib !== undefined &&\n (!Number.isSafeInteger(resolved.cacheSizeKib) || resolved.cacheSizeKib >= 0)\n ) {\n throw new ConfigurationError(\n `Invalid cacheSizeKib pragma: ${String(resolved.cacheSizeKib)}. ` +\n \"Expected a negative safe integer — SQLite's own cache_size pragma \" +\n \"interprets a positive value as a page count, not KiB, so a caller \" +\n 'who passes e.g. 131072 meaning \"131072 KiB\" silently gets ' +\n \"131072 pages (~512MiB at the default 4KiB page size) instead.\",\n { cacheSizeKib: resolved.cacheSizeKib },\n );\n }\n if (\n resolved.mmapSizeBytes !== undefined &&\n (!Number.isSafeInteger(resolved.mmapSizeBytes) ||\n resolved.mmapSizeBytes < 0)\n ) {\n throw new ConfigurationError(\n `Invalid mmapSizeBytes pragma: ${String(resolved.mmapSizeBytes)}. ` +\n \"Expected a non-negative safe integer number of bytes.\",\n { mmapSizeBytes: resolved.mmapSizeBytes },\n );\n }\n if (\n resolved.walAutocheckpointPages !== undefined &&\n (!Number.isSafeInteger(resolved.walAutocheckpointPages) ||\n resolved.walAutocheckpointPages < 0 ||\n resolved.walAutocheckpointPages > SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES)\n ) {\n throw new ConfigurationError(\n `Invalid walAutocheckpointPages pragma: ${String(resolved.walAutocheckpointPages)}. ` +\n `Expected an integer between 0 and ${SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES} ` +\n \"WAL pages (0 disables automatic checkpointing entirely).\",\n { walAutocheckpointPages: resolved.walAutocheckpointPages },\n );\n }\n\n // \":memory:\" databases always journal in memory; SQLite answers the WAL\n // request with \"memory\" instead of erroring, so no special-casing needed.\n sqlite.pragma(`journal_mode = ${resolved.journalMode}`);\n sqlite.pragma(`synchronous = ${resolved.synchronous}`);\n sqlite.pragma(`busy_timeout = ${resolved.busyTimeoutMs}`);\n if (resolved.cacheSizeKib !== undefined) {\n sqlite.pragma(`cache_size = ${resolved.cacheSizeKib}`);\n }\n if (resolved.mmapSizeBytes !== undefined) {\n sqlite.pragma(`mmap_size = ${resolved.mmapSizeBytes}`);\n }\n if (resolved.walAutocheckpointPages !== undefined) {\n sqlite.pragma(`wal_autocheckpoint = ${resolved.walAutocheckpointPages}`);\n }\n}\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Connection pragmas applied at open. Defaults to\n * {@link DEFAULT_LOCAL_SQLITE_PRAGMAS} (WAL, `synchronous=NORMAL`, 5s busy\n * timeout, and SQLite's own tiny built-in page cache / disabled mmap\n * left untouched). Individual values merge over the defaults; pass\n * `false` to skip pragma configuration entirely and keep the driver\n * defaults (rollback journal, `synchronous=FULL`, and better-sqlite3's\n * own 5s busy timeout from its `timeout` constructor option). Set\n * `cacheSizeKib`/`mmapSizeBytes` explicitly once a database's working\n * set is known to exceed SQLite's 2MiB default cache — otherwise every\n * query pays a fresh disk read per page past that tiny working set. Set\n * `walAutocheckpointPages` explicitly for a bulk-insert-heavy workload —\n * SQLite's own default checkpoints every ~4MiB of WAL growth, which gets\n * more expensive as the database file grows over a large load.\n */\n pragmas?: LocalSqlitePragmaOptions | false;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n\n /**\n * Override specific backend capabilities — e.g. to simulate an engine-level\n * gap like missing SQL window functions in tests. Forwarded to\n * createSqliteBackend.\n */\n capabilities?: Partial<BackendCapabilities>;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: AdapterBackend<AnySqliteDatabase>;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n try {\n applyConnectionPragmas(sqlite, options.pragmas);\n\n // Best-effort: load sqlite-vec so embedding fields are persisted to\n // per-`(kind, field)` `vec0` storage. Without it, nodes with\n // `embedding()` fields validate and insert but their vectors are silently\n // dropped. When the user has installed sqlite-vec as a peer dep we load\n // it and wire the strategy; otherwise we proceed without vector support.\n const hasSqliteVec = tryLoadSqliteVec(sqlite);\n\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n ...(hasSqliteVec ? { vector: sqliteVecStrategy } : {}),\n capabilities: {\n ...options.capabilities,\n graphAnalytics: {\n supported:\n options.capabilities?.graphAnalytics?.supported ??\n options.capabilities?.transactions !== false,\n mathFunctions:\n options.capabilities?.graphAnalytics?.mathFunctions ?? true,\n },\n },\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n } catch (error) {\n try {\n sqlite.close();\n } catch {\n // Preserve the provisioning error; a cleanup failure is secondary.\n }\n throw error;\n }\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\nexport type { GraphIdentityConfig } from \"../../core/define-graph\";\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { fnv1aBase36 } from './chunk-K34OPSJK.js';
|
|
2
2
|
import { MAX_PG_IDENTIFIER_LENGTH, TRUNCATED_IDENTIFIER_MAX_LENGTH, IDENTIFIER_COMPONENT_MAX_LENGTH } from './chunk-2EBMPJBO.js';
|
|
3
|
-
import { getNodeScopeColumns } from './chunk-
|
|
4
|
-
import { createSchemaIntrospector } from './chunk-
|
|
5
|
-
import { resolveFieldTypeInfoAtJsonPointer } from './chunk-
|
|
6
|
-
import { jsonPointer, normalizeJsonPointer, parseJsonPointer } from './chunk-
|
|
3
|
+
import { getNodeScopeColumns } from './chunk-YDFDBE6D.js';
|
|
4
|
+
import { createSchemaIntrospector } from './chunk-AMKPPFUO.js';
|
|
5
|
+
import { resolveFieldTypeInfoAtJsonPointer } from './chunk-W6OG3HDG.js';
|
|
6
|
+
import { jsonPointer, normalizeJsonPointer, parseJsonPointer } from './chunk-FWJKWH6U.js';
|
|
7
|
+
import { isInteropProbeKey, hasOwnKey } from './chunk-DYATYRY4.js';
|
|
7
8
|
|
|
8
9
|
// src/system-fields.ts
|
|
9
10
|
var NODE_META_KEYS = [
|
|
@@ -244,7 +245,7 @@ function createNodeWhereBuilder(node, schemaIntrospector) {
|
|
|
244
245
|
valueType: systemColumn.valueType
|
|
245
246
|
};
|
|
246
247
|
}
|
|
247
|
-
if (!(key
|
|
248
|
+
if (!hasOwnKey(shape, key)) {
|
|
248
249
|
throw new Error(
|
|
249
250
|
`Unknown field "${key}" in node index WHERE clause for "${node.kind}"`
|
|
250
251
|
);
|
|
@@ -257,7 +258,10 @@ function createNodeWhereBuilder(node, schemaIntrospector) {
|
|
|
257
258
|
valueType
|
|
258
259
|
};
|
|
259
260
|
}
|
|
260
|
-
return createWhereProxy(
|
|
261
|
+
return createWhereProxy(
|
|
262
|
+
(key) => getOperand(key),
|
|
263
|
+
(key) => system.has(key) || hasOwnKey(shape, key)
|
|
264
|
+
);
|
|
261
265
|
}
|
|
262
266
|
function createEdgeWhereBuilder(edge, schemaIntrospector) {
|
|
263
267
|
const shape = getSchemaShape(edge.schema);
|
|
@@ -271,7 +275,7 @@ function createEdgeWhereBuilder(edge, schemaIntrospector) {
|
|
|
271
275
|
valueType: systemColumn.valueType
|
|
272
276
|
};
|
|
273
277
|
}
|
|
274
|
-
if (!(key
|
|
278
|
+
if (!hasOwnKey(shape, key)) {
|
|
275
279
|
throw new Error(
|
|
276
280
|
`Unknown field "${key}" in edge index WHERE clause for "${edge.kind}"`
|
|
277
281
|
);
|
|
@@ -284,14 +288,16 @@ function createEdgeWhereBuilder(edge, schemaIntrospector) {
|
|
|
284
288
|
valueType
|
|
285
289
|
};
|
|
286
290
|
}
|
|
287
|
-
return createWhereProxy(
|
|
291
|
+
return createWhereProxy(
|
|
292
|
+
(key) => getOperand(key),
|
|
293
|
+
(key) => system.has(key) || hasOwnKey(shape, key)
|
|
294
|
+
);
|
|
288
295
|
}
|
|
289
|
-
function createWhereProxy(getOperand) {
|
|
290
|
-
return new Proxy(
|
|
296
|
+
function createWhereProxy(getOperand, declaresField) {
|
|
297
|
+
return new Proxy({}, {
|
|
291
298
|
get: (_target, property) => {
|
|
292
299
|
if (typeof property !== "string") return;
|
|
293
|
-
if (property
|
|
294
|
-
if (property === "toJSON") return;
|
|
300
|
+
if (isInteropProbeKey(property) && !declaresField(property)) return;
|
|
295
301
|
const operand = getOperand(property);
|
|
296
302
|
return createIndexWhereFieldBuilder(operand);
|
|
297
303
|
}
|
|
@@ -609,5 +615,5 @@ function sanitizeIdentifierComponent(value) {
|
|
|
609
615
|
}
|
|
610
616
|
|
|
611
617
|
export { EDGE_META_KEYS, NODE_META_KEYS, defineEdgeIndex, defineNodeIndex };
|
|
612
|
-
//# sourceMappingURL=chunk-
|
|
613
|
-
//# sourceMappingURL=chunk-
|
|
618
|
+
//# sourceMappingURL=chunk-I5MOXA4H.js.map
|
|
619
|
+
//# sourceMappingURL=chunk-I5MOXA4H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/system-fields.ts","../src/indexes/define-index.ts"],"names":[],"mappings":"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","file":"chunk-I5MOXA4H.js","sourcesContent":["export const NODE_META_KEYS = [\n \"version\",\n \"validFrom\",\n \"validTo\",\n \"createdAt\",\n \"updatedAt\",\n \"deletedAt\",\n] as const;\n\nexport const EDGE_META_KEYS = [\n \"validFrom\",\n \"validTo\",\n \"createdAt\",\n \"updatedAt\",\n \"deletedAt\",\n] as const;\n","import { type z } from \"zod\";\n\nimport {\n IDENTIFIER_COMPONENT_MAX_LENGTH,\n MAX_PG_IDENTIFIER_LENGTH,\n TRUNCATED_IDENTIFIER_MAX_LENGTH,\n} from \"../constants\";\nimport {\n type AnyEdgeType,\n type KindEntity,\n type NodeType,\n} from \"../core/types\";\nimport { type ValueType } from \"../query/ast\";\nimport { resolveFieldTypeInfoAtJsonPointer } from \"../query/field-type-info\";\nimport {\n type JsonPointer,\n jsonPointer,\n type JsonPointerInput,\n type JsonPointerSegment,\n normalizeJsonPointer,\n parseJsonPointer,\n} from \"../query/json-pointer\";\nimport {\n createSchemaIntrospector,\n type FieldTypeInfo,\n} from \"../query/schema-introspector\";\nimport { EDGE_META_KEYS, NODE_META_KEYS } from \"../system-fields\";\nimport { fnv1aBase36 } from \"../utils/hash\";\nimport { hasOwnKey, isInteropProbeKey } from \"../utils/object\";\nimport { getNodeScopeColumns } from \"./compiler\";\nimport {\n type EdgeIndexConfig,\n type EdgeIndexDeclaration,\n type EdgeIndexDirection,\n type EdgeIndexWhereBuilder,\n type IndexFieldInput,\n type IndexScope,\n type IndexWhereExpression,\n type IndexWhereFieldBuilder,\n type IndexWhereLiteral,\n type IndexWhereOp,\n type IndexWhereOperand,\n type NodeIndexConfig,\n type NodeIndexDeclaration,\n type NodeIndexWhereBuilder,\n type RelationalIndexMethod,\n type SystemColumnName,\n} from \"./types\";\n\n// `keySystemColumns` on a node index must fail closed: reject anything that\n// isn't a known node-valid column, not just the known edge-only ones. A\n// caller whose array escapes TypeScript's literal-union checking (`any`-typed\n// data, a value round-tripped through JSON) could otherwise pass a typo'd or\n// otherwise-invalid column that silently reaches SQL DDL generation instead\n// of failing here with a clear error. Derived from the single source of\n// truth (`createSystemColumnMapForNode`, hoisted — see below) rather than a\n// second hand-maintained list, so it can't drift from it.\nconst NODE_KEY_SYSTEM_COLUMNS: ReadonlySet<SystemColumnName> = new Set(\n [...createSystemColumnMapForNode().values()].map((entry) => entry.column),\n);\n\n// ============================================================\n// Public API\n// ============================================================\n\nexport function defineNodeIndex<N extends NodeType>(\n node: N,\n config: NodeIndexConfig<N>,\n): NodeIndexDeclaration {\n const scope = config.scope ?? \"graphAndKind\";\n const unique = config.unique ?? false;\n const keySystemColumns = normalizeKeySystemColumnsOrThrow(\n config.keySystemColumns ?? [],\n scope,\n unique,\n );\n\n const schemaIntrospector = createSchemaIntrospector(\n new Map([[node.kind, { schema: node.schema }]]),\n );\n\n const { pointers: fields, valueTypes: fieldValueTypes } =\n normalizeNodeIndexFieldsOrThrow(\n node,\n config.fields ?? [],\n schemaIntrospector,\n \"fields\",\n // GIN containment indexes exist precisely for array/object fields,\n // which the btree guard otherwise rejects.\n { allowJsonFields: config.method === \"gin\" },\n );\n\n const { pointers: coveringFields, valueTypes: coveringFieldValueTypes } =\n normalizeNodeIndexFieldsOrThrow(\n node,\n config.coveringFields ?? [],\n schemaIntrospector,\n \"coveringFields\",\n {},\n );\n assertNoOverlap(fields, coveringFields, \"fields\", \"coveringFields\");\n\n if (\n fields.length === 0 &&\n coveringFields.length === 0 &&\n keySystemColumns.length === 0\n ) {\n throw new Error(\n \"Index must declare at least one of fields, coveringFields, or keySystemColumns\",\n );\n }\n\n const where = normalizeWhereInput(config.where, () =>\n createNodeWhereBuilder(node, schemaIntrospector),\n );\n\n const method = resolveAdvancedIndexMethod(config.method, {\n fieldCount: fields.length,\n fieldValueType: fieldValueTypes[0],\n coveringFieldCount: coveringFields.length,\n keySystemColumnCount: keySystemColumns.length,\n unique,\n hasWhere: where !== undefined,\n });\n\n const defaultName = generateDefaultIndexName({\n kind: \"node\",\n kindName: node.kind,\n unique,\n scope,\n direction: \"none\",\n fields,\n coveringFields,\n keySystemColumns,\n });\n const name =\n config.name ??\n (method === undefined ? defaultName : `${defaultName}_${method}`);\n\n // `origin` is intentionally omitted: `\"compile-time\"` is the default\n // and is canonicalized by absence so the serialized form stays\n // byte-identical for legacy graphs. `method` and `keySystemColumns`\n // follow the same rule (absence == \"btree\" / no system key columns).\n return {\n entity: \"node\",\n kind: node.kind,\n name,\n fields,\n fieldValueTypes,\n coveringFields,\n coveringFieldValueTypes,\n unique,\n scope,\n where,\n ...(method === undefined ? {} : { method }),\n ...(keySystemColumns.length === 0 ? {} : { keySystemColumns }),\n };\n}\n\n/**\n * Validates `keySystemColumns`: must be node system columns (not\n * edge-only `from_kind`/`from_id`/`to_kind`/`to_id`), must not repeat\n * each other, must not repeat a column `scope` already prefixes the key\n * with, and must not combine `\"id\"` with `unique` (every node's `id` is\n * already unique per row, so that combination can never enforce a\n * meaningful constraint across the index's other key columns).\n */\nfunction normalizeKeySystemColumnsOrThrow(\n columns: readonly SystemColumnName[],\n scope: IndexScope,\n unique: boolean,\n): readonly SystemColumnName[] {\n if (columns.length === 0) return [];\n\n for (const column of columns) {\n if (!NODE_KEY_SYSTEM_COLUMNS.has(column)) {\n throw new Error(\n `Node index keySystemColumns does not support \"${column}\" (edge-only system column)`,\n );\n }\n }\n assertUnique(columns, \"keySystemColumns\");\n\n const scopeColumns = new Set(getNodeScopeColumns(scope));\n for (const column of columns) {\n if (scopeColumns.has(column)) {\n throw new Error(\n `Node index keySystemColumns must not repeat a column already implied by scope \"${scope}\": \"${column}\"`,\n );\n }\n }\n\n if (unique && columns.includes(\"id\")) {\n throw new Error(\n `unique node indexes cannot include keySystemColumns: [\"id\"]; id is already unique per node, so including it defeats uniqueness across the prop fields`,\n );\n }\n\n // Return a fresh array: the declaration must own an immutable snapshot, not\n // a reference to the caller's array. Otherwise a post-call mutation of the\n // original `config.keySystemColumns` bypasses these checks and desyncs the\n // already-computed name/hash from the compiled index keys.\n return [...columns];\n}\n\nexport function defineEdgeIndex<E extends AnyEdgeType>(\n edge: E,\n config: EdgeIndexConfig<E>,\n): EdgeIndexDeclaration {\n const scope = config.scope ?? \"graphAndKind\";\n const unique = config.unique ?? false;\n const direction = config.direction ?? \"none\";\n\n const schemaIntrospector = createSchemaIntrospector(\n new Map(),\n new Map([[edge.kind, { schema: edge.schema }]]),\n );\n\n const { pointers: fields, valueTypes: fieldValueTypes } =\n normalizeEdgeIndexFieldsOrThrow(\n edge,\n config.fields,\n schemaIntrospector,\n \"fields\",\n { allowEmpty: false, allowJsonFields: config.method === \"gin\" },\n );\n\n const { pointers: coveringFields, valueTypes: coveringFieldValueTypes } =\n normalizeEdgeIndexFieldsOrThrow(\n edge,\n config.coveringFields ?? [],\n schemaIntrospector,\n \"coveringFields\",\n { allowEmpty: true },\n );\n assertNoOverlap(fields, coveringFields, \"fields\", \"coveringFields\");\n\n const where = normalizeWhereInput(config.where, () =>\n createEdgeWhereBuilder(edge, schemaIntrospector),\n );\n\n const method = resolveAdvancedIndexMethod(config.method, {\n fieldCount: fields.length,\n fieldValueType: fieldValueTypes[0],\n coveringFieldCount: coveringFields.length,\n keySystemColumnCount: 0,\n unique,\n hasWhere: where !== undefined,\n });\n\n const defaultName = generateDefaultIndexName({\n kind: \"edge\",\n kindName: edge.kind,\n unique,\n scope,\n direction,\n fields,\n coveringFields,\n });\n const name =\n config.name ??\n (method === undefined ? defaultName : `${defaultName}_${method}`);\n\n return {\n entity: \"edge\",\n kind: edge.kind,\n name,\n fields,\n fieldValueTypes,\n coveringFields,\n coveringFieldValueTypes,\n unique,\n scope,\n direction,\n where,\n ...(method === undefined ? {} : { method }),\n };\n}\n\n/**\n * Validates and canonicalizes a declaration's index method. `\"btree\"` (or\n * absent) canonicalizes to `undefined` so serialized declarations and\n * materialization signatures from before `method` existed stay\n * byte-identical. GIN-family methods index one expression and have no\n * ordered key columns, so multi-field, covering, unique, and partial\n * variants are rejected at declaration time rather than failing as\n * confusing DDL errors at materialization time.\n */\nfunction resolveAdvancedIndexMethod(\n method: RelationalIndexMethod | undefined,\n details: Readonly<{\n fieldCount: number;\n fieldValueType: ValueType | undefined;\n coveringFieldCount: number;\n keySystemColumnCount: number;\n unique: boolean;\n hasWhere: boolean;\n }>,\n): Exclude<RelationalIndexMethod, \"btree\"> | undefined {\n const resolved = method ?? \"btree\";\n if (resolved === \"btree\") return undefined;\n if (details.fieldCount !== 1) {\n throw new Error(\n `Index method \"${resolved}\" requires exactly one field (a GIN indexes one expression), got ${details.fieldCount}`,\n );\n }\n // Enforce the field-type contract the methods advertise: gin serves the\n // array containment predicates, trigram serves the string substring /\n // case-insensitive predicates. Anything else (including unresolvable\n // field types) would materialize an index no documented predicate can\n // ever use, so it is rejected here rather than silently costing write\n // amplification for nothing.\n if (resolved === \"gin\" && details.fieldValueType !== \"array\") {\n throw new Error(\n details.fieldValueType === \"string\" ?\n 'Index method \"gin\" serves array containment; for substring or case-insensitive matching on a string field use method: \"trigram\"'\n : `Index method \"gin\" requires an array field (it serves the array containment predicates), got field type \"${details.fieldValueType ?? \"unresolved\"}\"`,\n );\n }\n if (resolved === \"trigram\" && details.fieldValueType !== \"string\") {\n throw new Error(\n details.fieldValueType === \"array\" ?\n 'Index method \"trigram\" serves substring matching on string fields; for array containment use method: \"gin\"'\n : `Index method \"trigram\" requires a string field (it serves substring and case-insensitive matches), got field type \"${details.fieldValueType ?? \"unresolved\"}\"`,\n );\n }\n const extraKeyColumns: readonly [string, number][] = [\n [\"coveringFields\", details.coveringFieldCount],\n [\"keySystemColumns\", details.keySystemColumnCount],\n ];\n for (const [label, count] of extraKeyColumns) {\n if (count > 0) {\n throw new Error(\n `Index method \"${resolved}\" does not support ${label} (GIN indexes cannot serve index-only scans over extra columns)`,\n );\n }\n }\n if (details.unique) {\n throw new Error(\n `Index method \"${resolved}\" does not support unique (GIN indexes cannot enforce uniqueness)`,\n );\n }\n if (details.hasWhere) {\n throw new Error(\n `Index method \"${resolved}\" does not support a partial where clause`,\n );\n }\n return resolved;\n}\n\n// ============================================================\n// WHERE Builder\n// ============================================================\n\n/**\n * The WHERE builder currently only supports top-level fields.\n * Nested field access (e.g., `where.metadata.priority.gt(5)`) is not supported.\n * Use top-level field predicates like `where.status.eq(\"active\")`.\n *\n * For complex nested predicates, use `andWhere()`, `orWhere()`, and `notWhere()`\n * to compose multiple top-level conditions.\n */\n\nfunction normalizeWhereInput<Builder>(\n input:\n | ((where: Builder) => IndexWhereExpression)\n | IndexWhereExpression\n | undefined,\n createBuilder: () => Builder,\n): IndexWhereExpression | undefined {\n if (input === undefined) {\n return undefined;\n }\n\n if (typeof input === \"function\") {\n return input(createBuilder());\n }\n\n return input;\n}\n\ntype NodeShape = Readonly<Record<string, z.ZodType>>;\ntype EdgeShape = Readonly<Record<string, z.ZodType>>;\n\nfunction createNodeWhereBuilder<N extends NodeType>(\n node: N,\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): NodeIndexWhereBuilder<N> {\n const shape = getSchemaShape(node.schema);\n const system = createSystemColumnMapForNode();\n\n function getOperand(key: string): IndexWhereOperand {\n const systemColumn = system.get(key);\n if (systemColumn) {\n return {\n __type: \"index_operand_system\",\n column: systemColumn.column,\n valueType: systemColumn.valueType,\n };\n }\n\n if (!hasOwnKey(shape, key)) {\n throw new Error(\n `Unknown field \"${key}\" in node index WHERE clause for \"${node.kind}\"`,\n );\n }\n\n const info = schemaIntrospector.getFieldTypeInfo(node.kind, key);\n const valueType = info?.valueType;\n\n return {\n __type: \"index_operand_prop\",\n field: key,\n valueType,\n };\n }\n\n return createWhereProxy<NodeIndexWhereBuilder<N>>(\n (key) => getOperand(key),\n (key) => system.has(key) || hasOwnKey(shape, key),\n );\n}\n\nfunction createEdgeWhereBuilder<E extends AnyEdgeType>(\n edge: E,\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): EdgeIndexWhereBuilder<E> {\n const shape = getSchemaShape(edge.schema);\n const system = createSystemColumnMapForEdge();\n\n function getOperand(key: string): IndexWhereOperand {\n const systemColumn = system.get(key);\n if (systemColumn) {\n return {\n __type: \"index_operand_system\",\n column: systemColumn.column,\n valueType: systemColumn.valueType,\n };\n }\n\n if (!hasOwnKey(shape, key)) {\n throw new Error(\n `Unknown field \"${key}\" in edge index WHERE clause for \"${edge.kind}\"`,\n );\n }\n\n const info = schemaIntrospector.getEdgeFieldTypeInfo(edge.kind, key);\n const valueType = info?.valueType;\n\n return {\n __type: \"index_operand_prop\",\n field: key,\n valueType,\n };\n }\n\n return createWhereProxy<EdgeIndexWhereBuilder<E>>(\n (key) => getOperand(key),\n (key) => system.has(key) || hasOwnKey(shape, key),\n );\n}\n\nfunction createWhereProxy<TBuilder extends object>(\n getOperand: (key: string) => IndexWhereOperand,\n declaresField: (key: string) => boolean,\n): TBuilder {\n // An ORDINARY object target, even though the target is never read: a proxy's\n // target is what `instanceof`, `Object.getPrototypeOf` and every other\n // internal method resolve against, and this proxy is handed to the CALLER's\n // `where:` callback. A null-prototype target made `builder instanceof Object`\n // answer `false` for no benefit — nothing is ever written to it, so it was\n // not even the `__proto__`-write protection a data-keyed bag exists for.\n return new Proxy({} as TBuilder, {\n get: (_target, property: string | symbol) => {\n if (typeof property !== \"string\") return;\n\n // A DECLARED field wins over the interop exemption, for the reason\n // `isInteropProbeKey` documents: `then` and `toJSON` are legal schema\n // field names, and refusing them here left a partial index unable to\n // reference a field the schema declares. Only an UNDECLARED probe\n // resolves to `undefined`, keeping the builder safe to await or\n // stringify.\n if (isInteropProbeKey(property) && !declaresField(property)) return;\n\n const operand = getOperand(property);\n return createIndexWhereFieldBuilder(operand);\n },\n });\n}\n\nfunction createIndexWhereFieldBuilder<T>(\n operand: IndexWhereOperand,\n): IndexWhereFieldBuilder<T> {\n function isNull(): IndexWhereExpression {\n return { __type: \"index_where_null_check\", operand, op: \"isNull\" };\n }\n\n function isNotNull(): IndexWhereExpression {\n return { __type: \"index_where_null_check\", operand, op: \"isNotNull\" };\n }\n\n function comparison(op: IndexWhereOp, value: unknown): IndexWhereExpression {\n return {\n __type: \"index_where_comparison\",\n left: operand,\n op,\n right: toLiteralOrThrow(value, operand.valueType),\n };\n }\n\n function listComparison(\n op: IndexWhereOp,\n values: readonly unknown[],\n ): IndexWhereExpression {\n const literals = values.map((value) =>\n toLiteralOrThrow(value, operand.valueType),\n );\n return {\n __type: \"index_where_comparison\",\n left: operand,\n op,\n right: literals,\n };\n }\n\n return {\n eq: (value) => comparison(\"eq\", value),\n neq: (value) => comparison(\"neq\", value),\n gt: (value) => comparison(\"gt\", value),\n gte: (value) => comparison(\"gte\", value),\n lt: (value) => comparison(\"lt\", value),\n lte: (value) => comparison(\"lte\", value),\n in: (values) => listComparison(\"in\", values),\n notIn: (values) => listComparison(\"notIn\", values),\n isNull,\n isNotNull,\n };\n}\n\nfunction toLiteralOrThrow(\n value: unknown,\n preferredType: ValueType | undefined,\n): IndexWhereLiteral {\n if (value instanceof Date) {\n return {\n __type: \"index_where_literal\",\n value: value.toISOString(),\n valueType: \"date\",\n };\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n const valueType = inferValueType(value, preferredType);\n return { __type: \"index_where_literal\", value, valueType };\n }\n\n throw new Error(\n `Unsupported literal value type in index WHERE clause: ${String(value)}`,\n );\n}\n\nfunction inferValueType(\n value: string | number | boolean,\n preferredType: ValueType | undefined,\n): ValueType {\n if (preferredType === \"date\" && typeof value === \"string\") {\n return \"date\";\n }\n if (preferredType === \"number\" && typeof value === \"string\") {\n return \"number\";\n }\n if (preferredType === \"boolean\" && typeof value === \"string\") {\n return \"boolean\";\n }\n\n if (typeof value === \"string\") return \"string\";\n if (typeof value === \"number\") return \"number\";\n return \"boolean\";\n}\n\nfunction toSystemColumnName(metaKey: string): SystemColumnName {\n const snake = metaKey.replaceAll(/([A-Z])/g, \"_$1\").toLowerCase();\n\n switch (snake) {\n case \"deleted_at\":\n case \"valid_from\":\n case \"valid_to\":\n case \"created_at\":\n case \"updated_at\": {\n return snake;\n }\n default: {\n throw new Error(`Unsupported system meta key: ${metaKey}`);\n }\n }\n}\n\nfunction createSystemColumnMapForNode(): Map<\n string,\n Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>\n> {\n const entries: (readonly [\n string,\n Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>,\n ])[] = [\n [\"graphId\", { column: \"graph_id\", valueType: \"string\" }],\n [\"kind\", { column: \"kind\", valueType: \"string\" }],\n [\"id\", { column: \"id\", valueType: \"string\" }],\n ];\n\n for (const key of NODE_META_KEYS) {\n if (key === \"version\") {\n entries.push([key, { column: \"version\", valueType: \"number\" }]);\n continue;\n }\n entries.push([key, { column: toSystemColumnName(key), valueType: \"date\" }]);\n }\n\n return new Map(entries);\n}\n\nfunction createSystemColumnMapForEdge(): Map<\n string,\n Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>\n> {\n const entries: (readonly [\n string,\n Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>,\n ])[] = [\n [\"graphId\", { column: \"graph_id\", valueType: \"string\" }],\n [\"kind\", { column: \"kind\", valueType: \"string\" }],\n [\"id\", { column: \"id\", valueType: \"string\" }],\n [\"fromKind\", { column: \"from_kind\", valueType: \"string\" }],\n [\"fromId\", { column: \"from_id\", valueType: \"string\" }],\n [\"toKind\", { column: \"to_kind\", valueType: \"string\" }],\n [\"toId\", { column: \"to_id\", valueType: \"string\" }],\n ];\n\n for (const key of EDGE_META_KEYS) {\n entries.push([key, { column: toSystemColumnName(key), valueType: \"date\" }]);\n }\n\n return new Map(entries);\n}\n\nfunction getSchemaShape(schema: z.ZodType): NodeShape | EdgeShape {\n if (schema.type !== \"object\") {\n throw new Error(\"Index definitions require an object schema\");\n }\n\n const def = schema.def as { shape?: Record<string, z.ZodType> };\n const shape = def.shape;\n if (!shape) {\n throw new Error(\"Index definitions require a resolvable object shape\");\n }\n\n return shape;\n}\n\n// ============================================================\n// Validation\n// ============================================================\n\nfunction assertNonEmpty(values: readonly unknown[], label: string): void {\n if (values.length === 0) {\n throw new Error(`Index ${label} must not be empty`);\n }\n}\n\nfunction assertUnique(values: readonly string[], label: string): void {\n const set = new Set<string>();\n for (const value of values) {\n if (set.has(value)) {\n throw new Error(`Index ${label} contains duplicate value: ${value}`);\n }\n set.add(value);\n }\n}\n\nfunction assertNoOverlap(\n a: readonly string[],\n b: readonly string[],\n aLabel: string,\n bLabel: string,\n): void {\n const set = new Set(a);\n for (const value of b) {\n if (set.has(value)) {\n throw new Error(`Index ${bLabel} must not overlap ${aLabel}: ${value}`);\n }\n }\n}\n\nfunction assertIndexableValueType(\n valueType: ValueType,\n context: string,\n options: Readonly<{ allowJsonFields: boolean }>,\n): void {\n if (valueType === \"embedding\") {\n throw new Error(\n `Cannot create props index for embedding field (${context}); embedding() fields are indexed automatically in the vector strategy's per-(kind, field) storage`,\n );\n }\n\n if (\n (valueType === \"array\" || valueType === \"object\") &&\n !options.allowJsonFields\n ) {\n throw new Error(\n `Cannot create btree props index for ${valueType} field (${context}); use method: \"gin\" instead`,\n );\n }\n}\n\ntype NormalizedIndexFields = Readonly<{\n pointers: readonly JsonPointer[];\n valueTypes: readonly (ValueType | undefined)[];\n}>;\n\nfunction normalizeNodeIndexFieldsOrThrow<N extends NodeType>(\n node: N,\n inputs: readonly IndexFieldInput<z.infer<N[\"schema\"]>>[],\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n label: string,\n options: Readonly<{ allowJsonFields?: boolean }>,\n): NormalizedIndexFields {\n // Node `fields`/`coveringFields` are both optional (an index can be keyed\n // by `keySystemColumns` alone), so unlike the edge equivalent below, an\n // empty input is always valid here — `defineNodeIndex` enforces that at\n // least one of `fields`/`coveringFields`/`keySystemColumns` is non-empty.\n if (inputs.length === 0) {\n return { pointers: [], valueTypes: [] };\n }\n\n const pointers: JsonPointer[] = [];\n const valueTypes: (ValueType | undefined)[] = [];\n\n for (const input of inputs) {\n const pointer = normalizeIndexFieldPointer(input);\n const info = resolveNodeFieldTypeInfoOrThrow(\n node.kind,\n pointer,\n schemaIntrospector,\n );\n assertIndexableValueType(info.valueType, `node \"${node.kind}\" ${pointer}`, {\n allowJsonFields: options.allowJsonFields ?? false,\n });\n pointers.push(pointer);\n valueTypes.push(info.valueType);\n }\n\n assertUnique(pointers, label);\n\n return { pointers, valueTypes };\n}\n\nfunction normalizeEdgeIndexFieldsOrThrow<E extends AnyEdgeType>(\n edge: E,\n inputs: readonly IndexFieldInput<z.infer<E[\"schema\"]>>[],\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n label: string,\n options: Readonly<{ allowEmpty: boolean; allowJsonFields?: boolean }>,\n): NormalizedIndexFields {\n if (inputs.length === 0 && options.allowEmpty) {\n return { pointers: [], valueTypes: [] };\n }\n assertNonEmpty(inputs, label);\n\n const pointers: JsonPointer[] = [];\n const valueTypes: (ValueType | undefined)[] = [];\n\n for (const input of inputs) {\n const pointer = normalizeIndexFieldPointer(input);\n const info = resolveEdgeFieldTypeInfoOrThrow(\n edge.kind,\n pointer,\n schemaIntrospector,\n );\n assertIndexableValueType(info.valueType, `edge \"${edge.kind}\" ${pointer}`, {\n allowJsonFields: options.allowJsonFields ?? false,\n });\n pointers.push(pointer);\n valueTypes.push(info.valueType);\n }\n\n assertUnique(pointers, label);\n\n return { pointers, valueTypes };\n}\n\nfunction normalizeIndexFieldPointer<T>(input: IndexFieldInput<T>): JsonPointer {\n if (Array.isArray(input)) {\n if (input.length === 0) {\n throw new Error(\"Index field JSON pointer must not be empty\");\n }\n return jsonPointer(input as readonly JsonPointerSegment[]);\n }\n\n if (typeof input === \"string\") {\n if (input.startsWith(\"/\")) {\n const pointer = normalizeJsonPointer(\n input as JsonPointerInput<Record<string, unknown>>,\n );\n if (pointer === \"\") {\n throw new Error(\"Index field JSON pointer must not be empty\");\n }\n return pointer;\n }\n return jsonPointer([input]);\n }\n\n throw new Error(`Unsupported index field input: ${String(input)}`);\n}\n\nfunction resolveNodeFieldTypeInfoOrThrow(\n nodeKind: string,\n pointer: JsonPointer,\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): FieldTypeInfo {\n const segments = parseJsonPointer(pointer);\n const [first, ...rest] = segments;\n if (!first) {\n throw new Error(\"Index field JSON pointer must not be empty\");\n }\n\n const rootInfo = schemaIntrospector.getFieldTypeInfo(nodeKind, first);\n if (!rootInfo) {\n throw new Error(\n `Unknown field \"${first}\" for node \"${nodeKind}\" in index definition`,\n );\n }\n\n if (rest.length === 0) {\n return rootInfo;\n }\n\n const resolved = resolveFieldTypeInfoAtJsonPointer(\n rootInfo,\n jsonPointer(rest),\n );\n if (!resolved) {\n throw new Error(\n `Unknown JSON pointer \"${pointer}\" for node \"${nodeKind}\" in index definition`,\n );\n }\n\n return resolved;\n}\n\nfunction resolveEdgeFieldTypeInfoOrThrow(\n edgeKind: string,\n pointer: JsonPointer,\n schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): FieldTypeInfo {\n const segments = parseJsonPointer(pointer);\n const [first, ...rest] = segments;\n if (!first) {\n throw new Error(\"Index field JSON pointer must not be empty\");\n }\n\n const rootInfo = schemaIntrospector.getEdgeFieldTypeInfo(edgeKind, first);\n if (!rootInfo) {\n throw new Error(\n `Unknown field \"${first}\" for edge \"${edgeKind}\" in index definition`,\n );\n }\n\n if (rest.length === 0) {\n return rootInfo;\n }\n\n const resolved = resolveFieldTypeInfoAtJsonPointer(\n rootInfo,\n jsonPointer(rest),\n );\n if (!resolved) {\n throw new Error(\n `Unknown JSON pointer \"${pointer}\" for edge \"${edgeKind}\" in index definition`,\n );\n }\n\n return resolved;\n}\n\n// ============================================================\n// Default Name Generation\n// ============================================================\n\ntype DefaultNameParts = Readonly<{\n kind: KindEntity;\n kindName: string;\n unique: boolean;\n scope: IndexScope;\n direction: EdgeIndexDirection;\n fields: readonly string[];\n coveringFields: readonly string[];\n /**\n * Node-only, defaults to `[]` for edges. Folded into the hash/name only\n * when non-empty so indexes that don't use it keep byte-identical\n * default names to before this field existed.\n */\n keySystemColumns?: readonly string[];\n}>;\n\nfunction generateDefaultIndexName(parts: DefaultNameParts): string {\n const keySystemColumns = parts.keySystemColumns ?? [];\n const hash = fnv1aBase36(\n JSON.stringify({\n kind: parts.kind,\n kindName: parts.kindName,\n unique: parts.unique,\n scope: parts.scope,\n direction: parts.direction,\n fields: parts.fields,\n covering: parts.coveringFields,\n ...(keySystemColumns.length > 0 ? { keySystemColumns } : {}),\n }),\n );\n\n const nameParts = [\n \"idx\",\n \"tg\",\n parts.kind,\n sanitizeIdentifierComponent(parts.kindName),\n parts.fields.length > 0 ?\n sanitizeIdentifierComponent(parts.fields.join(\"_\"))\n : undefined,\n parts.coveringFields.length > 0 ?\n `cov_${sanitizeIdentifierComponent(parts.coveringFields.join(\"_\"))}`\n : undefined,\n keySystemColumns.length > 0 ?\n `sys_${sanitizeIdentifierComponent(keySystemColumns.join(\"_\"))}`\n : undefined,\n parts.direction === \"none\" ? undefined : parts.direction,\n parts.unique ? \"uniq\" : undefined,\n parts.scope === \"graphAndKind\" ?\n undefined\n : sanitizeIdentifierComponent(parts.scope),\n hash,\n ].filter((part) => part !== undefined);\n\n const joined = nameParts.join(\"_\");\n return joined.length <= MAX_PG_IDENTIFIER_LENGTH ?\n joined\n : `${joined.slice(0, TRUNCATED_IDENTIFIER_MAX_LENGTH)}_${hash}`;\n}\n\nfunction sanitizeIdentifierComponent(value: string): string {\n return value\n .toLowerCase()\n .replaceAll(/[^a-z0-9_]+/g, \"_\")\n .replaceAll(/^_+|_+$/g, \"\")\n .slice(0, IDENTIFIER_COMPONENT_MAX_LENGTH);\n}\n"]}
|
|
@@ -72,6 +72,10 @@ Suggestion: ${this.suggestion}`;
|
|
|
72
72
|
return lines.join("\n");
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
|
+
var INVERTED_VALIDITY_WINDOW_CODE = "INVERTED_VALIDITY_WINDOW";
|
|
76
|
+
var IMMUTABLE_VALIDITY_LOWER_BOUND_CODE = "IMMUTABLE_VALIDITY_LOWER_BOUND";
|
|
77
|
+
var EDGE_IDENTITY_MISMATCH_CODE = "EDGE_IDENTITY_MISMATCH";
|
|
78
|
+
var ENTITY_ALREADY_EXISTS_CODE = "ENTITY_ALREADY_EXISTS";
|
|
75
79
|
var ValidationError = class extends TypeGraphError {
|
|
76
80
|
constructor(message, details, options) {
|
|
77
81
|
const fieldList = details.issues.length > 0 ? details.issues.map((index) => index.path || "(root)").join(", ") : "unknown";
|
|
@@ -237,6 +241,36 @@ var DisjointError = class extends TypeGraphError {
|
|
|
237
241
|
this.name = "DisjointError";
|
|
238
242
|
}
|
|
239
243
|
};
|
|
244
|
+
var IdentityContradictionError = class extends TypeGraphError {
|
|
245
|
+
constructor(details, options) {
|
|
246
|
+
super(
|
|
247
|
+
`Identity contradiction: ${details.a.kind}/${details.a.id} and ${details.b.kind}/${details.b.id} cannot satisfy ${details.operation}.`,
|
|
248
|
+
"IDENTITY_CONTRADICTION",
|
|
249
|
+
{
|
|
250
|
+
details,
|
|
251
|
+
category: "constraint",
|
|
252
|
+
suggestion: "Retract the conflicting identity assertion or correct the graph ontology before retrying.",
|
|
253
|
+
cause: options?.cause
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
this.name = "IdentityContradictionError";
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
var IdentitySeparationViolationError = class extends TypeGraphError {
|
|
260
|
+
constructor(details, options) {
|
|
261
|
+
super(
|
|
262
|
+
`Identity separation violated: ${details.a.kind}/${details.a.id} and ${details.b.kind}/${details.b.id} are held apart by assertion ${details.assertionId}, but this write would put both in identity class ${details.classKey}.`,
|
|
263
|
+
"IDENTITY_SEPARATION_VIOLATION",
|
|
264
|
+
{
|
|
265
|
+
details,
|
|
266
|
+
category: "constraint",
|
|
267
|
+
suggestion: "Retract the conflicting different assertion before merging these identity classes. If no application call requested this merge, the write reached the ledger through a path that skipped identity validation.",
|
|
268
|
+
cause: options?.cause
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
|
+
this.name = "IdentitySeparationViolationError";
|
|
272
|
+
}
|
|
273
|
+
};
|
|
240
274
|
var RestrictedDeleteError = class extends TypeGraphError {
|
|
241
275
|
constructor(details, options) {
|
|
242
276
|
const edgeList = details.edgeKinds.join(", ");
|
|
@@ -396,6 +430,35 @@ var ConfigurationError = class extends TypeGraphError {
|
|
|
396
430
|
this.name = "ConfigurationError";
|
|
397
431
|
}
|
|
398
432
|
};
|
|
433
|
+
var CONTRIBUTION_REBUILD_REFUSAL_MESSAGE = {
|
|
434
|
+
"vector-source-unavailable": "Vector contributions cannot be rebuilt: TypeGraph stores the vectors callers supply and never the inputs that produced them, so the embeddings exist only in the storage a rebuild would drop.",
|
|
435
|
+
"no-drop-ddl": "The active strategy declares no teardown DDL for this contribution, so its storage cannot be dropped and recreated.",
|
|
436
|
+
"no-schema-fence": "This backend exposes no transactional schema fence, so a rebuild's drop, recreate, refill, and marker stamp cannot be made atomic.",
|
|
437
|
+
"shared-storage-in-use": "This contribution's storage is provisioned at a different shape than the current declaration, and the only repair \u2014 recreating it \u2014 would destroy fulltext content belonging to other graphs that share the same table and can only be rebuilt from their own processes."
|
|
438
|
+
};
|
|
439
|
+
var CONTRIBUTION_REBUILD_REFUSAL_SUGGESTION = {
|
|
440
|
+
"vector-source-unavailable": "Run store.reembedVectorField(kind, fieldPath, { embed }) instead: it recreates the field's storage and takes the callback that regenerates the embeddings the recreate discards.",
|
|
441
|
+
"no-drop-ddl": "Declare dropDdl on the contribution returned from the strategy's ownedTables(), or drop and recreate the table out of band and then run store.repairContributions() to re-stamp its marker.",
|
|
442
|
+
"no-schema-fence": "Use a backend that implements schemaWriteTransaction, or perform the drop and recreate out of band during a maintenance window and then run store.repairContributions() followed by store.search.rebuildFulltext().",
|
|
443
|
+
"shared-storage-in-use": `Recreate the shared table during a maintenance window with every graph that uses it offline: drop it out of band, then run store.rebuildContribution("fulltext") once per graph on this database. Each run recreates the table from the current DDL and refills that graph's rows from its own nodes.`
|
|
444
|
+
};
|
|
445
|
+
var ContributionRebuildUnsupportedError = class extends TypeGraphError {
|
|
446
|
+
reason;
|
|
447
|
+
constructor(reason, details = {}, options) {
|
|
448
|
+
super(
|
|
449
|
+
CONTRIBUTION_REBUILD_REFUSAL_MESSAGE[reason],
|
|
450
|
+
"CONTRIBUTION_REBUILD_UNSUPPORTED",
|
|
451
|
+
{
|
|
452
|
+
details: { ...details, reason },
|
|
453
|
+
category: "user",
|
|
454
|
+
suggestion: CONTRIBUTION_REBUILD_REFUSAL_SUGGESTION[reason],
|
|
455
|
+
cause: options?.cause
|
|
456
|
+
}
|
|
457
|
+
);
|
|
458
|
+
this.name = "ContributionRebuildUnsupportedError";
|
|
459
|
+
this.reason = reason;
|
|
460
|
+
}
|
|
461
|
+
};
|
|
399
462
|
var GraphAlgorithmConvergenceError = class extends TypeGraphError {
|
|
400
463
|
constructor(algorithm, maxIterations, options = {}) {
|
|
401
464
|
const oscillating = options.oscillating === true;
|
|
@@ -472,6 +535,17 @@ var TrustedImportError = class extends TypeGraphError {
|
|
|
472
535
|
this.name = "TrustedImportError";
|
|
473
536
|
}
|
|
474
537
|
};
|
|
538
|
+
var ExportStreamCancelledError = class extends TypeGraphError {
|
|
539
|
+
constructor(message, details = {}, options) {
|
|
540
|
+
super(message, "INTERCHANGE_EXPORT_STREAM_ABORTED", {
|
|
541
|
+
details,
|
|
542
|
+
category: "user",
|
|
543
|
+
suggestion: options?.suggestion ?? "Start a new export; the aborted one released its snapshot transaction and the connection it held.",
|
|
544
|
+
cause: options?.cause
|
|
545
|
+
});
|
|
546
|
+
this.name = "ExportStreamCancelledError";
|
|
547
|
+
}
|
|
548
|
+
};
|
|
475
549
|
var RECORDED_CAPTURE_GUARD_CODES = [
|
|
476
550
|
"RECORDED_CAPTURE_REQUIRES_CALLBACK_TRANSACTION",
|
|
477
551
|
"RECORDED_CAPTURE_RAW_SQL_DISABLED",
|
|
@@ -618,6 +692,6 @@ function getErrorSuggestion(error) {
|
|
|
618
692
|
return isTypeGraphError(error) ? error.suggestion : void 0;
|
|
619
693
|
}
|
|
620
694
|
|
|
621
|
-
export { BackendDisposedError, CardinalityError, CompilerInvariantError, ConfigurationError, DatabaseOperationError, DisjointError, EagerMaterializationError, EdgeNotFoundError, EmbeddingDimensionChangedError, EndpointError, EndpointNotFoundError, GraphAlgorithmConvergenceError, InvalidEdgeWeightError, KindNotFoundError, MIGRATION_FAILURE_REASONS, MigrationError, NodeConstraintNotFoundError, NodeIndexNotFoundError, NodeNotFoundError, RECORDED_CAPTURE_GUARD_CODES, RestrictedDeleteError, SchemaContentConflictError, SchemaMismatchError, StaleVersionError, StoreNotInitializedError, TransactionClosedError, TrustedImportError, TypeGraphError, UniquenessError, UnsupportedBackendCapabilityError, UnsupportedPredicateError, ValidationError, VersionConflictError, getErrorSuggestion, isConstraintError, isRecordedCaptureGuardError, isSystemError, isTypeGraphError, isUserRecoverable };
|
|
622
|
-
//# sourceMappingURL=chunk-
|
|
623
|
-
//# sourceMappingURL=chunk-
|
|
695
|
+
export { BackendDisposedError, CardinalityError, CompilerInvariantError, ConfigurationError, ContributionRebuildUnsupportedError, DatabaseOperationError, DisjointError, EDGE_IDENTITY_MISMATCH_CODE, ENTITY_ALREADY_EXISTS_CODE, EagerMaterializationError, EdgeNotFoundError, EmbeddingDimensionChangedError, EndpointError, EndpointNotFoundError, ExportStreamCancelledError, GraphAlgorithmConvergenceError, IMMUTABLE_VALIDITY_LOWER_BOUND_CODE, INVERTED_VALIDITY_WINDOW_CODE, IdentityContradictionError, IdentitySeparationViolationError, InvalidEdgeWeightError, KindNotFoundError, MIGRATION_FAILURE_REASONS, MigrationError, NodeConstraintNotFoundError, NodeIndexNotFoundError, NodeNotFoundError, RECORDED_CAPTURE_GUARD_CODES, RestrictedDeleteError, SchemaContentConflictError, SchemaMismatchError, StaleVersionError, StoreNotInitializedError, TransactionClosedError, TrustedImportError, TypeGraphError, UniquenessError, UnsupportedBackendCapabilityError, UnsupportedPredicateError, ValidationError, VersionConflictError, getErrorSuggestion, isConstraintError, isRecordedCaptureGuardError, isSystemError, isTypeGraphError, isUserRecoverable };
|
|
696
|
+
//# sourceMappingURL=chunk-J3WZ3FA2.js.map
|
|
697
|
+
//# sourceMappingURL=chunk-J3WZ3FA2.js.map
|