@nicia-ai/typegraph 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -10
- package/dist/backend/drizzle/indexes.cjs +32 -0
- package/dist/backend/drizzle/indexes.cjs.map +1 -0
- package/dist/backend/drizzle/indexes.d.cts +43 -0
- package/dist/backend/drizzle/indexes.d.ts +43 -0
- package/dist/backend/drizzle/indexes.js +11 -0
- package/dist/backend/drizzle/indexes.js.map +1 -0
- package/dist/backend/index.cjs +161 -0
- package/dist/backend/index.cjs.map +1 -0
- package/dist/backend/index.d.cts +3 -0
- package/dist/backend/index.d.ts +3 -0
- package/dist/backend/index.js +8 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/postgres/index.cjs +32 -28
- package/dist/backend/postgres/index.d.cts +13 -12
- package/dist/backend/postgres/index.d.ts +13 -12
- package/dist/backend/postgres/index.js +19 -15
- package/dist/backend/postgres/pglite-store.cjs +67 -0
- package/dist/backend/postgres/pglite-store.cjs.map +1 -0
- package/dist/backend/postgres/pglite-store.d.cts +38 -0
- package/dist/backend/postgres/pglite-store.d.ts +38 -0
- package/dist/backend/postgres/pglite-store.js +65 -0
- package/dist/backend/postgres/pglite-store.js.map +1 -0
- package/dist/backend/postgres/pglite.cjs +25 -50
- package/dist/backend/postgres/pglite.cjs.map +1 -1
- package/dist/backend/postgres/pglite.d.cts +10 -9
- package/dist/backend/postgres/pglite.d.ts +10 -9
- package/dist/backend/postgres/pglite.js +20 -52
- package/dist/backend/postgres/pglite.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +29 -25
- package/dist/backend/sqlite/index.d.cts +11 -11
- package/dist/backend/sqlite/index.d.ts +11 -11
- package/dist/backend/sqlite/index.js +17 -13
- package/dist/backend/sqlite/libsql.cjs +23 -19
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +9 -10
- package/dist/backend/sqlite/libsql.d.ts +9 -10
- package/dist/backend/sqlite/libsql.js +19 -15
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +72 -0
- package/dist/backend/sqlite/local-store.cjs.map +1 -0
- package/dist/backend/sqlite/local-store.d.cts +42 -0
- package/dist/backend/sqlite/local-store.d.ts +42 -0
- package/dist/backend/sqlite/local-store.js +67 -0
- package/dist/backend/sqlite/local-store.js.map +1 -0
- package/dist/backend/sqlite/local.cjs +28 -183
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +8 -81
- package/dist/backend/sqlite/local.d.ts +8 -81
- package/dist/backend/sqlite/local.js +20 -180
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/chunk-2EBMPJBO.js +16 -0
- package/dist/chunk-2EBMPJBO.js.map +1 -0
- package/dist/{chunk-NBP2WTJW.cjs → chunk-2SL7OGPR.cjs} +2900 -1597
- package/dist/chunk-2SL7OGPR.cjs.map +1 -0
- package/dist/chunk-35S6P5ZU.js +27 -0
- package/dist/chunk-35S6P5ZU.js.map +1 -0
- package/dist/chunk-3LKL3S6X.js +50 -0
- package/dist/chunk-3LKL3S6X.js.map +1 -0
- package/dist/chunk-6G5CQ6JX.js +47 -0
- package/dist/chunk-6G5CQ6JX.js.map +1 -0
- package/dist/chunk-6XDBRDZE.js +312 -0
- package/dist/chunk-6XDBRDZE.js.map +1 -0
- package/dist/chunk-764JHTLT.cjs +15 -0
- package/dist/chunk-764JHTLT.cjs.map +1 -0
- package/dist/chunk-76HE7DJP.js +68 -0
- package/dist/chunk-76HE7DJP.js.map +1 -0
- package/dist/{chunk-VGDDG3XJ.cjs → chunk-7M3NACL3.cjs} +12 -12
- package/dist/{chunk-VGDDG3XJ.cjs.map → chunk-7M3NACL3.cjs.map} +1 -1
- package/dist/{chunk-NXQFATMF.cjs → chunk-7VLCN3JB.cjs} +153 -123
- package/dist/chunk-7VLCN3JB.cjs.map +1 -0
- package/dist/{chunk-552KNYQJ.js → chunk-A2FGSWMQ.js} +1907 -607
- package/dist/chunk-A2FGSWMQ.js.map +1 -0
- package/dist/chunk-AOL64O4Z.js +165 -0
- package/dist/chunk-AOL64O4Z.js.map +1 -0
- package/dist/{chunk-27SSDCEP.cjs → chunk-B63IFHXR.cjs} +53 -74
- package/dist/chunk-B63IFHXR.cjs.map +1 -0
- package/dist/{chunk-3XXGYU62.cjs → chunk-BKAKAVRW.cjs} +56 -53
- package/dist/chunk-BKAKAVRW.cjs.map +1 -0
- package/dist/{chunk-YTSN73ND.js → chunk-BQITNFQJ.js} +3 -3
- package/dist/{chunk-YTSN73ND.js.map → chunk-BQITNFQJ.js.map} +1 -1
- package/dist/{chunk-NUIG3BCV.cjs → chunk-CQC6VBAF.cjs} +93 -155
- package/dist/chunk-CQC6VBAF.cjs.map +1 -0
- package/dist/{chunk-6EEO3OVU.cjs → chunk-CWX77JB4.cjs} +22 -59
- package/dist/chunk-CWX77JB4.cjs.map +1 -0
- package/dist/{chunk-UGZUAYAR.js → chunk-D7PG5D5K.js} +4 -3
- package/dist/chunk-D7PG5D5K.js.map +1 -0
- package/dist/chunk-DDCIXXOO.js +9 -0
- package/dist/chunk-DDCIXXOO.js.map +1 -0
- package/dist/chunk-DDCYVIVV.cjs +44 -0
- package/dist/chunk-DDCYVIVV.cjs.map +1 -0
- package/dist/{chunk-XPCZADMT.cjs → chunk-DOVMTPKE.cjs} +89 -27
- package/dist/chunk-DOVMTPKE.cjs.map +1 -0
- package/dist/{chunk-5PNMDJ7J.js → chunk-DPNA466P.js} +14 -9
- package/dist/chunk-DPNA466P.js.map +1 -0
- package/dist/{chunk-BYPOGQWK.js → chunk-DRACN6XG.js} +6 -4
- package/dist/chunk-DRACN6XG.js.map +1 -0
- package/dist/chunk-E6TXEISH.cjs +175 -0
- package/dist/chunk-E6TXEISH.cjs.map +1 -0
- package/dist/{chunk-TKT2XHED.js → chunk-E6YZRKMM.js} +13 -12
- package/dist/chunk-E6YZRKMM.js.map +1 -0
- package/dist/{chunk-3C2RYI6L.cjs → chunk-EOJFGECD.cjs} +11 -11
- package/dist/chunk-EOJFGECD.cjs.map +1 -0
- package/dist/{chunk-XWV4JT34.js → chunk-ERZ4QPQX.js} +27 -22
- package/dist/chunk-ERZ4QPQX.js.map +1 -0
- package/dist/{chunk-DFVLCOP6.js → chunk-EZH7FNUS.js} +3 -3
- package/dist/{chunk-DFVLCOP6.js.map → chunk-EZH7FNUS.js.map} +1 -1
- package/dist/{chunk-WWFHO375.cjs → chunk-FJMPR3OH.cjs} +4 -3
- package/dist/chunk-FJMPR3OH.cjs.map +1 -0
- package/dist/chunk-FMNUSGZ4.cjs +12 -0
- package/dist/chunk-FMNUSGZ4.cjs.map +1 -0
- package/dist/{chunk-K3Q3LJY3.js → chunk-G32AO634.js} +201 -100
- package/dist/chunk-G32AO634.js.map +1 -0
- package/dist/{chunk-EXU3RASM.js → chunk-G3CSQLLT.js} +20 -474
- package/dist/chunk-G3CSQLLT.js.map +1 -0
- package/dist/chunk-GNPGGLAE.cjs +212 -0
- package/dist/chunk-GNPGGLAE.cjs.map +1 -0
- package/dist/{chunk-QARBLBXT.cjs → chunk-GUUWKPTK.cjs} +7 -7
- package/dist/{chunk-QARBLBXT.cjs.map → chunk-GUUWKPTK.cjs.map} +1 -1
- package/dist/chunk-GYA4JRP5.js +31 -0
- package/dist/chunk-GYA4JRP5.js.map +1 -0
- package/dist/chunk-I6FX7AAG.js +39 -0
- package/dist/chunk-I6FX7AAG.js.map +1 -0
- package/dist/chunk-IMQKXL4E.cjs +12 -0
- package/dist/{chunk-QSXTWU4U.cjs.map → chunk-IMQKXL4E.cjs.map} +1 -1
- package/dist/chunk-J6IJARLG.js +94 -0
- package/dist/chunk-J6IJARLG.js.map +1 -0
- package/dist/{chunk-W63OVYY4.js → chunk-K34OPSJK.js} +3 -3
- package/dist/{chunk-W63OVYY4.js.map → chunk-K34OPSJK.js.map} +1 -1
- package/dist/{chunk-TGOMW4MB.cjs → chunk-KCLZHYPU.cjs} +110 -109
- package/dist/chunk-KCLZHYPU.cjs.map +1 -0
- package/dist/{chunk-XGPUQ56G.js → chunk-KFLXWVUJ.js} +4 -38
- package/dist/chunk-KFLXWVUJ.js.map +1 -0
- package/dist/{chunk-3DS7Z4T4.cjs → chunk-LZ3TVJY4.cjs} +44 -43
- package/dist/chunk-LZ3TVJY4.cjs.map +1 -0
- package/dist/{chunk-UXLSNRYL.js → chunk-MTNEGGM2.js} +4 -4
- package/dist/chunk-MTNEGGM2.js.map +1 -0
- package/dist/{chunk-IP3CGGPA.cjs → chunk-N2V3HJFV.cjs} +92 -185
- package/dist/chunk-N2V3HJFV.cjs.map +1 -0
- package/dist/chunk-NAUA4PW5.cjs +28 -0
- package/dist/chunk-NAUA4PW5.cjs.map +1 -0
- package/dist/chunk-NMQ6C6TS.cjs +61 -0
- package/dist/chunk-NMQ6C6TS.cjs.map +1 -0
- package/dist/{chunk-2N6EOBTH.cjs → chunk-NPWACFQJ.cjs} +58 -53
- package/dist/chunk-NPWACFQJ.cjs.map +1 -0
- package/dist/{chunk-5KEQ74YU.cjs → chunk-NT6ILURI.cjs} +9 -86
- package/dist/chunk-NT6ILURI.cjs.map +1 -0
- package/dist/chunk-NU23DUSJ.cjs +192 -0
- package/dist/chunk-NU23DUSJ.cjs.map +1 -0
- package/dist/{chunk-WOJMKB3N.cjs → chunk-NWYCOFEZ.cjs} +1677 -308
- package/dist/chunk-NWYCOFEZ.cjs.map +1 -0
- package/dist/{chunk-3GH67G4Z.cjs → chunk-O5H62ZWJ.cjs} +4 -42
- package/dist/chunk-O5H62ZWJ.cjs.map +1 -0
- package/dist/{chunk-3SLPDKHQ.js → chunk-PH4IJ3V5.js} +5 -77
- package/dist/chunk-PH4IJ3V5.js.map +1 -0
- package/dist/chunk-PWXGB77L.cjs +56 -0
- package/dist/chunk-PWXGB77L.cjs.map +1 -0
- package/dist/chunk-PZHC5GCD.js +193 -0
- package/dist/chunk-PZHC5GCD.js.map +1 -0
- package/dist/chunk-QMQLUA66.js +12 -0
- package/dist/chunk-QMQLUA66.js.map +1 -0
- package/dist/{chunk-5WWVZMVX.js → chunk-QZ7A6HBM.js} +2 -2
- package/dist/{chunk-5WWVZMVX.js.map → chunk-QZ7A6HBM.js.map} +1 -1
- package/dist/{chunk-VKGKDOKR.js → chunk-RQPRCEIO.js} +1539 -206
- package/dist/chunk-RQPRCEIO.js.map +1 -0
- package/dist/chunk-RW24SAHI.cjs +74 -0
- package/dist/chunk-RW24SAHI.cjs.map +1 -0
- package/dist/{chunk-BVRDGYXQ.cjs → chunk-SAFZ6JTI.cjs} +14 -9
- package/dist/chunk-SAFZ6JTI.cjs.map +1 -0
- package/dist/{chunk-L7HQ2OSI.js → chunk-SCTZRFW5.js} +87 -166
- package/dist/chunk-SCTZRFW5.js.map +1 -0
- package/dist/{chunk-5KPNWT6X.js → chunk-SDHV2MWU.js} +24 -45
- package/dist/chunk-SDHV2MWU.js.map +1 -0
- package/dist/chunk-SVJ5GEXW.cjs +45 -0
- package/dist/chunk-SVJ5GEXW.cjs.map +1 -0
- package/dist/chunk-SVUKGWSN.cjs +102 -0
- package/dist/chunk-SVUKGWSN.cjs.map +1 -0
- package/dist/chunk-TAUGGLNQ.js +59 -0
- package/dist/chunk-TAUGGLNQ.js.map +1 -0
- package/dist/{chunk-J4IUSYFF.js → chunk-TE5ZA4VX.js} +69 -27
- package/dist/chunk-TE5ZA4VX.js.map +1 -0
- package/dist/{chunk-A42GCBGX.cjs → chunk-TRF4EBJT.cjs} +6 -4
- package/dist/chunk-TRF4EBJT.cjs.map +1 -0
- package/dist/{chunk-KQJ54OG5.js → chunk-U4JDJKPD.js} +19 -56
- package/dist/chunk-U4JDJKPD.js.map +1 -0
- package/dist/chunk-UH2USOMG.cjs +627 -0
- package/dist/chunk-UH2USOMG.cjs.map +1 -0
- package/dist/{chunk-RCVLFTCT.js → chunk-UPXDVI3T.js} +13 -12
- package/dist/chunk-UPXDVI3T.js.map +1 -0
- package/dist/{chunk-5VQM6VWP.cjs → chunk-UWG5GX6E.cjs} +2 -2
- package/dist/{chunk-5VQM6VWP.cjs.map → chunk-UWG5GX6E.cjs.map} +1 -1
- package/dist/{chunk-3RWZPJKV.js → chunk-VBH7ZXSZ.js} +21 -78
- package/dist/chunk-VBH7ZXSZ.js.map +1 -0
- package/dist/{chunk-K5UBVGJN.js → chunk-VDYA2HMS.js} +6 -6
- package/dist/{chunk-K5UBVGJN.js.map → chunk-VDYA2HMS.js.map} +1 -1
- package/dist/chunk-X4PVHAZ6.cjs +83 -0
- package/dist/chunk-X4PVHAZ6.cjs.map +1 -0
- package/dist/{chunk-UYQMBBWJ.js → chunk-X6CNEA32.js} +23 -20
- package/dist/chunk-X6CNEA32.js.map +1 -0
- package/dist/chunk-X6RDQ5NB.cjs +335 -0
- package/dist/chunk-X6RDQ5NB.cjs.map +1 -0
- package/dist/chunk-XD6X7O5R.js +184 -0
- package/dist/chunk-XD6X7O5R.js.map +1 -0
- package/dist/{chunk-DIQ3AV5W.cjs → chunk-XFY73JWD.cjs} +324 -224
- package/dist/chunk-XFY73JWD.cjs.map +1 -0
- package/dist/{chunk-DEFQM7JU.cjs → chunk-XRU7V7FF.cjs} +7 -7
- package/dist/{chunk-DEFQM7JU.cjs.map → chunk-XRU7V7FF.cjs.map} +1 -1
- package/dist/{chunk-TPF25IG6.js → chunk-XZA3Y4YH.js} +3 -3
- package/dist/{chunk-TPF25IG6.js.map → chunk-XZA3Y4YH.js.map} +1 -1
- package/dist/chunk-Y7M44XEK.js +462 -0
- package/dist/chunk-Y7M44XEK.js.map +1 -0
- package/dist/{chunk-RRSNR3TP.js → chunk-YIRLBUNN.js} +3 -3
- package/dist/{chunk-RRSNR3TP.js.map → chunk-YIRLBUNN.js.map} +1 -1
- package/dist/{chunk-IXGYRP2P.js → chunk-YJDSPA5E.js} +79 -49
- package/dist/chunk-YJDSPA5E.js.map +1 -0
- package/dist/{chunk-JBNOGRKW.cjs → chunk-YLINFV7Z.cjs} +157 -115
- package/dist/chunk-YLINFV7Z.cjs.map +1 -0
- package/dist/{chunk-QERAIDRJ.js → chunk-Z2PPIVOO.js} +82 -22
- package/dist/chunk-Z2PPIVOO.js.map +1 -0
- package/dist/chunk-Z5QHVL5U.cjs +12 -0
- package/dist/chunk-Z5QHVL5U.cjs.map +1 -0
- package/dist/chunk-ZDH3DX3C.cjs +30 -0
- package/dist/chunk-ZDH3DX3C.cjs.map +1 -0
- package/dist/chunk-ZE6NVENI.js +77 -0
- package/dist/chunk-ZE6NVENI.js.map +1 -0
- package/dist/chunk-ZHX4KEM7.cjs +49 -0
- package/dist/chunk-ZHX4KEM7.cjs.map +1 -0
- package/dist/chunk-ZKZAIX42.cjs +479 -0
- package/dist/chunk-ZKZAIX42.cjs.map +1 -0
- package/dist/{chunk-TEDRJXOG.cjs → chunk-ZY4GXIVN.cjs} +5 -5
- package/dist/{chunk-TEDRJXOG.cjs.map → chunk-ZY4GXIVN.cjs.map} +1 -1
- package/dist/core/index.cjs +117 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +225 -0
- package/dist/core/index.d.ts +225 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/{ddl-CS0KUVwB.d.ts → ddl-Dx3Z0_WC.d.ts} +3 -3
- package/dist/{ddl-BD-ZfKeX.d.cts → ddl-J6sDyABg.d.cts} +3 -3
- package/dist/define-graph-CzEvA_8F.d.cts +174 -0
- package/dist/define-graph-DRo9xpYN.d.ts +174 -0
- package/dist/{extension-types-BM2ACfYO.d.cts → extension-types-BLEVH4SG.d.cts} +1 -1
- package/dist/{extension-types-BM2ACfYO.d.ts → extension-types-BLEVH4SG.d.ts} +1 -1
- package/dist/graph-extension/index.cjs +21 -19
- package/dist/graph-extension/index.d.cts +4 -4
- package/dist/graph-extension/index.d.ts +4 -4
- package/dist/graph-extension/index.js +6 -4
- package/dist/graph-merge/index.cjs +265 -214
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +8 -89
- package/dist/graph-merge/index.d.ts +8 -89
- package/dist/graph-merge/index.js +141 -90
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-BeacbPoe.d.ts → index-BD_3TCgh.d.ts} +6 -4
- package/dist/{index-BPM59vsg.d.cts → index-BihFPsPu.d.cts} +6 -4
- package/dist/{fulltext-strategy-C27vXaeB.d.cts → index-Bq7vSPHy.d.ts} +3195 -2646
- package/dist/{fulltext-strategy-DebsMrqg.d.ts → index-CrFL_ENI.d.cts} +3195 -2646
- package/dist/index.cjs +326 -315
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +59 -240
- package/dist/index.d.ts +59 -240
- package/dist/index.js +46 -79
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +26 -38
- package/dist/indexes/index.d.cts +6 -41
- package/dist/indexes/index.d.ts +6 -41
- package/dist/indexes/index.js +14 -10
- package/dist/interchange/index.cjs +48 -39
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +7 -8
- package/dist/interchange/index.d.ts +7 -8
- package/dist/interchange/index.js +23 -14
- package/dist/interchange/index.js.map +1 -1
- package/dist/local-options-CZ1BnIoF.d.cts +29 -0
- package/dist/local-options-CZ1BnIoF.d.ts +29 -0
- package/dist/{manager-D00_NXvT.d.ts → manager-CASfhmzV.d.ts} +4 -173
- package/dist/{manager-nU1vTJLy.d.cts → manager-nCEJiYBb.d.cts} +4 -173
- package/dist/{materialize-indexes-zK2J_flP.d.ts → materialize-indexes-D4iei4Kp.d.ts} +1 -1
- package/dist/{materialize-indexes-CuR3gAZb.d.cts → materialize-indexes-ExQ6OrAh.d.cts} +1 -1
- package/dist/{postgres-IaBA4RgE.d.ts → postgres-Cl1ZAN1G.d.ts} +1 -1
- package/dist/{postgres-YrYmPlaU.d.cts → postgres-DMgIKQU-.d.cts} +1 -1
- package/dist/postgres-execution-fKW0qRiN.d.cts +14 -0
- package/dist/postgres-execution-fKW0qRiN.d.ts +14 -0
- package/dist/profiler/index.cjs +9 -8
- package/dist/profiler/index.cjs.map +1 -1
- package/dist/profiler/index.d.cts +9 -17
- package/dist/profiler/index.d.ts +9 -17
- package/dist/profiler/index.js +8 -7
- package/dist/profiler/index.js.map +1 -1
- package/dist/provenance/index.cjs +61 -55
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +7 -8
- package/dist/provenance/index.d.ts +7 -8
- package/dist/provenance/index.js +34 -28
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +46 -37
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +8 -10
- package/dist/schema/index.d.ts +8 -10
- package/dist/schema/index.js +22 -13
- package/dist/schema/index.js.map +1 -1
- package/dist/{sqlite-BUOHPx7p.d.ts → sqlite-BDkW39aa.d.cts} +1 -1
- package/dist/{sqlite-Pp8O19WE.d.cts → sqlite-CYfhvESj.d.ts} +1 -1
- package/dist/sqlite-execution-DwbE2a9y.d.cts +32 -0
- package/dist/sqlite-execution-DwbE2a9y.d.ts +32 -0
- package/dist/{store-view-X96Rd00T.d.cts → store-view-BoHqdHjB.d.cts} +394 -1393
- package/dist/{store-view-ANL6mTph.d.ts → store-view-Ctq-3OHy.d.ts} +394 -1393
- package/dist/temporal-BC_NQV5Y.d.cts +281 -0
- package/dist/temporal-DqtOEo_B.d.ts +281 -0
- package/dist/{types-r-Zyq2Hz.d.cts → types-COq3-vMC.d.cts} +2 -2
- package/dist/{types-wsvuBgPK.d.ts → types-CUevi_D1.d.ts} +2 -2
- package/dist/{where-CJOpJj3a.d.ts → where-BdE_cYtx.d.ts} +5 -5
- package/dist/{where-K3uBP33l.d.cts → where-C92TXCzT.d.cts} +5 -5
- package/package.json +37 -6
- package/dist/chunk-27SSDCEP.cjs.map +0 -1
- package/dist/chunk-2N6EOBTH.cjs.map +0 -1
- package/dist/chunk-3C2RYI6L.cjs.map +0 -1
- package/dist/chunk-3DS7Z4T4.cjs.map +0 -1
- package/dist/chunk-3GH67G4Z.cjs.map +0 -1
- package/dist/chunk-3RWZPJKV.js.map +0 -1
- package/dist/chunk-3SLPDKHQ.js.map +0 -1
- package/dist/chunk-3XXGYU62.cjs.map +0 -1
- package/dist/chunk-44TA22QT.js +0 -1478
- package/dist/chunk-44TA22QT.js.map +0 -1
- package/dist/chunk-552KNYQJ.js.map +0 -1
- package/dist/chunk-5KEQ74YU.cjs.map +0 -1
- package/dist/chunk-5KPNWT6X.js.map +0 -1
- package/dist/chunk-5PNMDJ7J.js.map +0 -1
- package/dist/chunk-6EEO3OVU.cjs.map +0 -1
- package/dist/chunk-7YSP4V4R.cjs +0 -69
- package/dist/chunk-7YSP4V4R.cjs.map +0 -1
- package/dist/chunk-A42GCBGX.cjs.map +0 -1
- package/dist/chunk-BVRDGYXQ.cjs.map +0 -1
- package/dist/chunk-BYPOGQWK.js.map +0 -1
- package/dist/chunk-CUHM5CWJ.cjs +0 -12
- package/dist/chunk-CUHM5CWJ.cjs.map +0 -1
- package/dist/chunk-DIQ3AV5W.cjs.map +0 -1
- package/dist/chunk-EXU3RASM.js.map +0 -1
- package/dist/chunk-IP3CGGPA.cjs.map +0 -1
- package/dist/chunk-IPSVVTWT.cjs +0 -1540
- package/dist/chunk-IPSVVTWT.cjs.map +0 -1
- package/dist/chunk-IXGYRP2P.js.map +0 -1
- package/dist/chunk-J4IUSYFF.js.map +0 -1
- package/dist/chunk-JBNOGRKW.cjs.map +0 -1
- package/dist/chunk-K3Q3LJY3.js.map +0 -1
- package/dist/chunk-KQJ54OG5.js.map +0 -1
- package/dist/chunk-L7HQ2OSI.js.map +0 -1
- package/dist/chunk-M6VES7V6.js +0 -239
- package/dist/chunk-M6VES7V6.js.map +0 -1
- package/dist/chunk-NBP2WTJW.cjs.map +0 -1
- package/dist/chunk-NUIG3BCV.cjs.map +0 -1
- package/dist/chunk-NXQFATMF.cjs.map +0 -1
- package/dist/chunk-OHMP6N2J.js +0 -47
- package/dist/chunk-OHMP6N2J.js.map +0 -1
- package/dist/chunk-QERAIDRJ.js.map +0 -1
- package/dist/chunk-QSXTWU4U.cjs +0 -12
- package/dist/chunk-RCVLFTCT.js.map +0 -1
- package/dist/chunk-TGOMW4MB.cjs.map +0 -1
- package/dist/chunk-TKT2XHED.js.map +0 -1
- package/dist/chunk-UGZUAYAR.js.map +0 -1
- package/dist/chunk-UXLSNRYL.js.map +0 -1
- package/dist/chunk-UYQMBBWJ.js.map +0 -1
- package/dist/chunk-VKGKDOKR.js.map +0 -1
- package/dist/chunk-VL2V6PEN.cjs +0 -261
- package/dist/chunk-VL2V6PEN.cjs.map +0 -1
- package/dist/chunk-WOJMKB3N.cjs.map +0 -1
- package/dist/chunk-WWFHO375.cjs.map +0 -1
- package/dist/chunk-XGPUQ56G.js.map +0 -1
- package/dist/chunk-XGU7DZDA.cjs +0 -1095
- package/dist/chunk-XGU7DZDA.cjs.map +0 -1
- package/dist/chunk-XPCZADMT.cjs.map +0 -1
- package/dist/chunk-XWV4JT34.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSAFZ6JTI_cjs = require('./chunk-SAFZ6JTI.cjs');
|
|
4
4
|
|
|
5
5
|
// src/store/reserved-keys.ts
|
|
6
6
|
var RESERVED_NODE_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -32,7 +32,7 @@ function assertSchemaKeysAreFree(entityKind, name, keys, reservedStructuralKeys)
|
|
|
32
32
|
);
|
|
33
33
|
if (structuralConflicts.length > 0) {
|
|
34
34
|
const label = entityKind.toLowerCase();
|
|
35
|
-
throw new
|
|
35
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
36
36
|
`${entityKind} "${name}" schema contains reserved property names: ${structuralConflicts.join(", ")}`,
|
|
37
37
|
{
|
|
38
38
|
[`${label}Type`]: name,
|
|
@@ -47,7 +47,7 @@ function assertSchemaKeysAreFree(entityKind, name, keys, reservedStructuralKeys)
|
|
|
47
47
|
const prefixConflicts = keys.filter((key) => isReservedPropertyName(key));
|
|
48
48
|
if (prefixConflicts.length > 0) {
|
|
49
49
|
const label = entityKind.toLowerCase();
|
|
50
|
-
throw new
|
|
50
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
51
51
|
`${entityKind} "${name}" schema uses the reserved "${RESERVED_PROPERTY_PREFIX}" prefix on: ${prefixConflicts.join(", ")}`,
|
|
52
52
|
{
|
|
53
53
|
[`${label}Type`]: name,
|
|
@@ -63,7 +63,7 @@ function assertSchemaKeysAreFree(entityKind, name, keys, reservedStructuralKeys)
|
|
|
63
63
|
function validateProjectionField(field, entityType, kind) {
|
|
64
64
|
const reserved = entityType === "node" ? RESERVED_NODE_KEYS : RESERVED_EDGE_KEYS;
|
|
65
65
|
if (reserved.has(field)) {
|
|
66
|
-
throw new
|
|
66
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
67
67
|
`Projection field "${field}" on ${entityType} kind "${kind}" conflicts with a reserved structural key`,
|
|
68
68
|
{ field, kind, entityType, reservedKeys: [...reserved] },
|
|
69
69
|
{
|
|
@@ -72,7 +72,7 @@ function validateProjectionField(field, entityType, kind) {
|
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
74
|
if (PROTOTYPE_POLLUTION_KEYS.has(field)) {
|
|
75
|
-
throw new
|
|
75
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
76
76
|
`Projection field "${field}" on ${entityType} kind "${kind}" is not allowed`,
|
|
77
77
|
{ field, kind, entityType },
|
|
78
78
|
{
|
|
@@ -96,5 +96,5 @@ exports.RESERVED_NODE_KEYS = RESERVED_NODE_KEYS;
|
|
|
96
96
|
exports.assertSchemaKeysAreFree = assertSchemaKeysAreFree;
|
|
97
97
|
exports.filterReservedKeys = filterReservedKeys;
|
|
98
98
|
exports.validateProjectionField = validateProjectionField;
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
100
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-XRU7V7FF.cjs.map
|
|
100
|
+
//# sourceMappingURL=chunk-XRU7V7FF.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store/reserved-keys.ts"],"names":["ConfigurationError"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/store/reserved-keys.ts"],"names":["ConfigurationError"],"mappings":"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","file":"chunk-XRU7V7FF.cjs","sourcesContent":["/**\n * Reserved Keys for Store Entities\n *\n * Structural keys that cannot be overwritten by user-defined properties.\n * Shared across row-mappers, subgraph projection, and schema validation.\n */\nimport type { KindEntity } from \"../core/types\";\nimport { ConfigurationError } from \"../errors\";\n\nexport const RESERVED_NODE_KEYS: ReadonlySet<string> = new Set([\n \"id\",\n \"kind\",\n \"meta\",\n]);\n\nexport const RESERVED_EDGE_KEYS: ReadonlySet<string> = new Set([\n \"id\",\n \"kind\",\n \"meta\",\n \"fromKind\",\n \"fromId\",\n \"toKind\",\n \"toId\",\n]);\n\nconst PROTOTYPE_POLLUTION_KEYS: ReadonlySet<string> = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/**\n * Properties starting with `$` are reserved for TypeGraph-owned accessors\n * on the query-builder node/edge proxies (today: `$fulltext`). Reserving\n * the whole prefix — not just the currently-used names — keeps future\n * accessors (e.g. `$vector`, `$json`) from colliding with user fields.\n */\nconst RESERVED_PROPERTY_PREFIX = \"$\";\n\n/**\n * True if a user-defined field name is reserved by TypeGraph's accessor\n * namespace. `defineNode` / `defineEdge` call this against schema keys so\n * the collision fails fast at graph-definition time rather than silently\n * at query time.\n */\nfunction isReservedPropertyName(name: string): boolean {\n return name.startsWith(RESERVED_PROPERTY_PREFIX);\n}\n\n/**\n * Validates that a node or edge schema does not use any reserved property\n * name. Covers both the structural keys (`id`, `kind`, etc.) and the\n * `$`-prefix accessor namespace. Throws a single `ConfigurationError`\n * per conflict class so the user sees all collisions in one pass.\n */\nexport function assertSchemaKeysAreFree(\n entityKind: \"Node\" | \"Edge\",\n name: string,\n keys: readonly string[],\n reservedStructuralKeys: ReadonlySet<string>,\n): void {\n const structuralConflicts = keys.filter((key) =>\n reservedStructuralKeys.has(key),\n );\n if (structuralConflicts.length > 0) {\n const label = entityKind.toLowerCase();\n throw new ConfigurationError(\n `${entityKind} \"${name}\" schema contains reserved property names: ${structuralConflicts.join(\", \")}`,\n {\n [`${label}Type`]: name,\n conflicts: structuralConflicts,\n reservedKeys: [...reservedStructuralKeys],\n },\n {\n suggestion: `Rename the conflicting properties. Reserved names (${[...reservedStructuralKeys].join(\", \")}) are added automatically to all ${label}s.`,\n },\n );\n }\n\n const prefixConflicts = keys.filter((key) => isReservedPropertyName(key));\n if (prefixConflicts.length > 0) {\n const label = entityKind.toLowerCase();\n throw new ConfigurationError(\n `${entityKind} \"${name}\" schema uses the reserved \"${RESERVED_PROPERTY_PREFIX}\" prefix on: ${prefixConflicts.join(\", \")}`,\n {\n [`${label}Type`]: name,\n conflicts: prefixConflicts,\n reservedPrefix: RESERVED_PROPERTY_PREFIX,\n },\n {\n suggestion: `Property names starting with \"${RESERVED_PROPERTY_PREFIX}\" are reserved for TypeGraph accessors (e.g. $fulltext). Rename each field.`,\n },\n );\n }\n}\n\n/**\n * Validates that a projection field name is safe to assign onto a result object.\n * Rejects reserved structural keys and prototype-pollution vectors.\n *\n * @throws ConfigurationError if the field is reserved or dangerous\n */\nexport function validateProjectionField(\n field: string,\n entityType: KindEntity,\n kind: string,\n): void {\n const reserved =\n entityType === \"node\" ? RESERVED_NODE_KEYS : RESERVED_EDGE_KEYS;\n\n if (reserved.has(field)) {\n throw new ConfigurationError(\n `Projection field \"${field}\" on ${entityType} kind \"${kind}\" conflicts with a reserved structural key`,\n { field, kind, entityType, reservedKeys: [...reserved] },\n {\n suggestion: `Remove \"${field}\" from the projection. Structural fields (${[...reserved].join(\", \")}) are included automatically when relevant.`,\n },\n );\n }\n\n if (PROTOTYPE_POLLUTION_KEYS.has(field)) {\n throw new ConfigurationError(\n `Projection field \"${field}\" on ${entityType} kind \"${kind}\" is not allowed`,\n { field, kind, entityType },\n {\n suggestion: `\"${field}\" cannot be used as a projection field name.`,\n },\n );\n }\n}\n\n/**\n * Filters out reserved keys from a props object to prevent runtime collisions.\n */\nexport function filterReservedKeys(\n props: Record<string, unknown>,\n reservedKeys: ReadonlySet<string>,\n): Record<string, unknown> {\n const filtered: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n if (!reservedKeys.has(key)) {\n filtered[key] = value;\n }\n }\n return filtered;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConfigurationError } from './chunk-
|
|
1
|
+
import { ConfigurationError } from './chunk-DPNA466P.js';
|
|
2
2
|
|
|
3
3
|
// src/store/reserved-keys.ts
|
|
4
4
|
var RESERVED_NODE_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -90,5 +90,5 @@ function filterReservedKeys(props, reservedKeys) {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
export { RESERVED_EDGE_KEYS, RESERVED_NODE_KEYS, assertSchemaKeysAreFree, filterReservedKeys, validateProjectionField };
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
93
|
+
//# sourceMappingURL=chunk-XZA3Y4YH.js.map
|
|
94
|
+
//# sourceMappingURL=chunk-XZA3Y4YH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store/reserved-keys.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/store/reserved-keys.ts"],"names":[],"mappings":"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","file":"chunk-XZA3Y4YH.js","sourcesContent":["/**\n * Reserved Keys for Store Entities\n *\n * Structural keys that cannot be overwritten by user-defined properties.\n * Shared across row-mappers, subgraph projection, and schema validation.\n */\nimport type { KindEntity } from \"../core/types\";\nimport { ConfigurationError } from \"../errors\";\n\nexport const RESERVED_NODE_KEYS: ReadonlySet<string> = new Set([\n \"id\",\n \"kind\",\n \"meta\",\n]);\n\nexport const RESERVED_EDGE_KEYS: ReadonlySet<string> = new Set([\n \"id\",\n \"kind\",\n \"meta\",\n \"fromKind\",\n \"fromId\",\n \"toKind\",\n \"toId\",\n]);\n\nconst PROTOTYPE_POLLUTION_KEYS: ReadonlySet<string> = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/**\n * Properties starting with `$` are reserved for TypeGraph-owned accessors\n * on the query-builder node/edge proxies (today: `$fulltext`). Reserving\n * the whole prefix — not just the currently-used names — keeps future\n * accessors (e.g. `$vector`, `$json`) from colliding with user fields.\n */\nconst RESERVED_PROPERTY_PREFIX = \"$\";\n\n/**\n * True if a user-defined field name is reserved by TypeGraph's accessor\n * namespace. `defineNode` / `defineEdge` call this against schema keys so\n * the collision fails fast at graph-definition time rather than silently\n * at query time.\n */\nfunction isReservedPropertyName(name: string): boolean {\n return name.startsWith(RESERVED_PROPERTY_PREFIX);\n}\n\n/**\n * Validates that a node or edge schema does not use any reserved property\n * name. Covers both the structural keys (`id`, `kind`, etc.) and the\n * `$`-prefix accessor namespace. Throws a single `ConfigurationError`\n * per conflict class so the user sees all collisions in one pass.\n */\nexport function assertSchemaKeysAreFree(\n entityKind: \"Node\" | \"Edge\",\n name: string,\n keys: readonly string[],\n reservedStructuralKeys: ReadonlySet<string>,\n): void {\n const structuralConflicts = keys.filter((key) =>\n reservedStructuralKeys.has(key),\n );\n if (structuralConflicts.length > 0) {\n const label = entityKind.toLowerCase();\n throw new ConfigurationError(\n `${entityKind} \"${name}\" schema contains reserved property names: ${structuralConflicts.join(\", \")}`,\n {\n [`${label}Type`]: name,\n conflicts: structuralConflicts,\n reservedKeys: [...reservedStructuralKeys],\n },\n {\n suggestion: `Rename the conflicting properties. Reserved names (${[...reservedStructuralKeys].join(\", \")}) are added automatically to all ${label}s.`,\n },\n );\n }\n\n const prefixConflicts = keys.filter((key) => isReservedPropertyName(key));\n if (prefixConflicts.length > 0) {\n const label = entityKind.toLowerCase();\n throw new ConfigurationError(\n `${entityKind} \"${name}\" schema uses the reserved \"${RESERVED_PROPERTY_PREFIX}\" prefix on: ${prefixConflicts.join(\", \")}`,\n {\n [`${label}Type`]: name,\n conflicts: prefixConflicts,\n reservedPrefix: RESERVED_PROPERTY_PREFIX,\n },\n {\n suggestion: `Property names starting with \"${RESERVED_PROPERTY_PREFIX}\" are reserved for TypeGraph accessors (e.g. $fulltext). Rename each field.`,\n },\n );\n }\n}\n\n/**\n * Validates that a projection field name is safe to assign onto a result object.\n * Rejects reserved structural keys and prototype-pollution vectors.\n *\n * @throws ConfigurationError if the field is reserved or dangerous\n */\nexport function validateProjectionField(\n field: string,\n entityType: KindEntity,\n kind: string,\n): void {\n const reserved =\n entityType === \"node\" ? RESERVED_NODE_KEYS : RESERVED_EDGE_KEYS;\n\n if (reserved.has(field)) {\n throw new ConfigurationError(\n `Projection field \"${field}\" on ${entityType} kind \"${kind}\" conflicts with a reserved structural key`,\n { field, kind, entityType, reservedKeys: [...reserved] },\n {\n suggestion: `Remove \"${field}\" from the projection. Structural fields (${[...reserved].join(\", \")}) are included automatically when relevant.`,\n },\n );\n }\n\n if (PROTOTYPE_POLLUTION_KEYS.has(field)) {\n throw new ConfigurationError(\n `Projection field \"${field}\" on ${entityType} kind \"${kind}\" is not allowed`,\n { field, kind, entityType },\n {\n suggestion: `\"${field}\" cannot be used as a projection field name.`,\n },\n );\n }\n}\n\n/**\n * Filters out reserved keys from a props object to prevent runtime collisions.\n */\nexport function filterReservedKeys(\n props: Record<string, unknown>,\n reservedKeys: ReadonlySet<string>,\n): Record<string, unknown> {\n const filtered: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n if (!reservedKeys.has(key)) {\n filtered[key] = value;\n }\n }\n return filtered;\n}\n"]}
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { sql } from './chunk-6XDBRDZE.js';
|
|
2
|
+
import { requireDefined } from './chunk-QMQLUA66.js';
|
|
3
|
+
|
|
4
|
+
// src/backend/table-contribution.ts
|
|
5
|
+
var FULLTEXT_CONTRIBUTION_NAME = "fulltext";
|
|
6
|
+
var BASE_CONTRIBUTION_OWNER = "base";
|
|
7
|
+
|
|
8
|
+
// src/query/dialect/fulltext-strategy.ts
|
|
9
|
+
var ALL_FULLTEXT_MODES = [
|
|
10
|
+
"websearch",
|
|
11
|
+
"phrase",
|
|
12
|
+
"plain",
|
|
13
|
+
"raw"
|
|
14
|
+
];
|
|
15
|
+
function buildFulltextCapabilities(strategy) {
|
|
16
|
+
return {
|
|
17
|
+
supported: true,
|
|
18
|
+
languages: strategy.languages,
|
|
19
|
+
phraseQueries: strategy.supportedModes.includes("phrase"),
|
|
20
|
+
prefixQueries: strategy.supportsPrefix,
|
|
21
|
+
highlighting: strategy.supportsSnippets
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function quoteIdentifier(name) {
|
|
25
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
26
|
+
}
|
|
27
|
+
function tsvectorColumn(tableName) {
|
|
28
|
+
return sql`${sql.identifier(tableName)}."tsv"`;
|
|
29
|
+
}
|
|
30
|
+
function dedupeFulltextBatchRows(rows) {
|
|
31
|
+
const seen = /* @__PURE__ */ new Map();
|
|
32
|
+
for (const row of rows) seen.set(row.nodeId, row);
|
|
33
|
+
return [...seen.values()];
|
|
34
|
+
}
|
|
35
|
+
function buildPkScopedDelete(tableName, params) {
|
|
36
|
+
const table = sql.identifier(tableName);
|
|
37
|
+
return sql`
|
|
38
|
+
DELETE FROM ${table}
|
|
39
|
+
WHERE "graph_id" = ${params.graphId}
|
|
40
|
+
AND "node_kind" = ${params.nodeKind}
|
|
41
|
+
AND "node_id" = ${params.nodeId}
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
function buildPkScopedBatchDelete(tableName, params) {
|
|
45
|
+
if (params.nodeIds.length === 0) return void 0;
|
|
46
|
+
const unique = [...new Set(params.nodeIds)];
|
|
47
|
+
const table = sql.identifier(tableName);
|
|
48
|
+
return sql`
|
|
49
|
+
DELETE FROM ${table}
|
|
50
|
+
WHERE "graph_id" = ${params.graphId}
|
|
51
|
+
AND "node_kind" = ${params.nodeKind}
|
|
52
|
+
AND "node_id" IN (${sql.join(
|
|
53
|
+
unique.map((id) => sql`${id}`),
|
|
54
|
+
sql`, `
|
|
55
|
+
)})
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
function postgresTsquery(mode, query, language) {
|
|
59
|
+
const langExpr = language === void 0 ? sql`"language"` : sql`${language}::regconfig`;
|
|
60
|
+
switch (mode) {
|
|
61
|
+
case "websearch": {
|
|
62
|
+
return sql`websearch_to_tsquery(${langExpr}, ${query})`;
|
|
63
|
+
}
|
|
64
|
+
case "phrase": {
|
|
65
|
+
return sql`phraseto_tsquery(${langExpr}, ${query})`;
|
|
66
|
+
}
|
|
67
|
+
case "plain": {
|
|
68
|
+
return sql`plainto_tsquery(${langExpr}, ${query})`;
|
|
69
|
+
}
|
|
70
|
+
case "raw": {
|
|
71
|
+
return sql`to_tsquery(${langExpr}, ${query})`;
|
|
72
|
+
}
|
|
73
|
+
default: {
|
|
74
|
+
const _exhaustive = mode;
|
|
75
|
+
throw new Error(`Unsupported fulltext mode: ${String(_exhaustive)}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
var tsvectorStrategy = {
|
|
80
|
+
name: "tsvector",
|
|
81
|
+
supportedModes: ALL_FULLTEXT_MODES,
|
|
82
|
+
supportsSnippets: true,
|
|
83
|
+
// `raw` mode exposes `foo:*` prefix-match syntax to callers.
|
|
84
|
+
supportsPrefix: true,
|
|
85
|
+
supportsLanguageOverride: true,
|
|
86
|
+
// Canonical Postgres stemmers; every stock install ships these plus a
|
|
87
|
+
// few others. Runtime `to_tsvector` accepts any installed regconfig
|
|
88
|
+
// name — this list is advisory for capability discovery.
|
|
89
|
+
languages: [
|
|
90
|
+
"simple",
|
|
91
|
+
"english",
|
|
92
|
+
"french",
|
|
93
|
+
"german",
|
|
94
|
+
"italian",
|
|
95
|
+
"portuguese",
|
|
96
|
+
"russian",
|
|
97
|
+
"spanish",
|
|
98
|
+
"swedish"
|
|
99
|
+
],
|
|
100
|
+
matchCondition(tableName, query, mode, language) {
|
|
101
|
+
const q = postgresTsquery(mode, query, language);
|
|
102
|
+
return sql`${tsvectorColumn(tableName)} @@ ${q}`;
|
|
103
|
+
},
|
|
104
|
+
rankExpression(tableName, query, mode, language) {
|
|
105
|
+
const q = postgresTsquery(mode, query, language);
|
|
106
|
+
return sql`ts_rank_cd(${tsvectorColumn(tableName)}, ${q})`;
|
|
107
|
+
},
|
|
108
|
+
snippetExpression(_tableName, query, mode, language) {
|
|
109
|
+
const langExpr = language === void 0 ? sql`"language"` : sql`${language}::regconfig`;
|
|
110
|
+
const q = postgresTsquery(mode, query, language);
|
|
111
|
+
return sql`ts_headline(${langExpr}, "content", ${q}, 'StartSel=<mark>,StopSel=</mark>,MaxFragments=1,MinWords=5,MaxWords=30,ShortWord=3')`;
|
|
112
|
+
},
|
|
113
|
+
ownedTables(primaryTableName) {
|
|
114
|
+
const name = quoteIdentifier(primaryTableName);
|
|
115
|
+
const gin = quoteIdentifier(`${primaryTableName}_tsv_idx`);
|
|
116
|
+
const kind = quoteIdentifier(`${primaryTableName}_kind_idx`);
|
|
117
|
+
const createDdl = [
|
|
118
|
+
`CREATE TABLE IF NOT EXISTS ${name} (
|
|
119
|
+
"graph_id" TEXT NOT NULL,
|
|
120
|
+
"node_kind" TEXT NOT NULL,
|
|
121
|
+
"node_id" TEXT NOT NULL,
|
|
122
|
+
"content" TEXT NOT NULL,
|
|
123
|
+
"language" regconfig NOT NULL,
|
|
124
|
+
"tsv" tsvector NOT NULL
|
|
125
|
+
GENERATED ALWAYS AS (to_tsvector("language", "content")) STORED,
|
|
126
|
+
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
127
|
+
PRIMARY KEY ("graph_id", "node_kind", "node_id")
|
|
128
|
+
);`,
|
|
129
|
+
`CREATE INDEX IF NOT EXISTS ${gin} ON ${name} USING GIN ("tsv");`,
|
|
130
|
+
`CREATE INDEX IF NOT EXISTS ${kind} ON ${name} ("graph_id", "node_kind");`
|
|
131
|
+
];
|
|
132
|
+
return [
|
|
133
|
+
{
|
|
134
|
+
logicalName: FULLTEXT_CONTRIBUTION_NAME,
|
|
135
|
+
owner: "tsvector",
|
|
136
|
+
tableName: primaryTableName,
|
|
137
|
+
createDdl,
|
|
138
|
+
runtimeEnsure: true
|
|
139
|
+
}
|
|
140
|
+
];
|
|
141
|
+
},
|
|
142
|
+
buildUpsert(tableName, params, timestamp) {
|
|
143
|
+
const table = sql.identifier(tableName);
|
|
144
|
+
return [
|
|
145
|
+
sql`
|
|
146
|
+
INSERT INTO ${table} ("graph_id", "node_kind", "node_id", "content", "language", "updated_at")
|
|
147
|
+
VALUES (
|
|
148
|
+
${params.graphId}, ${params.nodeKind}, ${params.nodeId},
|
|
149
|
+
${params.content}, ${params.language}::regconfig,
|
|
150
|
+
${timestamp}
|
|
151
|
+
)
|
|
152
|
+
ON CONFLICT ("graph_id", "node_kind", "node_id")
|
|
153
|
+
DO UPDATE SET
|
|
154
|
+
"content" = EXCLUDED."content",
|
|
155
|
+
"language" = EXCLUDED."language",
|
|
156
|
+
"updated_at" = EXCLUDED."updated_at"
|
|
157
|
+
`
|
|
158
|
+
];
|
|
159
|
+
},
|
|
160
|
+
buildBatchUpsert(tableName, params, timestamp) {
|
|
161
|
+
const rows = dedupeFulltextBatchRows(params.rows);
|
|
162
|
+
if (rows.length === 0) return [];
|
|
163
|
+
const table = sql.identifier(tableName);
|
|
164
|
+
const valueTuples = rows.map(
|
|
165
|
+
(row) => sql`
|
|
166
|
+
(
|
|
167
|
+
${params.graphId}, ${params.nodeKind}, ${row.nodeId},
|
|
168
|
+
${row.content}, ${row.language}::regconfig,
|
|
169
|
+
${timestamp}
|
|
170
|
+
)
|
|
171
|
+
`
|
|
172
|
+
);
|
|
173
|
+
return [
|
|
174
|
+
sql`
|
|
175
|
+
INSERT INTO ${table} ("graph_id", "node_kind", "node_id", "content", "language", "updated_at")
|
|
176
|
+
VALUES ${sql.join(valueTuples, sql`, `)}
|
|
177
|
+
ON CONFLICT ("graph_id", "node_kind", "node_id")
|
|
178
|
+
DO UPDATE SET
|
|
179
|
+
"content" = EXCLUDED."content",
|
|
180
|
+
"language" = EXCLUDED."language",
|
|
181
|
+
"updated_at" = EXCLUDED."updated_at"
|
|
182
|
+
`
|
|
183
|
+
];
|
|
184
|
+
},
|
|
185
|
+
buildDelete(tableName, params) {
|
|
186
|
+
return [buildPkScopedDelete(tableName, params)];
|
|
187
|
+
},
|
|
188
|
+
buildBatchDelete(tableName, params) {
|
|
189
|
+
const stmt = buildPkScopedBatchDelete(tableName, params);
|
|
190
|
+
return stmt === void 0 ? [] : [stmt];
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
function translateToFts5Query(query, mode) {
|
|
194
|
+
switch (mode) {
|
|
195
|
+
case "phrase": {
|
|
196
|
+
return `"${query.replaceAll('"', '""')}"`;
|
|
197
|
+
}
|
|
198
|
+
case "plain": {
|
|
199
|
+
return query.trim().split(/\s+/u).filter((token) => token.length > 0).map((token) => `"${token.replaceAll('"', '""')}"`).join(" ");
|
|
200
|
+
}
|
|
201
|
+
case "websearch": {
|
|
202
|
+
return translateWebsearchToFts5(query);
|
|
203
|
+
}
|
|
204
|
+
case "raw": {
|
|
205
|
+
return query;
|
|
206
|
+
}
|
|
207
|
+
default: {
|
|
208
|
+
const _exhaustive = mode;
|
|
209
|
+
throw new Error(`Unsupported fulltext mode: ${String(_exhaustive)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function translateWebsearchToFts5(query) {
|
|
214
|
+
const tokens = [];
|
|
215
|
+
let index = 0;
|
|
216
|
+
function skipWhitespace() {
|
|
217
|
+
while (index < query.length && /\s/u.test(query[index] ?? "")) {
|
|
218
|
+
index += 1;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function readPhrase() {
|
|
222
|
+
index += 1;
|
|
223
|
+
let content = "";
|
|
224
|
+
while (index < query.length && query[index] !== '"') {
|
|
225
|
+
content += query[index] ?? "";
|
|
226
|
+
index += 1;
|
|
227
|
+
}
|
|
228
|
+
if (query[index] === '"') index += 1;
|
|
229
|
+
return `"${content.replaceAll('"', '""')}"`;
|
|
230
|
+
}
|
|
231
|
+
function readBareTerm() {
|
|
232
|
+
let term = "";
|
|
233
|
+
while (index < query.length && !/\s/u.test(query[index] ?? "")) {
|
|
234
|
+
term += query[index] ?? "";
|
|
235
|
+
index += 1;
|
|
236
|
+
}
|
|
237
|
+
return term;
|
|
238
|
+
}
|
|
239
|
+
while (index < query.length) {
|
|
240
|
+
skipWhitespace();
|
|
241
|
+
if (index >= query.length) break;
|
|
242
|
+
const ch = query[index];
|
|
243
|
+
if (ch === '"') {
|
|
244
|
+
tokens.push(readPhrase());
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (ch === "-") {
|
|
248
|
+
index += 1;
|
|
249
|
+
const term = query[index] === '"' ? readPhrase() : `"${readBareTerm().replaceAll('"', '""')}"`;
|
|
250
|
+
tokens.push(`NOT ${term}`);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (ch === "+") {
|
|
254
|
+
index += 1;
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const bare = readBareTerm();
|
|
258
|
+
if (bare.length === 0) continue;
|
|
259
|
+
if (bare.toUpperCase() === "OR") {
|
|
260
|
+
tokens.push("OR");
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
tokens.push(`"${bare.replaceAll('"', '""')}"`);
|
|
264
|
+
}
|
|
265
|
+
if (tokens.length > 0 && tokens[0]?.startsWith("NOT ")) {
|
|
266
|
+
tokens.shift();
|
|
267
|
+
}
|
|
268
|
+
return tokens.join(" ");
|
|
269
|
+
}
|
|
270
|
+
var fts5Strategy = {
|
|
271
|
+
name: "fts5",
|
|
272
|
+
supportedModes: ALL_FULLTEXT_MODES,
|
|
273
|
+
supportsSnippets: true,
|
|
274
|
+
// FTS5 supports `foo*` prefix matching natively.
|
|
275
|
+
supportsPrefix: true,
|
|
276
|
+
// FTS5 tokenizer is fixed at table-create time; per-row / per-query
|
|
277
|
+
// language metadata is stored but not consulted.
|
|
278
|
+
supportsLanguageOverride: false,
|
|
279
|
+
// The built-in tokenizer is `porter unicode61 remove_diacritics 2`; the
|
|
280
|
+
// `language` field on searchable() is recorded for future use but not
|
|
281
|
+
// applied at query time.
|
|
282
|
+
languages: ["porter", "unicode61", "trigram"],
|
|
283
|
+
matchCondition(tableName, query, mode, _language) {
|
|
284
|
+
const matchExpression = translateToFts5Query(query, mode);
|
|
285
|
+
return sql`${sql.identifier(tableName)} MATCH ${matchExpression}`;
|
|
286
|
+
},
|
|
287
|
+
rankExpression(tableName, _query, _mode, _language) {
|
|
288
|
+
return sql`-bm25(${sql.identifier(tableName)})`;
|
|
289
|
+
},
|
|
290
|
+
snippetExpression(tableName, _query, _mode, _language) {
|
|
291
|
+
return sql`snippet(${sql.identifier(tableName)}, -1, '<mark>', '</mark>', '…', 20)`;
|
|
292
|
+
},
|
|
293
|
+
ownedTables(primaryTableName) {
|
|
294
|
+
const name = quoteIdentifier(primaryTableName);
|
|
295
|
+
return [
|
|
296
|
+
{
|
|
297
|
+
logicalName: FULLTEXT_CONTRIBUTION_NAME,
|
|
298
|
+
owner: "fts5",
|
|
299
|
+
tableName: primaryTableName,
|
|
300
|
+
createDdl: [
|
|
301
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS ${name} USING fts5(
|
|
302
|
+
graph_id UNINDEXED,
|
|
303
|
+
node_kind UNINDEXED,
|
|
304
|
+
node_id UNINDEXED,
|
|
305
|
+
language UNINDEXED,
|
|
306
|
+
updated_at UNINDEXED,
|
|
307
|
+
content,
|
|
308
|
+
tokenize='porter unicode61 remove_diacritics 2'
|
|
309
|
+
);`
|
|
310
|
+
],
|
|
311
|
+
runtimeEnsure: true
|
|
312
|
+
}
|
|
313
|
+
];
|
|
314
|
+
},
|
|
315
|
+
buildUpsert(tableName, params, timestamp) {
|
|
316
|
+
const table = sql.identifier(tableName);
|
|
317
|
+
return [
|
|
318
|
+
sql`
|
|
319
|
+
DELETE FROM ${table}
|
|
320
|
+
WHERE "graph_id" = ${params.graphId}
|
|
321
|
+
AND "node_kind" = ${params.nodeKind}
|
|
322
|
+
AND "node_id" = ${params.nodeId}
|
|
323
|
+
`,
|
|
324
|
+
sql`
|
|
325
|
+
INSERT INTO ${table} (graph_id, node_kind, node_id, content, language, updated_at)
|
|
326
|
+
VALUES (${params.graphId}, ${params.nodeKind}, ${params.nodeId}, ${params.content}, ${params.language}, ${timestamp})
|
|
327
|
+
`
|
|
328
|
+
];
|
|
329
|
+
},
|
|
330
|
+
buildBatchUpsert(tableName, params, timestamp) {
|
|
331
|
+
const rows = dedupeFulltextBatchRows(params.rows);
|
|
332
|
+
if (rows.length === 0) return [];
|
|
333
|
+
const table = sql.identifier(tableName);
|
|
334
|
+
const nodeIds = rows.map((row) => row.nodeId);
|
|
335
|
+
const deleteStmt = sql`
|
|
336
|
+
DELETE FROM ${table}
|
|
337
|
+
WHERE "graph_id" = ${params.graphId}
|
|
338
|
+
AND "node_kind" = ${params.nodeKind}
|
|
339
|
+
AND "node_id" IN (${sql.join(
|
|
340
|
+
nodeIds.map((id) => sql`${id}`),
|
|
341
|
+
sql`, `
|
|
342
|
+
)})
|
|
343
|
+
`;
|
|
344
|
+
const valueTuples = rows.map(
|
|
345
|
+
(row) => sql`
|
|
346
|
+
(
|
|
347
|
+
${params.graphId}, ${params.nodeKind}, ${row.nodeId},
|
|
348
|
+
${row.content}, ${row.language}, ${timestamp}
|
|
349
|
+
)
|
|
350
|
+
`
|
|
351
|
+
);
|
|
352
|
+
const insertStmt = sql`
|
|
353
|
+
INSERT INTO ${table} (graph_id, node_kind, node_id, content, language, updated_at)
|
|
354
|
+
VALUES ${sql.join(valueTuples, sql`, `)}
|
|
355
|
+
`;
|
|
356
|
+
return [deleteStmt, insertStmt];
|
|
357
|
+
},
|
|
358
|
+
buildDelete(tableName, params) {
|
|
359
|
+
return [buildPkScopedDelete(tableName, params)];
|
|
360
|
+
},
|
|
361
|
+
buildBatchDelete(tableName, params) {
|
|
362
|
+
const stmt = buildPkScopedBatchDelete(tableName, params);
|
|
363
|
+
return stmt === void 0 ? [] : [stmt];
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
// src/query/dialect/vector-strategy.ts
|
|
368
|
+
var VECTOR_CONTRIBUTION_PREFIX = "vector";
|
|
369
|
+
function buildVectorCapabilities(strategy) {
|
|
370
|
+
return strategy.capabilities;
|
|
371
|
+
}
|
|
372
|
+
function vectorScoreExpression(distanceExpression, metric) {
|
|
373
|
+
switch (metric) {
|
|
374
|
+
case "cosine": {
|
|
375
|
+
return sql`(1 - (${distanceExpression}))`;
|
|
376
|
+
}
|
|
377
|
+
case "l2":
|
|
378
|
+
case "inner_product": {
|
|
379
|
+
return distanceExpression;
|
|
380
|
+
}
|
|
381
|
+
default: {
|
|
382
|
+
const _exhaustive = metric;
|
|
383
|
+
throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function vectorMinScoreCondition(distanceExpression, metric, minScore) {
|
|
388
|
+
assertVectorMinScore(minScore, metric);
|
|
389
|
+
switch (metric) {
|
|
390
|
+
case "cosine": {
|
|
391
|
+
return sql`${distanceExpression} <= ${1 - minScore}`;
|
|
392
|
+
}
|
|
393
|
+
case "l2": {
|
|
394
|
+
return sql`${distanceExpression} <= ${minScore}`;
|
|
395
|
+
}
|
|
396
|
+
case "inner_product": {
|
|
397
|
+
return sql`${distanceExpression} <= ${-minScore}`;
|
|
398
|
+
}
|
|
399
|
+
default: {
|
|
400
|
+
const _exhaustive = metric;
|
|
401
|
+
throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
function assertFiniteEmbedding(embedding, name) {
|
|
406
|
+
for (const [index, value] of embedding.entries()) {
|
|
407
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
408
|
+
throw new TypeError(
|
|
409
|
+
`${name}[${index}] must be a finite number, got: ${value}`
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
function assertVectorSearchLimit(limit) {
|
|
415
|
+
if (!Number.isInteger(limit) || limit <= 0) {
|
|
416
|
+
throw new RangeError(
|
|
417
|
+
`vectorSearch limit must be a positive integer, got: ${limit}`
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
function assertVectorMinScore(minScore, metric, label = "minScore") {
|
|
422
|
+
if (!Number.isFinite(minScore)) {
|
|
423
|
+
throw new RangeError(`${label} must be a finite number, got: ${minScore}`);
|
|
424
|
+
}
|
|
425
|
+
if (metric === "cosine" && Math.abs(minScore) > 1) {
|
|
426
|
+
throw new RangeError(
|
|
427
|
+
`${label} for the cosine metric must be between -1 and 1, got: ${minScore}`
|
|
428
|
+
);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
var MAX_VECTOR_IDENTIFIER_LENGTH = 63;
|
|
432
|
+
function sanitizeIdentifierPart(value) {
|
|
433
|
+
return value.toLowerCase().replaceAll(/[^a-z0-9_]/g, "_");
|
|
434
|
+
}
|
|
435
|
+
function shortHash(input) {
|
|
436
|
+
let h1 = 3735928559;
|
|
437
|
+
let h2 = 1103547991;
|
|
438
|
+
for (let index = 0; index < input.length; index++) {
|
|
439
|
+
const ch = requireDefined(input.codePointAt(index));
|
|
440
|
+
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
441
|
+
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
442
|
+
}
|
|
443
|
+
h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
|
|
444
|
+
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
|
|
445
|
+
const hi = (h2 >>> 0).toString(16).padStart(8, "0");
|
|
446
|
+
const lo = (h1 >>> 0).toString(16).padStart(8, "0");
|
|
447
|
+
return `${hi}${lo}`.slice(0, 8);
|
|
448
|
+
}
|
|
449
|
+
function vectorPhysicalName(prefix, graphId, nodeKind, fieldPath) {
|
|
450
|
+
const readable = `${prefix}_${sanitizeIdentifierPart(graphId)}_${sanitizeIdentifierPart(nodeKind)}_${sanitizeIdentifierPart(fieldPath)}`;
|
|
451
|
+
const hash = shortHash(JSON.stringify([graphId, nodeKind, fieldPath]));
|
|
452
|
+
const full = `${readable}_${hash}`;
|
|
453
|
+
if (full.length <= MAX_VECTOR_IDENTIFIER_LENGTH) return full;
|
|
454
|
+
return `${readable.slice(0, MAX_VECTOR_IDENTIFIER_LENGTH - 1 - hash.length)}_${hash}`;
|
|
455
|
+
}
|
|
456
|
+
function quoteIdentifier2(name) {
|
|
457
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
export { ALL_FULLTEXT_MODES, BASE_CONTRIBUTION_OWNER, FULLTEXT_CONTRIBUTION_NAME, VECTOR_CONTRIBUTION_PREFIX, assertFiniteEmbedding, assertVectorMinScore, assertVectorSearchLimit, buildFulltextCapabilities, buildVectorCapabilities, fts5Strategy, quoteIdentifier2 as quoteIdentifier, shortHash, tsvectorStrategy, vectorMinScoreCondition, vectorPhysicalName, vectorScoreExpression };
|
|
461
|
+
//# sourceMappingURL=chunk-Y7M44XEK.js.map
|
|
462
|
+
//# sourceMappingURL=chunk-Y7M44XEK.js.map
|