@nicia-ai/typegraph 0.49.0 → 0.50.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/dist/backend/drizzle/indexes.cjs +9 -9
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/drizzle/indexes.js +5 -5
- package/dist/backend/index.cjs +56 -52
- package/dist/backend/index.d.cts +3 -3
- package/dist/backend/index.d.ts +3 -3
- package/dist/backend/index.js +11 -11
- package/dist/backend/postgres/index.cjs +34 -28
- package/dist/backend/postgres/index.d.cts +7 -7
- package/dist/backend/postgres/index.d.ts +7 -7
- package/dist/backend/postgres/index.js +17 -15
- package/dist/backend/postgres/pglite-store.cjs +36 -35
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +8 -8
- package/dist/backend/postgres/pglite-store.d.ts +8 -8
- package/dist/backend/postgres/pglite-store.js +32 -31
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +19 -17
- package/dist/backend/postgres/pglite.d.cts +3 -3
- package/dist/backend/postgres/pglite.d.ts +3 -3
- package/dist/backend/postgres/pglite.js +18 -16
- package/dist/backend/sqlite/index.cjs +31 -25
- package/dist/backend/sqlite/index.d.cts +7 -7
- package/dist/backend/sqlite/index.d.ts +7 -7
- package/dist/backend/sqlite/index.js +15 -13
- package/dist/backend/sqlite/libsql.cjs +22 -20
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +3 -3
- package/dist/backend/sqlite/libsql.d.ts +3 -3
- package/dist/backend/sqlite/libsql.js +17 -15
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +37 -36
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +8 -8
- package/dist/backend/sqlite/local-store.d.ts +8 -8
- package/dist/backend/sqlite/local-store.js +33 -32
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +20 -18
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +18 -16
- package/dist/{chunk-LTXQOEIC.js → chunk-2CYI5HRH.js} +248 -203
- package/dist/chunk-2CYI5HRH.js.map +1 -0
- package/dist/{chunk-KF6K7TGH.js → chunk-2GIV5X4P.js} +702 -422
- package/dist/chunk-2GIV5X4P.js.map +1 -0
- package/dist/{chunk-2TYSSBU5.js → chunk-2Q45FAIE.js} +15 -15
- package/dist/{chunk-2TYSSBU5.js.map → chunk-2Q45FAIE.js.map} +1 -1
- package/dist/{chunk-WODMN3Q2.cjs → chunk-45YZXI6X.cjs} +27 -27
- package/dist/{chunk-WODMN3Q2.cjs.map → chunk-45YZXI6X.cjs.map} +1 -1
- package/dist/{chunk-3DMMGT6S.js → chunk-46UGOVRW.js} +3 -3
- package/dist/{chunk-3DMMGT6S.js.map → chunk-46UGOVRW.js.map} +1 -1
- package/dist/{chunk-GLHXM7C4.js → chunk-5LKOVCPP.js} +60 -23
- package/dist/chunk-5LKOVCPP.js.map +1 -0
- package/dist/{chunk-JFRT7S3B.cjs → chunk-5OWHU7Z7.cjs} +261 -459
- package/dist/chunk-5OWHU7Z7.cjs.map +1 -0
- package/dist/{chunk-7SQSZN2J.js → chunk-5PP4KRPV.js} +5 -5
- package/dist/{chunk-7SQSZN2J.js.map → chunk-5PP4KRPV.js.map} +1 -1
- package/dist/chunk-6KQEICJ6.cjs +12 -0
- package/dist/{chunk-MKJ4KXL5.cjs.map → chunk-6KQEICJ6.cjs.map} +1 -1
- package/dist/{chunk-6SWPJEYN.js → chunk-6LEOAIIB.js} +40 -6
- package/dist/chunk-6LEOAIIB.js.map +1 -0
- package/dist/{chunk-DZAICA5J.js → chunk-6NKSE5AU.js} +4 -4
- package/dist/{chunk-DZAICA5J.js.map → chunk-6NKSE5AU.js.map} +1 -1
- package/dist/{chunk-OVI7IXYX.js → chunk-6S3PTHL4.js} +3 -3
- package/dist/{chunk-OVI7IXYX.js.map → chunk-6S3PTHL4.js.map} +1 -1
- package/dist/{chunk-3FPR224C.cjs → chunk-7CCMCMJO.cjs} +102 -102
- package/dist/{chunk-3FPR224C.cjs.map → chunk-7CCMCMJO.cjs.map} +1 -1
- package/dist/{chunk-SHFBB23Q.js → chunk-7OWE7WD6.js} +6 -4
- package/dist/chunk-7OWE7WD6.js.map +1 -0
- package/dist/chunk-7PRMDZIA.cjs +182 -0
- package/dist/chunk-7PRMDZIA.cjs.map +1 -0
- package/dist/{chunk-CHAOFCHV.js → chunk-AH2A74OZ.js} +3 -3
- package/dist/{chunk-CHAOFCHV.js.map → chunk-AH2A74OZ.js.map} +1 -1
- package/dist/{chunk-OORXGFL5.cjs → chunk-BYBDM423.cjs} +48 -48
- package/dist/{chunk-OORXGFL5.cjs.map → chunk-BYBDM423.cjs.map} +1 -1
- package/dist/{chunk-JB6T4GLL.cjs → chunk-C76WFIVZ.cjs} +808 -519
- package/dist/chunk-C76WFIVZ.cjs.map +1 -0
- package/dist/{chunk-3G5W2U2L.cjs → chunk-CS6JTQQ2.cjs} +302 -257
- package/dist/chunk-CS6JTQQ2.cjs.map +1 -0
- package/dist/{chunk-AOSSQDVO.cjs → chunk-CSNOYIB4.cjs} +13 -13
- package/dist/{chunk-AOSSQDVO.cjs.map → chunk-CSNOYIB4.cjs.map} +1 -1
- package/dist/{chunk-HEV35TGT.js → chunk-DI6VC62F.js} +13 -4
- package/dist/chunk-DI6VC62F.js.map +1 -0
- package/dist/{chunk-2QGYQBS2.cjs → chunk-DWUDZ66O.cjs} +10 -10
- package/dist/{chunk-2QGYQBS2.cjs.map → chunk-DWUDZ66O.cjs.map} +1 -1
- package/dist/{chunk-ZDKTPBGV.js → chunk-EDLKIQRI.js} +4 -4
- package/dist/{chunk-ZDKTPBGV.js.map → chunk-EDLKIQRI.js.map} +1 -1
- package/dist/chunk-EH3JZJUM.cjs +567 -0
- package/dist/chunk-EH3JZJUM.cjs.map +1 -0
- package/dist/{chunk-S5TERQVW.js → chunk-FX5ZW6PN.js} +196 -33
- package/dist/chunk-FX5ZW6PN.js.map +1 -0
- package/dist/{chunk-XVWOYKIK.js → chunk-FZHF5UWR.js} +3 -3
- package/dist/{chunk-XVWOYKIK.js.map → chunk-FZHF5UWR.js.map} +1 -1
- package/dist/{chunk-BFUOME67.cjs → chunk-G2TLHH6T.cjs} +20 -11
- package/dist/chunk-G2TLHH6T.cjs.map +1 -0
- package/dist/{chunk-5PRKMB24.cjs → chunk-GHZPZNFC.cjs} +12 -4
- package/dist/chunk-GHZPZNFC.cjs.map +1 -0
- package/dist/{chunk-ZFMCDJGB.js → chunk-GVYVGGPJ.js} +11 -199
- package/dist/chunk-GVYVGGPJ.js.map +1 -0
- package/dist/{chunk-SDBBMD4N.js → chunk-H3XP6BAV.js} +3 -3
- package/dist/{chunk-SDBBMD4N.js.map → chunk-H3XP6BAV.js.map} +1 -1
- package/dist/{chunk-ROR5ZR6A.cjs → chunk-HSEZ7X6Y.cjs} +45 -45
- package/dist/{chunk-ROR5ZR6A.cjs.map → chunk-HSEZ7X6Y.cjs.map} +1 -1
- package/dist/{chunk-LRQKXRXO.cjs → chunk-HY5BNOUN.cjs} +4 -4
- package/dist/{chunk-LRQKXRXO.cjs.map → chunk-HY5BNOUN.cjs.map} +1 -1
- package/dist/chunk-HZUB5CON.js +27 -0
- package/dist/chunk-HZUB5CON.js.map +1 -0
- package/dist/{chunk-MYKHJI2J.js → chunk-I5C6OTKR.js} +3 -3
- package/dist/{chunk-MYKHJI2J.js.map → chunk-I5C6OTKR.js.map} +1 -1
- package/dist/{chunk-3U5ABFDW.cjs → chunk-IHK5KA2Q.cjs} +31 -28
- package/dist/chunk-IHK5KA2Q.cjs.map +1 -0
- package/dist/{chunk-26YKDNUD.cjs → chunk-IPRP6TDL.cjs} +12 -10
- package/dist/chunk-IPRP6TDL.cjs.map +1 -0
- package/dist/{chunk-UGHG7PGX.js → chunk-IRPYOHRC.js} +26 -4
- package/dist/chunk-IRPYOHRC.js.map +1 -0
- package/dist/{chunk-7UOLHNWC.cjs → chunk-ISKCIQF2.cjs} +20 -20
- package/dist/{chunk-7UOLHNWC.cjs.map → chunk-ISKCIQF2.cjs.map} +1 -1
- package/dist/{chunk-7LZJNLA5.js → chunk-JG5XIJDY.js} +57 -31
- package/dist/chunk-JG5XIJDY.js.map +1 -0
- package/dist/{chunk-YYUHLYM2.cjs → chunk-K2XYLVVB.cjs} +134 -133
- package/dist/chunk-K2XYLVVB.cjs.map +1 -0
- package/dist/{chunk-5K2BKEBD.js → chunk-K46SDNQD.js} +10 -4
- package/dist/chunk-K46SDNQD.js.map +1 -0
- package/dist/{chunk-TZEGUG6D.cjs → chunk-K6VKTBST.cjs} +4 -4
- package/dist/{chunk-TZEGUG6D.cjs.map → chunk-K6VKTBST.cjs.map} +1 -1
- package/dist/chunk-KWNWG4RC.cjs +12 -0
- package/dist/{chunk-CICO5GXD.cjs.map → chunk-KWNWG4RC.cjs.map} +1 -1
- package/dist/{chunk-FQPEMEWX.cjs → chunk-LLVOQOWE.cjs} +80 -32
- package/dist/chunk-LLVOQOWE.cjs.map +1 -0
- package/dist/{chunk-TQHGE7UC.cjs → chunk-M5MSP3BI.cjs} +18 -10
- package/dist/chunk-M5MSP3BI.cjs.map +1 -0
- package/dist/{chunk-Z2JCLZFJ.js → chunk-MJPZNEJZ.js} +273 -291
- package/dist/chunk-MJPZNEJZ.js.map +1 -0
- package/dist/{chunk-TUNPBZY3.cjs → chunk-MM3JHVKZ.cjs} +4 -4
- package/dist/{chunk-TUNPBZY3.cjs.map → chunk-MM3JHVKZ.cjs.map} +1 -1
- package/dist/{chunk-BRRP76WO.js → chunk-MX7EKQPM.js} +457 -299
- package/dist/chunk-MX7EKQPM.js.map +1 -0
- package/dist/{chunk-D4QLTJSM.js → chunk-MZ34E2GN.js} +13 -12
- package/dist/chunk-MZ34E2GN.js.map +1 -0
- package/dist/{chunk-EDN4Y4ZG.cjs → chunk-OJHD3LXJ.cjs} +9 -9
- package/dist/{chunk-EDN4Y4ZG.cjs.map → chunk-OJHD3LXJ.cjs.map} +1 -1
- package/dist/{chunk-DO7SAMEK.cjs → chunk-ON47CBE4.cjs} +47 -47
- package/dist/{chunk-DO7SAMEK.cjs.map → chunk-ON47CBE4.cjs.map} +1 -1
- package/dist/{chunk-6LN7FIVU.js → chunk-PALYTHGM.js} +11 -4
- package/dist/chunk-PALYTHGM.js.map +1 -0
- package/dist/{chunk-YVF2EM7B.js → chunk-R7MRFE5P.js} +3 -3
- package/dist/{chunk-YVF2EM7B.js.map → chunk-R7MRFE5P.js.map} +1 -1
- package/dist/{chunk-EZEEWCFJ.cjs → chunk-RDP6ZRSM.cjs} +435 -265
- package/dist/chunk-RDP6ZRSM.cjs.map +1 -0
- package/dist/{chunk-GYEG3ZLZ.cjs → chunk-RJMHU2MG.cjs} +121 -18
- package/dist/chunk-RJMHU2MG.cjs.map +1 -0
- package/dist/chunk-RWUWTJQY.cjs +30 -0
- package/dist/chunk-RWUWTJQY.cjs.map +1 -0
- package/dist/{chunk-JPD2CTC3.js → chunk-S33YQEL7.js} +7 -7
- package/dist/{chunk-JPD2CTC3.js.map → chunk-S33YQEL7.js.map} +1 -1
- package/dist/chunk-S3SDEQMC.js +532 -0
- package/dist/chunk-S3SDEQMC.js.map +1 -0
- package/dist/{chunk-OI2GQ25X.cjs → chunk-SHC7BCG5.cjs} +7 -7
- package/dist/{chunk-OI2GQ25X.cjs.map → chunk-SHC7BCG5.cjs.map} +1 -1
- package/dist/{chunk-L3LQNR34.cjs → chunk-TEC24ZDA.cjs} +161 -161
- package/dist/{chunk-L3LQNR34.cjs.map → chunk-TEC24ZDA.cjs.map} +1 -1
- package/dist/{chunk-HDL2ARHX.cjs → chunk-TP4NJTI3.cjs} +63 -27
- package/dist/chunk-TP4NJTI3.cjs.map +1 -0
- package/dist/{chunk-UMGZDVOA.cjs → chunk-TTCOPKUL.cjs} +124 -124
- package/dist/{chunk-UMGZDVOA.cjs.map → chunk-TTCOPKUL.cjs.map} +1 -1
- package/dist/chunk-TUVD4DFR.cjs +1207 -0
- package/dist/chunk-TUVD4DFR.cjs.map +1 -0
- package/dist/{chunk-UGHQV7MP.cjs → chunk-TYGGUWMS.cjs} +178 -152
- package/dist/chunk-TYGGUWMS.cjs.map +1 -0
- package/dist/{chunk-WIC7DRXW.js → chunk-U3Z7XKAG.js} +7 -7
- package/dist/{chunk-WIC7DRXW.js.map → chunk-U3Z7XKAG.js.map} +1 -1
- package/dist/{chunk-NACVVDWB.js → chunk-U5EL6JUV.js} +10 -10
- package/dist/{chunk-NACVVDWB.js.map → chunk-U5EL6JUV.js.map} +1 -1
- package/dist/{chunk-OMZ37BM2.js → chunk-V76FGHY3.js} +5 -5
- package/dist/{chunk-OMZ37BM2.js.map → chunk-V76FGHY3.js.map} +1 -1
- package/dist/{chunk-6NGW27EO.cjs → chunk-VLBTRXA2.cjs} +10 -10
- package/dist/{chunk-6NGW27EO.cjs.map → chunk-VLBTRXA2.cjs.map} +1 -1
- package/dist/chunk-VTJVMP4I.js +1182 -0
- package/dist/chunk-VTJVMP4I.js.map +1 -0
- package/dist/{chunk-QTD6HX4O.js → chunk-W5SOCUBL.js} +5 -5
- package/dist/{chunk-QTD6HX4O.js.map → chunk-W5SOCUBL.js.map} +1 -1
- package/dist/{chunk-SR725PWF.cjs → chunk-WCLMKNQE.cjs} +1750 -1592
- package/dist/chunk-WCLMKNQE.cjs.map +1 -0
- package/dist/{chunk-2O4PCIZ6.cjs → chunk-WK23PGTP.cjs} +13 -13
- package/dist/{chunk-2O4PCIZ6.cjs.map → chunk-WK23PGTP.cjs.map} +1 -1
- package/dist/{chunk-KKBDXCLQ.js → chunk-WQBAQZHR.js} +4 -4
- package/dist/{chunk-KKBDXCLQ.js.map → chunk-WQBAQZHR.js.map} +1 -1
- package/dist/{chunk-MRDBBHIZ.cjs → chunk-X4GDXBOP.cjs} +2 -2
- package/dist/chunk-X4GDXBOP.cjs.map +1 -0
- package/dist/{chunk-3QNZ5SAJ.cjs → chunk-XMY2SXOH.cjs} +437 -455
- package/dist/chunk-XMY2SXOH.cjs.map +1 -0
- package/dist/{chunk-D5R42W5D.js → chunk-XZW2CTNO.js} +115 -12
- package/dist/chunk-XZW2CTNO.js.map +1 -0
- package/dist/{chunk-NVY5CJFP.js → chunk-Y55DLLEG.js} +9 -6
- package/dist/chunk-Y55DLLEG.js.map +1 -0
- package/dist/chunk-YA36ABIL.js +174 -0
- package/dist/chunk-YA36ABIL.js.map +1 -0
- package/dist/{chunk-ZLONH2UD.js → chunk-YDEJQWOL.js} +2 -2
- package/dist/chunk-YDEJQWOL.js.map +1 -0
- package/dist/{chunk-JONXFAPO.js → chunk-ZAQUKCUC.js} +5 -5
- package/dist/{chunk-JONXFAPO.js.map → chunk-ZAQUKCUC.js.map} +1 -1
- package/dist/{chunk-SIT26LAZ.cjs → chunk-ZBFZGLZE.cjs} +29 -5
- package/dist/chunk-ZBFZGLZE.cjs.map +1 -0
- package/dist/{chunk-P6YLZTRE.js → chunk-ZRJTM7MT.js} +3 -3
- package/dist/{chunk-P6YLZTRE.js.map → chunk-ZRJTM7MT.js.map} +1 -1
- package/dist/core/index.cjs +29 -28
- package/dist/core/index.d.cts +4 -4
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +9 -8
- package/dist/{ddl-D_oW-EVO.d.ts → ddl-B49O7dB_.d.ts} +3 -3
- package/dist/{ddl-BL1NZLMY.d.cts → ddl-DcZG660s.d.cts} +3 -3
- package/dist/graph-extension/index.cjs +21 -20
- package/dist/graph-extension/index.d.cts +4 -4
- package/dist/graph-extension/index.d.ts +4 -4
- package/dist/graph-extension/index.js +5 -4
- package/dist/graph-merge/index.cjs +305 -303
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +9 -9
- package/dist/graph-merge/index.d.ts +9 -9
- package/dist/graph-merge/index.js +29 -27
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-D7d1u2gr.d.ts → index-B0PrmE3K.d.cts} +16 -2
- package/dist/{index-COs_z6nV.d.cts → index-CwcXsL5R.d.ts} +16 -2
- package/dist/index.cjs +223 -222
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -12
- package/dist/index.d.ts +12 -12
- package/dist/index.js +37 -36
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +13 -13
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/indexes/index.js +6 -6
- package/dist/{ingestion-import-target-dNeL7iAv.d.ts → ingestion-import-target-CI8OWIkM.d.ts} +1 -1
- package/dist/{ingestion-import-target-XPxZYw89.d.cts → ingestion-import-target-DCpfM1PX.d.cts} +1 -1
- package/dist/interchange/index.cjs +55 -54
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +19 -8
- package/dist/interchange/index.d.ts +19 -8
- package/dist/interchange/index.js +19 -18
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-D9eRT_ns.d.ts → manager-Cfg1ENj1.d.ts} +30 -2
- package/dist/{manager-CYaff3n3.d.cts → manager-D348fa6W.d.cts} +30 -2
- package/dist/{materialize-indexes-DJ3ykH59.d.ts → materialize-indexes-C9GG3O3C.d.ts} +1 -1
- package/dist/{materialize-indexes-DTtAnvfY.d.cts → materialize-indexes-CrSiW_lT.d.cts} +1 -1
- package/dist/{postgres-CcL4bAHS.d.ts → postgres-CH1kkM5J.d.cts} +279 -2
- package/dist/{postgres-DMj39MEu.d.cts → postgres-UStOycLI.d.ts} +279 -2
- package/dist/profiler/index.d.cts +9 -9
- package/dist/profiler/index.d.ts +9 -9
- package/dist/provenance/index.cjs +46 -44
- 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 -10
- package/dist/provenance/index.js.map +1 -1
- package/dist/{repair-validity-windows-DlUSqwCg.d.ts → repair-validity-windows-BtOEe2pS.d.ts} +2 -2
- package/dist/{repair-validity-windows-BFNZvd_H.d.cts → repair-validity-windows-aWX7VNvv.d.cts} +2 -2
- package/dist/schema/index.cjs +46 -46
- package/dist/schema/index.d.cts +6 -6
- package/dist/schema/index.d.ts +6 -6
- package/dist/schema/index.js +19 -19
- package/dist/{searchable-DHJMh_nj.d.cts → searchable-C8-RrL3l.d.cts} +1 -1
- package/dist/{searchable-bpE1bBfc.d.ts → searchable-z4BiFfHI.d.ts} +1 -1
- package/dist/{sqlite-YppHrNFb.d.cts → sqlite-Cyx9j9o6.d.cts} +309 -2
- package/dist/{sqlite-D7Oz0SQh.d.ts → sqlite-axLw5Lo5.d.ts} +309 -2
- package/dist/{store-bphCSo7z.d.cts → store-CTfQ9taw.d.ts} +102 -13
- package/dist/{store-DRrFCx5x.d.ts → store-DR9J7JVB.d.cts} +102 -13
- package/dist/{temporal-5GqpYCk2.d.cts → temporal-B4Ky4wzh.d.cts} +1 -1
- package/dist/{temporal-CbnLzTmM.d.ts → temporal-CBOrERz5.d.ts} +1 -1
- package/dist/{types-CXAhpW-c.d.cts → types-BE921wRl.d.cts} +1 -1
- package/dist/{types-Bx74kaTt.d.ts → types-BScHXVM7.d.ts} +1 -1
- package/dist/{types-BqFZTQmV.d.cts → types-CWg4dTjj.d.cts} +257 -6
- package/dist/{types-BqFZTQmV.d.ts → types-CWg4dTjj.d.ts} +257 -6
- package/dist/{where-O-k2wgYm.d.ts → where-BWXUPV3C.d.ts} +1 -1
- package/dist/{where-DI_Fqz-X.d.cts → where-CNtx1aLc.d.cts} +1 -1
- package/package.json +3 -2
- package/dist/chunk-26YKDNUD.cjs.map +0 -1
- package/dist/chunk-3G5W2U2L.cjs.map +0 -1
- package/dist/chunk-3KOY4FH3.cjs +0 -934
- package/dist/chunk-3KOY4FH3.cjs.map +0 -1
- package/dist/chunk-3QNZ5SAJ.cjs.map +0 -1
- package/dist/chunk-3U5ABFDW.cjs.map +0 -1
- package/dist/chunk-5K2BKEBD.js.map +0 -1
- package/dist/chunk-5PRKMB24.cjs.map +0 -1
- package/dist/chunk-6LN7FIVU.js.map +0 -1
- package/dist/chunk-6SWPJEYN.js.map +0 -1
- package/dist/chunk-7LZJNLA5.js.map +0 -1
- package/dist/chunk-BFUOME67.cjs.map +0 -1
- package/dist/chunk-BRRP76WO.js.map +0 -1
- package/dist/chunk-CICO5GXD.cjs +0 -12
- package/dist/chunk-D4QLTJSM.js.map +0 -1
- package/dist/chunk-D5R42W5D.js.map +0 -1
- package/dist/chunk-EZEEWCFJ.cjs.map +0 -1
- package/dist/chunk-FA2AFWLP.cjs +0 -167
- package/dist/chunk-FA2AFWLP.cjs.map +0 -1
- package/dist/chunk-FQPEMEWX.cjs.map +0 -1
- package/dist/chunk-GLHXM7C4.js.map +0 -1
- package/dist/chunk-GYEG3ZLZ.cjs.map +0 -1
- package/dist/chunk-HDL2ARHX.cjs.map +0 -1
- package/dist/chunk-HEV35TGT.js.map +0 -1
- package/dist/chunk-I4GAZH5Z.js +0 -913
- package/dist/chunk-I4GAZH5Z.js.map +0 -1
- package/dist/chunk-JB6T4GLL.cjs.map +0 -1
- package/dist/chunk-JBQQ7THH.js +0 -20
- package/dist/chunk-JBQQ7THH.js.map +0 -1
- package/dist/chunk-JFRT7S3B.cjs.map +0 -1
- package/dist/chunk-KF6K7TGH.js.map +0 -1
- package/dist/chunk-LTXQOEIC.js.map +0 -1
- package/dist/chunk-MKJ4KXL5.cjs +0 -12
- package/dist/chunk-MRDBBHIZ.cjs.map +0 -1
- package/dist/chunk-NVY5CJFP.js.map +0 -1
- package/dist/chunk-PWLJ77UV.cjs +0 -23
- package/dist/chunk-PWLJ77UV.cjs.map +0 -1
- package/dist/chunk-S5TERQVW.js.map +0 -1
- package/dist/chunk-SHFBB23Q.js.map +0 -1
- package/dist/chunk-SIT26LAZ.cjs.map +0 -1
- package/dist/chunk-SR725PWF.cjs.map +0 -1
- package/dist/chunk-TQHGE7UC.cjs.map +0 -1
- package/dist/chunk-UGHG7PGX.js.map +0 -1
- package/dist/chunk-UGHQV7MP.cjs.map +0 -1
- package/dist/chunk-YIURNGXI.js +0 -155
- package/dist/chunk-YIURNGXI.js.map +0 -1
- package/dist/chunk-YYUHLYM2.cjs.map +0 -1
- package/dist/chunk-Z2JCLZFJ.js.map +0 -1
- package/dist/chunk-ZFMCDJGB.js.map +0 -1
- package/dist/chunk-ZLONH2UD.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkSHC7BCG5_cjs = require('./chunk-SHC7BCG5.cjs');
|
|
4
|
+
var chunkTEC24ZDA_cjs = require('./chunk-TEC24ZDA.cjs');
|
|
5
|
+
var chunkOJHD3LXJ_cjs = require('./chunk-OJHD3LXJ.cjs');
|
|
6
6
|
var pgCore = require('drizzle-orm/pg-core');
|
|
7
7
|
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
8
8
|
var drizzleOrm = require('drizzle-orm');
|
|
@@ -12,8 +12,8 @@ var DIALECT_BY_BACKEND_NAME = {
|
|
|
12
12
|
SQLite: "sqlite"
|
|
13
13
|
};
|
|
14
14
|
function compileQueryWithDialect(db, query, backendName) {
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
15
|
+
if (chunkOJHD3LXJ_cjs.isSqlFragment(query)) {
|
|
16
|
+
return chunkOJHD3LXJ_cjs.renderSql(query, DIALECT_BY_BACKEND_NAME[backendName]);
|
|
17
17
|
}
|
|
18
18
|
const databaseWithCompiler = db;
|
|
19
19
|
const compiler = databaseWithCompiler.dialect;
|
|
@@ -32,13 +32,13 @@ function toDrizzleSql(fragment, dialect) {
|
|
|
32
32
|
return drizzleOrm.sql.raw(`"${chunk.value.replaceAll('"', '""')}"`);
|
|
33
33
|
}
|
|
34
34
|
case "parameter": {
|
|
35
|
-
return drizzleOrm.sql.param(
|
|
35
|
+
return drizzleOrm.sql.param(chunkOJHD3LXJ_cjs.bindSqlValue(chunk.value, dialect));
|
|
36
36
|
}
|
|
37
37
|
case "placeholder": {
|
|
38
38
|
return drizzleOrm.sql.placeholder(chunk.value.name);
|
|
39
39
|
}
|
|
40
40
|
default: {
|
|
41
|
-
return
|
|
41
|
+
return chunkOJHD3LXJ_cjs.throwUnsupportedSqlChunk(chunk);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
});
|
|
@@ -51,9 +51,9 @@ function buildPostgresNodeIndexBuilders(table, indexes) {
|
|
|
51
51
|
(index) => index.entity === "node" && index.method === void 0
|
|
52
52
|
);
|
|
53
53
|
return nodeIndexes.map((index) => {
|
|
54
|
-
const propsColumn =
|
|
55
|
-
const systemColumn = (column) =>
|
|
56
|
-
const { keys } =
|
|
54
|
+
const propsColumn = chunkOJHD3LXJ_cjs.sql.identifier(table.props.name);
|
|
55
|
+
const systemColumn = (column) => chunkOJHD3LXJ_cjs.sql.identifier(getPostgresNodeSystemColumn(table, column).name);
|
|
56
|
+
const { keys } = chunkTEC24ZDA_cjs.compileNodeIndexKeys(
|
|
57
57
|
index,
|
|
58
58
|
"postgres",
|
|
59
59
|
propsColumn,
|
|
@@ -72,7 +72,7 @@ function buildPostgresNodeIndexBuilders(table, indexes) {
|
|
|
72
72
|
systemColumn
|
|
73
73
|
};
|
|
74
74
|
builder.where(
|
|
75
|
-
toDrizzleSql(
|
|
75
|
+
toDrizzleSql(chunkTEC24ZDA_cjs.compileIndexWhere(ctx, index.where), "postgres")
|
|
76
76
|
);
|
|
77
77
|
}
|
|
78
78
|
return builder;
|
|
@@ -83,9 +83,9 @@ function buildPostgresEdgeIndexBuilders(table, indexes) {
|
|
|
83
83
|
(index) => index.entity === "edge" && index.method === void 0
|
|
84
84
|
);
|
|
85
85
|
return edgeIndexes.map((index) => {
|
|
86
|
-
const propsColumn =
|
|
87
|
-
const systemColumn = (column) =>
|
|
88
|
-
const { keys } =
|
|
86
|
+
const propsColumn = chunkOJHD3LXJ_cjs.sql.identifier(table.props.name);
|
|
87
|
+
const systemColumn = (column) => chunkOJHD3LXJ_cjs.sql.identifier(getPostgresEdgeSystemColumn(table, column).name);
|
|
88
|
+
const { keys } = chunkTEC24ZDA_cjs.compileEdgeIndexKeys(
|
|
89
89
|
index,
|
|
90
90
|
"postgres",
|
|
91
91
|
propsColumn,
|
|
@@ -104,7 +104,7 @@ function buildPostgresEdgeIndexBuilders(table, indexes) {
|
|
|
104
104
|
systemColumn
|
|
105
105
|
};
|
|
106
106
|
builder.where(
|
|
107
|
-
toDrizzleSql(
|
|
107
|
+
toDrizzleSql(chunkTEC24ZDA_cjs.compileIndexWhere(ctx, index.where), "postgres")
|
|
108
108
|
);
|
|
109
109
|
}
|
|
110
110
|
return builder;
|
|
@@ -195,9 +195,9 @@ function buildSqliteNodeIndexBuilders(table, indexes) {
|
|
|
195
195
|
(index) => index.entity === "node" && index.method === void 0
|
|
196
196
|
);
|
|
197
197
|
return nodeIndexes.map((index) => {
|
|
198
|
-
const propsColumn =
|
|
199
|
-
const systemColumn = (column) =>
|
|
200
|
-
const { keys } =
|
|
198
|
+
const propsColumn = chunkOJHD3LXJ_cjs.sql.identifier(table.props.name);
|
|
199
|
+
const systemColumn = (column) => chunkOJHD3LXJ_cjs.sql.identifier(getSqliteNodeSystemColumn(table, column).name);
|
|
200
|
+
const { keys } = chunkTEC24ZDA_cjs.compileNodeIndexKeys(
|
|
201
201
|
index,
|
|
202
202
|
"sqlite",
|
|
203
203
|
propsColumn,
|
|
@@ -216,7 +216,7 @@ function buildSqliteNodeIndexBuilders(table, indexes) {
|
|
|
216
216
|
systemColumn
|
|
217
217
|
};
|
|
218
218
|
builder.where(
|
|
219
|
-
toDrizzleSql(
|
|
219
|
+
toDrizzleSql(chunkTEC24ZDA_cjs.compileIndexWhere(ctx, index.where), "sqlite")
|
|
220
220
|
);
|
|
221
221
|
}
|
|
222
222
|
return builder;
|
|
@@ -227,9 +227,9 @@ function buildSqliteEdgeIndexBuilders(table, indexes) {
|
|
|
227
227
|
(index) => index.entity === "edge" && index.method === void 0
|
|
228
228
|
);
|
|
229
229
|
return edgeIndexes.map((index) => {
|
|
230
|
-
const propsColumn =
|
|
231
|
-
const systemColumn = (column) =>
|
|
232
|
-
const { keys } =
|
|
230
|
+
const propsColumn = chunkOJHD3LXJ_cjs.sql.identifier(table.props.name);
|
|
231
|
+
const systemColumn = (column) => chunkOJHD3LXJ_cjs.sql.identifier(getSqliteEdgeSystemColumn(table, column).name);
|
|
232
|
+
const { keys } = chunkTEC24ZDA_cjs.compileEdgeIndexKeys(
|
|
233
233
|
index,
|
|
234
234
|
"sqlite",
|
|
235
235
|
propsColumn,
|
|
@@ -248,7 +248,7 @@ function buildSqliteEdgeIndexBuilders(table, indexes) {
|
|
|
248
248
|
systemColumn
|
|
249
249
|
};
|
|
250
250
|
builder.where(
|
|
251
|
-
toDrizzleSql(
|
|
251
|
+
toDrizzleSql(chunkTEC24ZDA_cjs.compileIndexWhere(ctx, index.where), "sqlite")
|
|
252
252
|
);
|
|
253
253
|
}
|
|
254
254
|
return builder;
|
|
@@ -350,10 +350,10 @@ function resolveSystemIndexColumns(declaration, columns) {
|
|
|
350
350
|
return resolved;
|
|
351
351
|
}
|
|
352
352
|
function buildSystemIndexBuilders(tableKey, physicalTableName, columns, indexFactory) {
|
|
353
|
-
return
|
|
353
|
+
return chunkSHC7BCG5_cjs.SYSTEM_INDEX_DECLARATIONS.filter(
|
|
354
354
|
(declaration) => declaration.table === tableKey
|
|
355
355
|
).map(
|
|
356
|
-
(declaration) => indexFactory(
|
|
356
|
+
(declaration) => indexFactory(chunkSHC7BCG5_cjs.systemIndexName(physicalTableName, declaration.suffix)).on(
|
|
357
357
|
...resolveSystemIndexColumns(declaration, columns)
|
|
358
358
|
)
|
|
359
359
|
);
|
|
@@ -388,5 +388,5 @@ exports.buildSqliteNodeIndexBuilders = buildSqliteNodeIndexBuilders;
|
|
|
388
388
|
exports.buildSqliteSystemIndexBuilders = buildSqliteSystemIndexBuilders;
|
|
389
389
|
exports.compileQueryWithDialect = compileQueryWithDialect;
|
|
390
390
|
exports.toDrizzleSql = toDrizzleSql;
|
|
391
|
-
//# sourceMappingURL=chunk-
|
|
392
|
-
//# sourceMappingURL=chunk-
|
|
391
|
+
//# sourceMappingURL=chunk-45YZXI6X.cjs.map
|
|
392
|
+
//# sourceMappingURL=chunk-45YZXI6X.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/drizzle/execution/types.ts","../src/indexes/drizzle.ts"],"names":["isSqlFragment","renderSql","drizzleSql","bindSqlValue","throwUnsupportedSqlChunk","sql","compileNodeIndexKeys","pgUniqueIndex","pgIndex","compileIndexWhere","compileEdgeIndexKeys","sqliteUniqueIndex","sqliteIndex","SYSTEM_INDEX_DECLARATIONS","systemIndexName"],"mappings":"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","file":"chunk-WODMN3Q2.cjs","sourcesContent":["import { type SQL as DrizzleSql, sql as drizzleSql } from \"drizzle-orm\";\n\nimport { bindSqlValue } from \"../../../query/dialect/profile\";\nimport { type SqlDialect } from \"../../../query/dialect/types\";\nimport {\n isSqlFragment,\n renderSql,\n type SqlFragment,\n throwUnsupportedSqlChunk,\n} from \"../../../query/sql-fragment\";\n\nexport type ExecutableSql = DrizzleSql | SqlFragment;\n\nexport type CompiledSqlQuery = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\nexport type PreparedSqlStatement = Readonly<{\n execute: <TRow>(params: readonly unknown[]) => Promise<readonly TRow[]>;\n}>;\n\nexport type SqlExecutionAdapter = Readonly<{\n compile: (query: ExecutableSql) => CompiledSqlQuery;\n execute: <TRow>(query: ExecutableSql) => Promise<readonly TRow[]>;\n executeCompiled?: <TRow>(\n compiledQuery: CompiledSqlQuery,\n ) => Promise<readonly TRow[]>;\n prepare?: (sqlText: string) => PreparedSqlStatement;\n /**\n * Runs `critical` with exclusive use of the connection: no statement from\n * anywhere else can interleave with the ones it issues.\n *\n * Statement-at-a-time serialization is not enough for a *sequence* that must\n * be atomic. `SET LOCAL` around a query is the motivating case — snapshot,\n * set, select, restore. Two searches whose statements merely take turns can\n * still interleave as `A snapshot → B snapshot → A set → B set → A select`,\n * and `A` then runs under `B`'s settings.\n *\n * `critical` is handed the unqueued adapter, so it must not attempt to\n * re-enter the queue. Present only on transaction-scoped (serialized)\n * adapters; a pooled adapter needs no exclusion because every statement gets\n * its own connection.\n */\n runExclusive?: <T>(\n critical: (connection: SqlExecutionAdapter) => Promise<T>,\n ) => Promise<T>;\n}>;\n\ntype SqlCompiler = Readonly<{\n sqlToQuery: (query: DrizzleSql) => CompiledSqlQuery;\n}>;\n\ntype DatabaseWithCompiler = Readonly<{\n dialect?: SqlCompiler;\n}>;\n\ntype BackendName = \"PostgreSQL\" | \"SQLite\";\n\nconst DIALECT_BY_BACKEND_NAME = {\n PostgreSQL: \"postgres\",\n SQLite: \"sqlite\",\n} as const satisfies Record<BackendName, SqlDialect>;\n\nexport function compileQueryWithDialect(\n db: unknown,\n query: ExecutableSql,\n backendName: BackendName,\n): CompiledSqlQuery {\n if (isSqlFragment(query)) {\n return renderSql(query, DIALECT_BY_BACKEND_NAME[backendName]);\n }\n const databaseWithCompiler = db as DatabaseWithCompiler;\n const compiler = databaseWithCompiler.dialect;\n if (compiler === undefined) {\n throw new Error(`${backendName} backend is missing a SQL compiler`);\n }\n return compiler.sqlToQuery(query);\n}\n\n/**\n * Translates TypeGraph's fragment IR into Drizzle's adapter-native SQL object.\n *\n * Most execution paths render directly to text and parameters. Async SQLite\n * drivers expose only Drizzle's execution method, so that adapter needs this\n * lossless bridge at its final boundary.\n */\nexport function toDrizzleSql(\n fragment: SqlFragment,\n dialect: SqlDialect,\n): DrizzleSql {\n const chunks = fragment.chunks.map((chunk) => {\n switch (chunk.kind) {\n case \"text\": {\n return drizzleSql.raw(chunk.value);\n }\n case \"identifier\": {\n // Drizzle's schema builders treat Name chunks as bare index-column\n // references and omit dialect quoting. Preserve the portable IR's\n // identifier semantics by handing the adapter an already-quoted,\n // trusted SQL token instead.\n return drizzleSql.raw(`\"${chunk.value.replaceAll('\"', '\"\"')}\"`);\n }\n case \"parameter\": {\n return drizzleSql.param(bindSqlValue(chunk.value, dialect));\n }\n case \"placeholder\": {\n return drizzleSql.placeholder(chunk.value.name);\n }\n default: {\n return throwUnsupportedSqlChunk(chunk);\n }\n }\n });\n return drizzleSql.join(chunks);\n}\n","import { type SQLWrapper } from \"drizzle-orm\";\nimport {\n index as pgIndex,\n type IndexBuilder as PgIndexBuilder,\n type PgColumn,\n uniqueIndex as pgUniqueIndex,\n} from \"drizzle-orm/pg-core\";\nimport {\n index as sqliteIndex,\n type IndexBuilder as SqliteIndexBuilder,\n type SQLiteColumn,\n uniqueIndex as sqliteUniqueIndex,\n} from \"drizzle-orm/sqlite-core\";\n\nimport { toDrizzleSql } from \"../backend/drizzle/execution/types\";\nimport { sql as portableSql, type SqlFragment } from \"../query/sql-fragment\";\nimport {\n compileEdgeIndexKeys,\n compileIndexWhere,\n compileNodeIndexKeys,\n type IndexCompilationContext,\n} from \"./compiler\";\nimport {\n SYSTEM_INDEX_DECLARATIONS,\n type SystemIndexDeclaration,\n systemIndexName,\n type SystemIndexTable,\n} from \"./system\";\nimport {\n type EdgeIndexDeclaration,\n type IndexDeclaration,\n type NodeIndexDeclaration,\n type SystemColumnName,\n} from \"./types\";\n\n// ============================================================\n// PostgreSQL (Drizzle Schema)\n// ============================================================\n\nexport function buildPostgresNodeIndexBuilders(\n table: NodeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly PgIndexBuilder[] {\n // GIN-family declarations (method: \"gin\" / \"trigram\") are\n // materialize-only — like pgvector ANN indexes, they are a pure\n // materialization concern and never ride the Drizzle table extras.\n const nodeIndexes = indexes.filter(\n (index): index is NodeIndexDeclaration =>\n index.entity === \"node\" && index.method === undefined,\n );\n\n return nodeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getPostgresNodeSystemColumn(table, column).name);\n\n const { keys } = compileNodeIndexKeys(\n index,\n \"postgres\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `node index \"${index.name}\"`);\n\n const base = index.unique ? pgUniqueIndex(index.name) : pgIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"postgres\"));\n assertNonEmpty(drizzleKeys, `node index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"postgres\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"postgres\"),\n );\n }\n\n return builder;\n });\n}\n\nexport function buildPostgresEdgeIndexBuilders(\n table: EdgeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly PgIndexBuilder[] {\n const edgeIndexes = indexes.filter(\n (index): index is EdgeIndexDeclaration =>\n index.entity === \"edge\" && index.method === undefined,\n );\n\n return edgeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getPostgresEdgeSystemColumn(table, column).name);\n\n const { keys } = compileEdgeIndexKeys(\n index,\n \"postgres\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `edge index \"${index.name}\"`);\n\n const base = index.unique ? pgUniqueIndex(index.name) : pgIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"postgres\"));\n assertNonEmpty(drizzleKeys, `edge index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"postgres\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"postgres\"),\n );\n }\n\n return builder;\n });\n}\n\nfunction getPostgresNodeSystemColumn(\n table: NodeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\":\n case \"from_id\":\n case \"to_kind\":\n case \"to_id\": {\n throw new Error(`Unsupported node system column for indexes: ${column}`);\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n return table.version;\n }\n }\n}\n\nfunction getPostgresEdgeSystemColumn(\n table: EdgeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\": {\n return table.fromKind;\n }\n case \"from_id\": {\n return table.fromId;\n }\n case \"to_kind\": {\n return table.toKind;\n }\n case \"to_id\": {\n return table.toId;\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n throw new Error(`Unsupported edge system column for indexes: ${column}`);\n }\n }\n}\n\n// ============================================================\n// SQLite (Drizzle Schema)\n// ============================================================\n\nexport function buildSqliteNodeIndexBuilders(\n table: NodeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly SqliteIndexBuilder[] {\n // GIN-family declarations (method: \"gin\" / \"trigram\") are\n // materialize-only — like pgvector ANN indexes, they are a pure\n // materialization concern and never ride the Drizzle table extras.\n const nodeIndexes = indexes.filter(\n (index): index is NodeIndexDeclaration =>\n index.entity === \"node\" && index.method === undefined,\n );\n\n return nodeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getSqliteNodeSystemColumn(table, column).name);\n\n const { keys } = compileNodeIndexKeys(\n index,\n \"sqlite\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `node index \"${index.name}\"`);\n\n const base =\n index.unique ? sqliteUniqueIndex(index.name) : sqliteIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"sqlite\"));\n assertNonEmpty(drizzleKeys, `node index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"sqlite\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"sqlite\"),\n );\n }\n\n return builder;\n });\n}\n\nexport function buildSqliteEdgeIndexBuilders(\n table: EdgeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly SqliteIndexBuilder[] {\n const edgeIndexes = indexes.filter(\n (index): index is EdgeIndexDeclaration =>\n index.entity === \"edge\" && index.method === undefined,\n );\n\n return edgeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getSqliteEdgeSystemColumn(table, column).name);\n\n const { keys } = compileEdgeIndexKeys(\n index,\n \"sqlite\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `edge index \"${index.name}\"`);\n\n const base =\n index.unique ? sqliteUniqueIndex(index.name) : sqliteIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"sqlite\"));\n assertNonEmpty(drizzleKeys, `edge index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"sqlite\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"sqlite\"),\n );\n }\n\n return builder;\n });\n}\n\nfunction getSqliteNodeSystemColumn(\n table: NodeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\":\n case \"from_id\":\n case \"to_kind\":\n case \"to_id\": {\n throw new Error(`Unsupported node system column for indexes: ${column}`);\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n return table.version;\n }\n }\n}\n\nfunction getSqliteEdgeSystemColumn(\n table: EdgeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\": {\n return table.fromKind;\n }\n case \"from_id\": {\n return table.fromId;\n }\n case \"to_kind\": {\n return table.toKind;\n }\n case \"to_id\": {\n return table.toId;\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n throw new Error(`Unsupported edge system column for indexes: ${column}`);\n }\n }\n}\n\n// ============================================================\n// System indexes (both dialects)\n// ============================================================\n//\n// The schema factories derive their system-index Drizzle builders from\n// `SYSTEM_INDEX_DECLARATIONS` so both dialects emit the same index set by\n// construction. The builders receive the table's real column objects (not\n// SQL wrappers) so the DDL generator renders plain quoted column names —\n// byte-identical to the runtime DDL `materializeSystemIndexes` emits.\n\ntype SystemIndexColumns<C extends { name: string }> = Readonly<\n Record<string, C>\n>;\n\n/**\n * Resolves a declaration's physical column names against the table's own\n * column objects by each column's `.name` — the SQL name Drizzle carries on\n * the column itself — so no naming convention sits between the declaration\n * and the schema. A column the table doesn't define throws at\n * table-construction time (exercised by the system-index parity tests).\n */\nfunction resolveSystemIndexColumns<C extends { name: string }>(\n declaration: SystemIndexDeclaration,\n columns: SystemIndexColumns<C>,\n): readonly [C, ...C[]] {\n const byPhysicalName = new Map(\n Object.values(columns).map((column) => [column.name, column]),\n );\n const resolved = declaration.columns.map((column) => {\n const value = byPhysicalName.get(column);\n if (value === undefined) {\n throw new Error(\n `System index \"${declaration.table}_${declaration.suffix}\" references ` +\n `a column \"${column}\" the ${declaration.table} table does not define`,\n );\n }\n return value;\n });\n // `declaration.columns` is non-empty by type, so `resolved` is too.\n return resolved as [C, ...C[]];\n}\n\n/**\n * The two dialect variants do no dialect-specific work (no unique, no\n * where, no expression compilation — unlike the node/edge builder pairs\n * above), so they share one body parameterized by the dialect's index\n * factory.\n */\nfunction buildSystemIndexBuilders<C extends { name: string }, B>(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<C>,\n indexFactory: (name: string) => { on: (...cols: [C, ...C[]]) => B },\n): readonly B[] {\n return SYSTEM_INDEX_DECLARATIONS.filter(\n (declaration) => declaration.table === tableKey,\n ).map((declaration) =>\n indexFactory(systemIndexName(physicalTableName, declaration.suffix)).on(\n ...resolveSystemIndexColumns(declaration, columns),\n ),\n );\n}\n\nexport function buildSqliteSystemIndexBuilders(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<SQLiteColumn>,\n): readonly SqliteIndexBuilder[] {\n return buildSystemIndexBuilders(\n tableKey,\n physicalTableName,\n columns,\n (name) => sqliteIndex(name),\n );\n}\n\nexport function buildPostgresSystemIndexBuilders(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<PgColumn>,\n): readonly PgIndexBuilder[] {\n return buildSystemIndexBuilders(\n tableKey,\n physicalTableName,\n columns,\n (name) => pgIndex(name),\n );\n}\n\n// ============================================================\n// Minimal table shapes (shared between dialect schemas)\n// ============================================================\n\ntype NamedSqlWrapper = SQLWrapper & Readonly<{ name: string }>;\n\ntype NodeIndexTable = Readonly<{\n graphId: NamedSqlWrapper;\n kind: NamedSqlWrapper;\n id: NamedSqlWrapper;\n props: NamedSqlWrapper;\n version: NamedSqlWrapper;\n validFrom: NamedSqlWrapper;\n validTo: NamedSqlWrapper;\n createdAt: NamedSqlWrapper;\n updatedAt: NamedSqlWrapper;\n deletedAt: NamedSqlWrapper;\n}>;\n\ntype EdgeIndexTable = Readonly<{\n graphId: NamedSqlWrapper;\n id: NamedSqlWrapper;\n kind: NamedSqlWrapper;\n fromKind: NamedSqlWrapper;\n fromId: NamedSqlWrapper;\n toKind: NamedSqlWrapper;\n toId: NamedSqlWrapper;\n props: NamedSqlWrapper;\n validFrom: NamedSqlWrapper;\n validTo: NamedSqlWrapper;\n createdAt: NamedSqlWrapper;\n updatedAt: NamedSqlWrapper;\n deletedAt: NamedSqlWrapper;\n}>;\n\nfunction assertNonEmpty<T>(\n values: readonly T[],\n label: string,\n): asserts values is readonly [T, ...T[]] {\n if (values.length === 0) {\n throw new Error(`Index must have at least one key (${label})`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/execution/types.ts","../src/indexes/drizzle.ts"],"names":["isSqlFragment","renderSql","drizzleSql","bindSqlValue","throwUnsupportedSqlChunk","sql","compileNodeIndexKeys","pgUniqueIndex","pgIndex","compileIndexWhere","compileEdgeIndexKeys","sqliteUniqueIndex","sqliteIndex","SYSTEM_INDEX_DECLARATIONS","systemIndexName"],"mappings":"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","file":"chunk-45YZXI6X.cjs","sourcesContent":["import { type SQL as DrizzleSql, sql as drizzleSql } from \"drizzle-orm\";\n\nimport { bindSqlValue } from \"../../../query/dialect/profile\";\nimport { type SqlDialect } from \"../../../query/dialect/types\";\nimport {\n isSqlFragment,\n renderSql,\n type SqlFragment,\n throwUnsupportedSqlChunk,\n} from \"../../../query/sql-fragment\";\n\nexport type ExecutableSql = DrizzleSql | SqlFragment;\n\nexport type CompiledSqlQuery = Readonly<{\n params: readonly unknown[];\n sql: string;\n}>;\n\nexport type PreparedSqlStatement = Readonly<{\n execute: <TRow>(params: readonly unknown[]) => Promise<readonly TRow[]>;\n}>;\n\nexport type SqlExecutionAdapter = Readonly<{\n compile: (query: ExecutableSql) => CompiledSqlQuery;\n execute: <TRow>(query: ExecutableSql) => Promise<readonly TRow[]>;\n executeCompiled?: <TRow>(\n compiledQuery: CompiledSqlQuery,\n ) => Promise<readonly TRow[]>;\n prepare?: (sqlText: string) => PreparedSqlStatement;\n /**\n * Runs `critical` with exclusive use of the connection: no statement from\n * anywhere else can interleave with the ones it issues.\n *\n * Statement-at-a-time serialization is not enough for a *sequence* that must\n * be atomic. `SET LOCAL` around a query is the motivating case — snapshot,\n * set, select, restore. Two searches whose statements merely take turns can\n * still interleave as `A snapshot → B snapshot → A set → B set → A select`,\n * and `A` then runs under `B`'s settings.\n *\n * `critical` is handed the unqueued adapter, so it must not attempt to\n * re-enter the queue. Present only on transaction-scoped (serialized)\n * adapters; a pooled adapter needs no exclusion because every statement gets\n * its own connection.\n */\n runExclusive?: <T>(\n critical: (connection: SqlExecutionAdapter) => Promise<T>,\n ) => Promise<T>;\n}>;\n\ntype SqlCompiler = Readonly<{\n sqlToQuery: (query: DrizzleSql) => CompiledSqlQuery;\n}>;\n\ntype DatabaseWithCompiler = Readonly<{\n dialect?: SqlCompiler;\n}>;\n\ntype BackendName = \"PostgreSQL\" | \"SQLite\";\n\nconst DIALECT_BY_BACKEND_NAME = {\n PostgreSQL: \"postgres\",\n SQLite: \"sqlite\",\n} as const satisfies Record<BackendName, SqlDialect>;\n\nexport function compileQueryWithDialect(\n db: unknown,\n query: ExecutableSql,\n backendName: BackendName,\n): CompiledSqlQuery {\n if (isSqlFragment(query)) {\n return renderSql(query, DIALECT_BY_BACKEND_NAME[backendName]);\n }\n const databaseWithCompiler = db as DatabaseWithCompiler;\n const compiler = databaseWithCompiler.dialect;\n if (compiler === undefined) {\n throw new Error(`${backendName} backend is missing a SQL compiler`);\n }\n return compiler.sqlToQuery(query);\n}\n\n/**\n * Translates TypeGraph's fragment IR into Drizzle's adapter-native SQL object.\n *\n * Most execution paths render directly to text and parameters. Async SQLite\n * drivers expose only Drizzle's execution method, so that adapter needs this\n * lossless bridge at its final boundary.\n */\nexport function toDrizzleSql(\n fragment: SqlFragment,\n dialect: SqlDialect,\n): DrizzleSql {\n const chunks = fragment.chunks.map((chunk) => {\n switch (chunk.kind) {\n case \"text\": {\n return drizzleSql.raw(chunk.value);\n }\n case \"identifier\": {\n // Drizzle's schema builders treat Name chunks as bare index-column\n // references and omit dialect quoting. Preserve the portable IR's\n // identifier semantics by handing the adapter an already-quoted,\n // trusted SQL token instead.\n return drizzleSql.raw(`\"${chunk.value.replaceAll('\"', '\"\"')}\"`);\n }\n case \"parameter\": {\n return drizzleSql.param(bindSqlValue(chunk.value, dialect));\n }\n case \"placeholder\": {\n return drizzleSql.placeholder(chunk.value.name);\n }\n default: {\n return throwUnsupportedSqlChunk(chunk);\n }\n }\n });\n return drizzleSql.join(chunks);\n}\n","import { type SQLWrapper } from \"drizzle-orm\";\nimport {\n index as pgIndex,\n type IndexBuilder as PgIndexBuilder,\n type PgColumn,\n uniqueIndex as pgUniqueIndex,\n} from \"drizzle-orm/pg-core\";\nimport {\n index as sqliteIndex,\n type IndexBuilder as SqliteIndexBuilder,\n type SQLiteColumn,\n uniqueIndex as sqliteUniqueIndex,\n} from \"drizzle-orm/sqlite-core\";\n\nimport { toDrizzleSql } from \"../backend/drizzle/execution/types\";\nimport { sql as portableSql, type SqlFragment } from \"../query/sql-fragment\";\nimport {\n compileEdgeIndexKeys,\n compileIndexWhere,\n compileNodeIndexKeys,\n type IndexCompilationContext,\n} from \"./compiler\";\nimport {\n SYSTEM_INDEX_DECLARATIONS,\n type SystemIndexDeclaration,\n systemIndexName,\n type SystemIndexTable,\n} from \"./system\";\nimport {\n type EdgeIndexDeclaration,\n type IndexDeclaration,\n type NodeIndexDeclaration,\n type SystemColumnName,\n} from \"./types\";\n\n// ============================================================\n// PostgreSQL (Drizzle Schema)\n// ============================================================\n\nexport function buildPostgresNodeIndexBuilders(\n table: NodeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly PgIndexBuilder[] {\n // GIN-family declarations (method: \"gin\" / \"trigram\") are\n // materialize-only — like pgvector ANN indexes, they are a pure\n // materialization concern and never ride the Drizzle table extras.\n const nodeIndexes = indexes.filter(\n (index): index is NodeIndexDeclaration =>\n index.entity === \"node\" && index.method === undefined,\n );\n\n return nodeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getPostgresNodeSystemColumn(table, column).name);\n\n const { keys } = compileNodeIndexKeys(\n index,\n \"postgres\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `node index \"${index.name}\"`);\n\n const base = index.unique ? pgUniqueIndex(index.name) : pgIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"postgres\"));\n assertNonEmpty(drizzleKeys, `node index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"postgres\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"postgres\"),\n );\n }\n\n return builder;\n });\n}\n\nexport function buildPostgresEdgeIndexBuilders(\n table: EdgeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly PgIndexBuilder[] {\n const edgeIndexes = indexes.filter(\n (index): index is EdgeIndexDeclaration =>\n index.entity === \"edge\" && index.method === undefined,\n );\n\n return edgeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getPostgresEdgeSystemColumn(table, column).name);\n\n const { keys } = compileEdgeIndexKeys(\n index,\n \"postgres\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `edge index \"${index.name}\"`);\n\n const base = index.unique ? pgUniqueIndex(index.name) : pgIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"postgres\"));\n assertNonEmpty(drizzleKeys, `edge index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"postgres\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"postgres\"),\n );\n }\n\n return builder;\n });\n}\n\nfunction getPostgresNodeSystemColumn(\n table: NodeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\":\n case \"from_id\":\n case \"to_kind\":\n case \"to_id\": {\n throw new Error(`Unsupported node system column for indexes: ${column}`);\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n return table.version;\n }\n }\n}\n\nfunction getPostgresEdgeSystemColumn(\n table: EdgeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\": {\n return table.fromKind;\n }\n case \"from_id\": {\n return table.fromId;\n }\n case \"to_kind\": {\n return table.toKind;\n }\n case \"to_id\": {\n return table.toId;\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n throw new Error(`Unsupported edge system column for indexes: ${column}`);\n }\n }\n}\n\n// ============================================================\n// SQLite (Drizzle Schema)\n// ============================================================\n\nexport function buildSqliteNodeIndexBuilders(\n table: NodeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly SqliteIndexBuilder[] {\n // GIN-family declarations (method: \"gin\" / \"trigram\") are\n // materialize-only — like pgvector ANN indexes, they are a pure\n // materialization concern and never ride the Drizzle table extras.\n const nodeIndexes = indexes.filter(\n (index): index is NodeIndexDeclaration =>\n index.entity === \"node\" && index.method === undefined,\n );\n\n return nodeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getSqliteNodeSystemColumn(table, column).name);\n\n const { keys } = compileNodeIndexKeys(\n index,\n \"sqlite\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `node index \"${index.name}\"`);\n\n const base =\n index.unique ? sqliteUniqueIndex(index.name) : sqliteIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"sqlite\"));\n assertNonEmpty(drizzleKeys, `node index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"sqlite\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"sqlite\"),\n );\n }\n\n return builder;\n });\n}\n\nexport function buildSqliteEdgeIndexBuilders(\n table: EdgeIndexTable,\n indexes: readonly IndexDeclaration[],\n): readonly SqliteIndexBuilder[] {\n const edgeIndexes = indexes.filter(\n (index): index is EdgeIndexDeclaration =>\n index.entity === \"edge\" && index.method === undefined,\n );\n\n return edgeIndexes.map((index) => {\n const propsColumn = portableSql.identifier(table.props.name);\n const systemColumn = (column: SystemColumnName): SqlFragment =>\n portableSql.identifier(getSqliteEdgeSystemColumn(table, column).name);\n\n const { keys } = compileEdgeIndexKeys(\n index,\n \"sqlite\",\n propsColumn,\n systemColumn,\n );\n assertNonEmpty(keys, `edge index \"${index.name}\"`);\n\n const base =\n index.unique ? sqliteUniqueIndex(index.name) : sqliteIndex(index.name);\n\n const drizzleKeys = keys.map((key) => toDrizzleSql(key, \"sqlite\"));\n assertNonEmpty(drizzleKeys, `edge index \"${index.name}\"`);\n const [firstKey, ...remainingKeys] = drizzleKeys;\n const builder = base.on(firstKey, ...remainingKeys);\n\n if (index.where) {\n const ctx: IndexCompilationContext = {\n dialect: \"sqlite\",\n propsColumn,\n systemColumn,\n };\n builder.where(\n toDrizzleSql(compileIndexWhere(ctx, index.where), \"sqlite\"),\n );\n }\n\n return builder;\n });\n}\n\nfunction getSqliteNodeSystemColumn(\n table: NodeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\":\n case \"from_id\":\n case \"to_kind\":\n case \"to_id\": {\n throw new Error(`Unsupported node system column for indexes: ${column}`);\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n return table.version;\n }\n }\n}\n\nfunction getSqliteEdgeSystemColumn(\n table: EdgeIndexTable,\n column: SystemColumnName,\n): NamedSqlWrapper {\n switch (column) {\n case \"graph_id\": {\n return table.graphId;\n }\n case \"kind\": {\n return table.kind;\n }\n case \"id\": {\n return table.id;\n }\n case \"from_kind\": {\n return table.fromKind;\n }\n case \"from_id\": {\n return table.fromId;\n }\n case \"to_kind\": {\n return table.toKind;\n }\n case \"to_id\": {\n return table.toId;\n }\n case \"deleted_at\": {\n return table.deletedAt;\n }\n case \"valid_from\": {\n return table.validFrom;\n }\n case \"valid_to\": {\n return table.validTo;\n }\n case \"created_at\": {\n return table.createdAt;\n }\n case \"updated_at\": {\n return table.updatedAt;\n }\n case \"version\": {\n throw new Error(`Unsupported edge system column for indexes: ${column}`);\n }\n }\n}\n\n// ============================================================\n// System indexes (both dialects)\n// ============================================================\n//\n// The schema factories derive their system-index Drizzle builders from\n// `SYSTEM_INDEX_DECLARATIONS` so both dialects emit the same index set by\n// construction. The builders receive the table's real column objects (not\n// SQL wrappers) so the DDL generator renders plain quoted column names —\n// byte-identical to the runtime DDL `materializeSystemIndexes` emits.\n\ntype SystemIndexColumns<C extends { name: string }> = Readonly<\n Record<string, C>\n>;\n\n/**\n * Resolves a declaration's physical column names against the table's own\n * column objects by each column's `.name` — the SQL name Drizzle carries on\n * the column itself — so no naming convention sits between the declaration\n * and the schema. A column the table doesn't define throws at\n * table-construction time (exercised by the system-index parity tests).\n */\nfunction resolveSystemIndexColumns<C extends { name: string }>(\n declaration: SystemIndexDeclaration,\n columns: SystemIndexColumns<C>,\n): readonly [C, ...C[]] {\n const byPhysicalName = new Map(\n Object.values(columns).map((column) => [column.name, column]),\n );\n const resolved = declaration.columns.map((column) => {\n const value = byPhysicalName.get(column);\n if (value === undefined) {\n throw new Error(\n `System index \"${declaration.table}_${declaration.suffix}\" references ` +\n `a column \"${column}\" the ${declaration.table} table does not define`,\n );\n }\n return value;\n });\n // `declaration.columns` is non-empty by type, so `resolved` is too.\n return resolved as [C, ...C[]];\n}\n\n/**\n * The two dialect variants do no dialect-specific work (no unique, no\n * where, no expression compilation — unlike the node/edge builder pairs\n * above), so they share one body parameterized by the dialect's index\n * factory.\n */\nfunction buildSystemIndexBuilders<C extends { name: string }, B>(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<C>,\n indexFactory: (name: string) => { on: (...cols: [C, ...C[]]) => B },\n): readonly B[] {\n return SYSTEM_INDEX_DECLARATIONS.filter(\n (declaration) => declaration.table === tableKey,\n ).map((declaration) =>\n indexFactory(systemIndexName(physicalTableName, declaration.suffix)).on(\n ...resolveSystemIndexColumns(declaration, columns),\n ),\n );\n}\n\nexport function buildSqliteSystemIndexBuilders(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<SQLiteColumn>,\n): readonly SqliteIndexBuilder[] {\n return buildSystemIndexBuilders(\n tableKey,\n physicalTableName,\n columns,\n (name) => sqliteIndex(name),\n );\n}\n\nexport function buildPostgresSystemIndexBuilders(\n tableKey: SystemIndexTable,\n physicalTableName: string,\n columns: SystemIndexColumns<PgColumn>,\n): readonly PgIndexBuilder[] {\n return buildSystemIndexBuilders(\n tableKey,\n physicalTableName,\n columns,\n (name) => pgIndex(name),\n );\n}\n\n// ============================================================\n// Minimal table shapes (shared between dialect schemas)\n// ============================================================\n\ntype NamedSqlWrapper = SQLWrapper & Readonly<{ name: string }>;\n\ntype NodeIndexTable = Readonly<{\n graphId: NamedSqlWrapper;\n kind: NamedSqlWrapper;\n id: NamedSqlWrapper;\n props: NamedSqlWrapper;\n version: NamedSqlWrapper;\n validFrom: NamedSqlWrapper;\n validTo: NamedSqlWrapper;\n createdAt: NamedSqlWrapper;\n updatedAt: NamedSqlWrapper;\n deletedAt: NamedSqlWrapper;\n}>;\n\ntype EdgeIndexTable = Readonly<{\n graphId: NamedSqlWrapper;\n id: NamedSqlWrapper;\n kind: NamedSqlWrapper;\n fromKind: NamedSqlWrapper;\n fromId: NamedSqlWrapper;\n toKind: NamedSqlWrapper;\n toId: NamedSqlWrapper;\n props: NamedSqlWrapper;\n validFrom: NamedSqlWrapper;\n validTo: NamedSqlWrapper;\n createdAt: NamedSqlWrapper;\n updatedAt: NamedSqlWrapper;\n deletedAt: NamedSqlWrapper;\n}>;\n\nfunction assertNonEmpty<T>(\n values: readonly T[],\n label: string,\n): asserts values is readonly [T, ...T[]] {\n if (values.length === 0) {\n throw new Error(`Index must have at least one key (${label})`);\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConfigurationError } from './chunk-
|
|
1
|
+
import { ConfigurationError } from './chunk-YDEJQWOL.js';
|
|
2
2
|
|
|
3
3
|
// src/utils/global-symbol.ts
|
|
4
4
|
function typeGraphGlobalSymbol(name) {
|
|
@@ -315,5 +315,5 @@ var LIKE_ESCAPE_CHARACTER = "\\";
|
|
|
315
315
|
var likeEscapeClause = sql`ESCAPE '\\'`;
|
|
316
316
|
|
|
317
317
|
export { LIKE_ESCAPE_CHARACTER, Placeholder, annIndexScanTypes, asCompiledRowsSql, asCompiledSelectSql, asCompiledStatementSql, asCompiledTemporaryStatementSql, bindSqlValue, getSqlDialectProfile, inlineSqlStringLiteral, isRawExecutable, isSqlFragment, isSqlPlaceholder, likeEscapeClause, markAnnIndexScan, markForceCustomPlan, packSqlListValue, renderPostgres, renderSql, renderSqlInline, renderSqlite, shouldForceCustomPlan, sql, throwUnsupportedSqlChunk, typeGraphGlobalSymbol };
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
319
|
-
//# sourceMappingURL=chunk-
|
|
318
|
+
//# sourceMappingURL=chunk-46UGOVRW.js.map
|
|
319
|
+
//# sourceMappingURL=chunk-46UGOVRW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/global-symbol.ts","../src/query/dialect/profile.ts","../src/query/sql-intent.ts","../src/query/sql-fragment.ts","../src/query/dialect/like-escape.ts"],"names":[],"mappings":"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","file":"chunk-3DMMGT6S.js","sourcesContent":["type TypeGraphGlobalSymbolName =\n | \"sql-fragment\"\n | \"sql-placeholder\"\n | \"sql-intent-registry\"\n | \"internal-temporary-writes-v1\"\n | \"external-recorded-read-source-v1\"\n | \"sql-schema-v1\"\n | \"store-runtime-v1\"\n | \"typegraph-recorded-read-source-v1\"\n | \"transaction-runtime-v1\";\n\n/** Returns a process-wide symbol shared across ESM/CJS package instances. */\nexport function typeGraphGlobalSymbol<TSymbol extends symbol>(\n name: TypeGraphGlobalSymbolName,\n): TSymbol {\n return Symbol.for(`@nicia-ai/typegraph/${name}`) as TSymbol;\n}\n","import { type SqlDialect } from \"./types\";\n\nexport type SqlDialectProfile = Readonly<{\n bindValue: (value: unknown) => unknown;\n booleanLiteralString: (value: boolean) => string;\n placeholder: (index: number) => string;\n}>;\n\nconst SQL_DIALECT_PROFILES = {\n postgres: {\n bindValue: (value: unknown) => value,\n booleanLiteralString: (value: boolean) => (value ? \"TRUE\" : \"FALSE\"),\n placeholder: (index: number) => `$${index}`,\n },\n sqlite: {\n bindValue: (value: unknown) =>\n typeof value === \"boolean\" ?\n value ? 1\n : 0\n : value,\n booleanLiteralString: (value: boolean) => (value ? \"1\" : \"0\"),\n placeholder: () => \"?\",\n },\n} satisfies Record<SqlDialect, SqlDialectProfile>;\n\nconst SQL_STRING_LITERAL_RENDERERS = {\n postgres: (value: string) => {\n if (value.includes(\"\\\\\")) {\n return `E'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n }\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n sqlite: (value: string) => `'${value.replaceAll(\"'\", \"''\")}'`,\n} satisfies Record<SqlDialect, (value: string) => string>;\n\n/** Returns the primitive rendering and binding rules for a SQL dialect. */\nexport function getSqlDialectProfile(dialect: SqlDialect): SqlDialectProfile {\n return SQL_DIALECT_PROFILES[dialect];\n}\n\n/** Maps a JavaScript value to the representation expected by a SQL driver. */\nexport function bindSqlValue(value: unknown, dialect: SqlDialect): unknown {\n if (value instanceof Date) return value.toISOString();\n return getSqlDialectProfile(dialect).bindValue(value);\n}\n\n/**\n * Packs a scalar list into the single JSON-text value that a list-valued `IN`\n * parameter binds to. Every element is bound exactly as the literal form would\n * bind it, so `field.in([...])` and `field.in(param(...))` agree row for row.\n */\nexport function packSqlListValue(\n values: readonly unknown[],\n dialect: SqlDialect,\n): string {\n return JSON.stringify(values.map((value) => bindSqlValue(value, dialect)));\n}\n\n/** Renders one SQL string literal using the dialect's escaping rules. */\nexport function inlineSqlStringLiteral(\n value: string,\n dialect: SqlDialect,\n): string {\n return SQL_STRING_LITERAL_RENDERERS[dialect](value);\n}\n","import { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport { type SqlFragment } from \"./sql-fragment\";\n\ndeclare const SqlIntentBrand: unique symbol;\n\nexport type SqlIntent = \"rows\" | \"statement\" | \"temporary-statement\";\n\nexport type IntentSql<I extends SqlIntent> = SqlFragment &\n Readonly<{ [SqlIntentBrand]: I }>;\n\nexport type CompiledRowsSql = IntentSql<\"rows\">;\nexport type CompiledSelectSql = CompiledRowsSql;\nexport type CompiledStatementSql = IntentSql<\"statement\">;\nexport type CompiledTemporaryStatementSql = IntentSql<\"temporary-statement\">;\n\nexport function asCompiledRowsSql(query: SqlFragment): CompiledRowsSql {\n return query as CompiledRowsSql;\n}\n\nexport function asCompiledSelectSql(query: SqlFragment): CompiledSelectSql {\n return asCompiledRowsSql(query);\n}\n\nexport function asCompiledStatementSql(\n query: SqlFragment,\n): CompiledStatementSql {\n return query as CompiledStatementSql;\n}\n\n/**\n * Marks an internal statement that may write only connection-local temporary\n * state. This is intentionally separate from the public raw-statement intent:\n * history-enabled stores block arbitrary raw writes but iterative graph\n * operations still need to manage ephemeral working tables.\n */\nexport function asCompiledTemporaryStatementSql(\n query: SqlFragment,\n): CompiledTemporaryStatementSql {\n return query as CompiledTemporaryStatementSql;\n}\n\n/**\n * Statements whose good plan depends on the bound parameter values —\n * e.g. an id-array membership filter where the array cardinality varies\n * per call. PostgreSQL's prepared-statement machinery switches to a\n * generic (parameter-blind) plan after five executions, which for these\n * statements is catastrophically wrong (measured 21ms -> 310ms on the\n * subgraph edge fetch). Marked statements are executed unnamed so every\n * call is planned against the actual parameters; the re-parse cost is\n * ~1ms, the generic-plan cliff it avoids is 10-300ms.\n */\ntype SqlIntentRegistry = Readonly<{\n annIndexScanQueries: WeakMap<SqlFragment, readonly string[]>;\n forceCustomPlanQueries: WeakSet<SqlFragment>;\n}>;\n\nconst SQL_INTENT_REGISTRY: unique symbol = typeGraphGlobalSymbol(\n \"sql-intent-registry\",\n);\nconst globalWithSqlIntentRegistry = globalThis as typeof globalThis &\n Readonly<{\n [SQL_INTENT_REGISTRY]?: SqlIntentRegistry;\n }>;\nconst sqlIntentRegistry =\n globalWithSqlIntentRegistry[SQL_INTENT_REGISTRY] ??\n (() => {\n const registry: SqlIntentRegistry = {\n annIndexScanQueries: new WeakMap(),\n forceCustomPlanQueries: new WeakSet(),\n };\n Object.defineProperty(globalWithSqlIntentRegistry, SQL_INTENT_REGISTRY, {\n configurable: false,\n enumerable: false,\n value: registry,\n writable: false,\n });\n return registry;\n })();\n\nexport function markForceCustomPlan(query: SqlFragment): void {\n sqlIntentRegistry.forceCustomPlanQueries.add(query);\n}\n\nexport function shouldForceCustomPlan(query: SqlFragment): boolean {\n return sqlIntentRegistry.forceCustomPlanQueries.has(query);\n}\n\n/**\n * Statements whose plan includes an engine ANN index scan (the inline\n * `.similarTo(..., { approximate: true })` branch). The PostgreSQL\n * backend wraps their execution with the same pgvector GUC overrides\n * the search facade applies (`hnsw.iterative_scan = strict_order` /\n * `ivfflat.iterative_scan = relaxed_order` on pgvector >= 0.8), so a\n * filtered approximate query keeps scanning past the default ef_search\n * frontier instead of starving. Carries the slot index types so the\n * backend knows which GUCs apply. Backends without GUC semantics\n * ignore the brand.\n */\nexport function markAnnIndexScan(\n query: SqlFragment,\n indexTypes: readonly string[],\n): void {\n sqlIntentRegistry.annIndexScanQueries.set(query, indexTypes);\n}\n\nexport function annIndexScanTypes(\n query: SqlFragment,\n): readonly string[] | undefined {\n return sqlIntentRegistry.annIndexScanQueries.get(query);\n}\n\n/** @internal Copies execution semantics when immutable fragments are composed. */\nexport function copySqlIntents(\n target: SqlFragment,\n sources: readonly SqlFragment[],\n): void {\n if (sources.some((source) => shouldForceCustomPlan(source))) {\n markForceCustomPlan(target);\n }\n\n const indexTypes = new Set<string>();\n for (const source of sources) {\n for (const indexType of annIndexScanTypes(source) ?? []) {\n indexTypes.add(indexType);\n }\n }\n if (indexTypes.size > 0) markAnnIndexScan(target, [...indexTypes]);\n}\n\n/**\n * Whether a compiled statement can be run as raw text (`executeRaw`) without\n * losing execution semantics. Both brands above ride on the SQL *object* and\n * are honored only by `backend.execute`: the force-custom-plan flag makes\n * PostgreSQL re-plan against the actual parameters (opposed to reusing a\n * cached statement), and the ANN-scan brand drives the pgvector iterative-scan\n * GUC wrapper. A statement carrying either must not be flattened to text and\n * cached — callers fall back to `backend.execute`. Keeping this predicate\n * beside the brands means a future brand updates one place, not every caller.\n */\nexport function isRawExecutable(query: SqlFragment): boolean {\n return (\n !shouldForceCustomPlan(query) && annIndexScanTypes(query) === undefined\n );\n}\n","import { ConfigurationError } from \"../errors\";\nimport { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport {\n bindSqlValue,\n getSqlDialectProfile,\n inlineSqlStringLiteral,\n} from \"./dialect/profile\";\nimport { type SqlDialect } from \"./dialect/types\";\nimport { copySqlIntents } from \"./sql-intent\";\n\n/** Nominal identity shared by every package entrypoint. */\nconst SQL_FRAGMENT_BRAND: unique symbol = typeGraphGlobalSymbol(\"sql-fragment\");\nconst SQL_PLACEHOLDER_BRAND: unique symbol =\n typeGraphGlobalSymbol(\"sql-placeholder\");\n\nexport type SqlTextChunk = Readonly<{\n kind: \"text\";\n value: string;\n}>;\n\nexport type SqlParameterChunk = Readonly<{\n kind: \"parameter\";\n value: unknown;\n}>;\n\nexport type SqlIdentifierChunk = Readonly<{\n kind: \"identifier\";\n value: string;\n}>;\n\nexport type SqlPlaceholderChunk = Readonly<{\n kind: \"placeholder\";\n value: Placeholder;\n}>;\n\n/** One immutable unit in a database-independent SQL fragment. */\nexport type SqlChunk =\n SqlTextChunk | SqlParameterChunk | SqlIdentifierChunk | SqlPlaceholderChunk;\n\n/**\n * An immutable, database-independent SQL expression.\n *\n * Fragments contain syntax and bound values as separate nodes. A database\n * adapter renders the same fragment with its native placeholder convention at\n * the final execution boundary.\n */\nexport type SqlFragment = Readonly<{\n [SQL_FRAGMENT_BRAND]: true;\n append: (fragment: SqlFragment) => SqlFragment;\n chunks: readonly SqlChunk[];\n}>;\n\n/** A named value resolved when a prepared statement is executed. */\nexport class Placeholder {\n readonly [SQL_PLACEHOLDER_BRAND] = true as const;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\n Object.freeze(this);\n }\n}\n\nclass SqlFragmentValue implements SqlFragment {\n readonly [SQL_FRAGMENT_BRAND] = true as const;\n\n readonly chunks: readonly SqlChunk[];\n\n constructor(chunks: readonly SqlChunk[]) {\n this.chunks = Object.freeze([...chunks]);\n Object.freeze(this);\n }\n\n append(fragment: SqlFragment): SqlFragment {\n return createFragment(\n [...this.chunks, ...getChunks(fragment)],\n [this, fragment],\n );\n }\n}\n\nfunction createFragment(\n chunks: readonly SqlChunk[],\n intentSources: readonly SqlFragment[] = [],\n): SqlFragment {\n const fragment = new SqlFragmentValue(chunks);\n copySqlIntents(fragment, intentSources);\n return fragment;\n}\n\nfunction getChunks(fragment: SqlFragment): readonly SqlChunk[] {\n if (!isSqlFragment(fragment)) {\n throw new ConfigurationError(\n \"Expected a SQL fragment created by TypeGraph's sql helper\",\n );\n }\n return fragment.chunks;\n}\n\n/** Returns whether a value is a TypeGraph-owned SQL fragment. */\nexport function isSqlFragment(value: unknown): value is SqlFragment {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_FRAGMENT_BRAND in value &&\n value[SQL_FRAGMENT_BRAND] === true &&\n \"chunks\" in value &&\n Array.isArray(value.chunks) &&\n \"append\" in value &&\n typeof value.append === \"function\"\n );\n}\n\n/** Returns whether a value is a TypeGraph named SQL placeholder. */\nexport function isSqlPlaceholder(value: unknown): value is Placeholder {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_PLACEHOLDER_BRAND in value &&\n value[SQL_PLACEHOLDER_BRAND] === true &&\n \"name\" in value &&\n typeof value.name === \"string\"\n );\n}\n\n/** @internal Enforces exhaustive handling at every fragment boundary. */\nexport function throwUnsupportedSqlChunk(chunk: never): never {\n throw new ConfigurationError(\"Unsupported SQL fragment chunk\", { chunk });\n}\n\nfunction textNode(value: string): SqlTextChunk {\n return Object.freeze({ kind: \"text\", value });\n}\n\nfunction parameterNode(value: unknown): SqlParameterChunk {\n return Object.freeze({ kind: \"parameter\", value });\n}\n\nfunction identifierNode(value: string): SqlIdentifierChunk {\n return Object.freeze({ kind: \"identifier\", value });\n}\n\nfunction placeholderNode(value: Placeholder): SqlPlaceholderChunk {\n return Object.freeze({ kind: \"placeholder\", value });\n}\n\nfunction templateSql(\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [];\n\n for (const [index, text] of strings.entries()) {\n if (text.length > 0) chunks.push(textNode(text));\n\n if (index >= values.length) continue;\n const value = values[index];\n if (isSqlFragment(value)) {\n chunks.push(...getChunks(value));\n intentSources.push(value);\n } else if (isSqlPlaceholder(value)) {\n chunks.push(placeholderNode(value));\n } else {\n chunks.push(parameterNode(value));\n }\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction rawSql(value: string): SqlFragment {\n return createFragment(value.length === 0 ? [] : [textNode(value)]);\n}\n\nfunction identifierSql(value: string): SqlFragment {\n return createFragment([identifierNode(value)]);\n}\n\nfunction joinSql(\n fragments: readonly SqlFragment[],\n separator: SqlFragment = EMPTY_SQL,\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [separator];\n\n for (const [index, fragment] of fragments.entries()) {\n if (index > 0) chunks.push(...getChunks(separator));\n chunks.push(...getChunks(fragment));\n intentSources.push(fragment);\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction placeholderSql(name: string): SqlFragment {\n return createFragment([placeholderNode(new Placeholder(name))]);\n}\n\nconst EMPTY_SQL = createFragment([]);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport type SqlTag = Readonly<{\n empty: () => SqlFragment;\n identifier: (value: string) => SqlFragment;\n join: (\n fragments: readonly SqlFragment[],\n separator?: SqlFragment,\n ) => SqlFragment;\n placeholder: (name: string) => SqlFragment;\n raw: (value: string) => SqlFragment;\n}> &\n ((\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ) => SqlFragment);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport const sql: SqlTag = Object.assign(templateSql, {\n empty: function empty(): SqlFragment {\n return EMPTY_SQL;\n },\n identifier: identifierSql,\n join: joinSql,\n placeholder: placeholderSql,\n raw: rawSql,\n});\n\n/** A rendered statement and its ordered bound parameters. */\nexport type RenderedSql = Readonly<{\n sql: string;\n params: readonly unknown[];\n}>;\n\nfunction quotedIdentifier(identifier: string): string {\n return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction resolvedPlaceholder(\n placeholder: Placeholder,\n bindings: Readonly<Record<string, unknown>> | undefined,\n dialect: SqlDialect,\n): unknown {\n if (bindings === undefined) return placeholder;\n\n if (!Object.hasOwn(bindings, placeholder.name)) {\n throw new ConfigurationError(\n `Missing binding for parameter \"${placeholder.name}\"`,\n { parameterName: placeholder.name },\n );\n }\n return bindSqlValue(bindings[placeholder.name], dialect);\n}\n\n/**\n * Renders a fragment for a database adapter.\n *\n * Named placeholders remain in `params` when `bindings` is omitted, allowing\n * a prepared template to resolve them later. Passing `bindings` resolves every\n * placeholder eagerly.\n */\nexport function renderSql(\n fragment: SqlFragment,\n dialect: SqlDialect,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n const parts: string[] = [];\n const params: unknown[] = [];\n const profile = getSqlDialectProfile(dialect);\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n params.push(bindSqlValue(node.value, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n case \"placeholder\": {\n params.push(resolvedPlaceholder(node.value, bindings, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return Object.freeze({\n sql: parts.join(\"\"),\n params: Object.freeze(params),\n });\n}\n\n/** Renders a fragment using SQLite's `?` placeholders. */\nexport function renderSqlite(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"sqlite\", bindings);\n}\n\n/** Renders a fragment using PostgreSQL's numbered placeholders. */\nexport function renderPostgres(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"postgres\", bindings);\n}\n\nfunction inlineLiteral(value: unknown, dialect: SqlDialect): string {\n if (value === undefined || value === null) return \"NULL\";\n if (typeof value === \"string\") return inlineSqlStringLiteral(value, dialect);\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new ConfigurationError(\"Cannot inline a non-finite SQL number\", {\n value,\n });\n }\n return String(value);\n }\n if (typeof value === \"bigint\") return String(value);\n if (typeof value === \"boolean\") {\n return getSqlDialectProfile(dialect).booleanLiteralString(value);\n }\n if (value instanceof Date) {\n return inlineSqlStringLiteral(value.toISOString(), dialect);\n }\n\n throw new ConfigurationError(\"Cannot inline this SQL parameter value\", {\n value,\n });\n}\n\n/**\n * Renders a fragment with safe scalar literals instead of bound parameters.\n *\n * This is intentionally limited to DDL paths whose drivers cannot bind values.\n * Application queries should always use {@link renderSql}.\n */\nexport function renderSqlInline(\n fragment: SqlFragment,\n dialect: SqlDialect,\n): string {\n const parts: string[] = [];\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n parts.push(inlineLiteral(node.value, dialect));\n break;\n }\n case \"placeholder\": {\n throw new ConfigurationError(\n `Cannot inline unresolved SQL placeholder \"${node.value.name}\"`,\n { parameterName: node.value.name },\n );\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return parts.join(\"\");\n}\n","/**\n * Shared LIKE-escape clause for the query compiler.\n *\n * The compiler builds `contains` / `startsWith` / `endsWith` patterns by\n * escaping the literal `%`, `_`, and `\\` in user input with a backslash (see\n * the pattern builders in `compiler/predicates.ts`). For that escaping to take\n * effect the emitted `LIKE` / `ILIKE` must declare backslash as its escape\n * character. PostgreSQL's default LIKE escape is already backslash, so this\n * clause is a no-op there; SQLite has *no* default escape character, so without\n * it an escaped `\\%` matches a literal backslash followed by any character —\n * silently diverging from Postgres. Emitting it on every compiled predicate\n * makes the two backends match by construction.\n */\nimport { sql, type SqlFragment } from \"../sql-fragment\";\n\n/**\n * The backslash escape character used by the JS pattern builder\n * (`compileStringPattern` in `compiler/predicates.ts`) to prefix the literal\n * `%`, `_`, and `\\` in user input. It must match the character declared by\n * {@link likeEscapeClause}: the builder prefixes wildcards with this character,\n * and the clause tells SQL to treat it as the escape. Both are backslash.\n */\nexport const LIKE_ESCAPE_CHARACTER = \"\\\\\";\n\n/**\n * `ESCAPE '\\'` clause appended to every compiled `LIKE` / `ILIKE` predicate,\n * declaring {@link LIKE_ESCAPE_CHARACTER} as the escape character. The single\n * backslash inside the quotes is a literal in both PostgreSQL (with\n * `standard_conforming_strings`, the default) and SQLite.\n */\nexport const likeEscapeClause: SqlFragment = sql`ESCAPE '\\\\'`;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/global-symbol.ts","../src/query/dialect/profile.ts","../src/query/sql-intent.ts","../src/query/sql-fragment.ts","../src/query/dialect/like-escape.ts"],"names":[],"mappings":"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","file":"chunk-46UGOVRW.js","sourcesContent":["type TypeGraphGlobalSymbolName =\n | \"sql-fragment\"\n | \"sql-placeholder\"\n | \"sql-intent-registry\"\n | \"internal-temporary-writes-v1\"\n | \"external-recorded-read-source-v1\"\n | \"sql-schema-v1\"\n | \"store-runtime-v1\"\n | \"typegraph-recorded-read-source-v1\"\n | \"transaction-runtime-v1\";\n\n/** Returns a process-wide symbol shared across ESM/CJS package instances. */\nexport function typeGraphGlobalSymbol<TSymbol extends symbol>(\n name: TypeGraphGlobalSymbolName,\n): TSymbol {\n return Symbol.for(`@nicia-ai/typegraph/${name}`) as TSymbol;\n}\n","import { type SqlDialect } from \"./types\";\n\nexport type SqlDialectProfile = Readonly<{\n bindValue: (value: unknown) => unknown;\n booleanLiteralString: (value: boolean) => string;\n placeholder: (index: number) => string;\n}>;\n\nconst SQL_DIALECT_PROFILES = {\n postgres: {\n bindValue: (value: unknown) => value,\n booleanLiteralString: (value: boolean) => (value ? \"TRUE\" : \"FALSE\"),\n placeholder: (index: number) => `$${index}`,\n },\n sqlite: {\n bindValue: (value: unknown) =>\n typeof value === \"boolean\" ?\n value ? 1\n : 0\n : value,\n booleanLiteralString: (value: boolean) => (value ? \"1\" : \"0\"),\n placeholder: () => \"?\",\n },\n} satisfies Record<SqlDialect, SqlDialectProfile>;\n\nconst SQL_STRING_LITERAL_RENDERERS = {\n postgres: (value: string) => {\n if (value.includes(\"\\\\\")) {\n return `E'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n }\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n sqlite: (value: string) => `'${value.replaceAll(\"'\", \"''\")}'`,\n} satisfies Record<SqlDialect, (value: string) => string>;\n\n/** Returns the primitive rendering and binding rules for a SQL dialect. */\nexport function getSqlDialectProfile(dialect: SqlDialect): SqlDialectProfile {\n return SQL_DIALECT_PROFILES[dialect];\n}\n\n/** Maps a JavaScript value to the representation expected by a SQL driver. */\nexport function bindSqlValue(value: unknown, dialect: SqlDialect): unknown {\n if (value instanceof Date) return value.toISOString();\n return getSqlDialectProfile(dialect).bindValue(value);\n}\n\n/**\n * Packs a scalar list into the single JSON-text value that a list-valued `IN`\n * parameter binds to. Every element is bound exactly as the literal form would\n * bind it, so `field.in([...])` and `field.in(param(...))` agree row for row.\n */\nexport function packSqlListValue(\n values: readonly unknown[],\n dialect: SqlDialect,\n): string {\n return JSON.stringify(values.map((value) => bindSqlValue(value, dialect)));\n}\n\n/** Renders one SQL string literal using the dialect's escaping rules. */\nexport function inlineSqlStringLiteral(\n value: string,\n dialect: SqlDialect,\n): string {\n return SQL_STRING_LITERAL_RENDERERS[dialect](value);\n}\n","import { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport { type SqlFragment } from \"./sql-fragment\";\n\ndeclare const SqlIntentBrand: unique symbol;\n\nexport type SqlIntent = \"rows\" | \"statement\" | \"temporary-statement\";\n\nexport type IntentSql<I extends SqlIntent> = SqlFragment &\n Readonly<{ [SqlIntentBrand]: I }>;\n\nexport type CompiledRowsSql = IntentSql<\"rows\">;\nexport type CompiledSelectSql = CompiledRowsSql;\nexport type CompiledStatementSql = IntentSql<\"statement\">;\nexport type CompiledTemporaryStatementSql = IntentSql<\"temporary-statement\">;\n\nexport function asCompiledRowsSql(query: SqlFragment): CompiledRowsSql {\n return query as CompiledRowsSql;\n}\n\nexport function asCompiledSelectSql(query: SqlFragment): CompiledSelectSql {\n return asCompiledRowsSql(query);\n}\n\nexport function asCompiledStatementSql(\n query: SqlFragment,\n): CompiledStatementSql {\n return query as CompiledStatementSql;\n}\n\n/**\n * Marks an internal statement that may write only connection-local temporary\n * state. This is intentionally separate from the public raw-statement intent:\n * history-enabled stores block arbitrary raw writes but iterative graph\n * operations still need to manage ephemeral working tables.\n */\nexport function asCompiledTemporaryStatementSql(\n query: SqlFragment,\n): CompiledTemporaryStatementSql {\n return query as CompiledTemporaryStatementSql;\n}\n\n/**\n * Statements whose good plan depends on the bound parameter values —\n * e.g. an id-array membership filter where the array cardinality varies\n * per call. PostgreSQL's prepared-statement machinery switches to a\n * generic (parameter-blind) plan after five executions, which for these\n * statements is catastrophically wrong (measured 21ms -> 310ms on the\n * subgraph edge fetch). Marked statements are executed unnamed so every\n * call is planned against the actual parameters; the re-parse cost is\n * ~1ms, the generic-plan cliff it avoids is 10-300ms.\n */\ntype SqlIntentRegistry = Readonly<{\n annIndexScanQueries: WeakMap<SqlFragment, readonly string[]>;\n forceCustomPlanQueries: WeakSet<SqlFragment>;\n}>;\n\nconst SQL_INTENT_REGISTRY: unique symbol = typeGraphGlobalSymbol(\n \"sql-intent-registry\",\n);\nconst globalWithSqlIntentRegistry = globalThis as typeof globalThis &\n Readonly<{\n [SQL_INTENT_REGISTRY]?: SqlIntentRegistry;\n }>;\nconst sqlIntentRegistry =\n globalWithSqlIntentRegistry[SQL_INTENT_REGISTRY] ??\n (() => {\n const registry: SqlIntentRegistry = {\n annIndexScanQueries: new WeakMap(),\n forceCustomPlanQueries: new WeakSet(),\n };\n Object.defineProperty(globalWithSqlIntentRegistry, SQL_INTENT_REGISTRY, {\n configurable: false,\n enumerable: false,\n value: registry,\n writable: false,\n });\n return registry;\n })();\n\nexport function markForceCustomPlan(query: SqlFragment): void {\n sqlIntentRegistry.forceCustomPlanQueries.add(query);\n}\n\nexport function shouldForceCustomPlan(query: SqlFragment): boolean {\n return sqlIntentRegistry.forceCustomPlanQueries.has(query);\n}\n\n/**\n * Statements whose plan includes an engine ANN index scan (the inline\n * `.similarTo(..., { approximate: true })` branch). The PostgreSQL\n * backend wraps their execution with the same pgvector GUC overrides\n * the search facade applies (`hnsw.iterative_scan = strict_order` /\n * `ivfflat.iterative_scan = relaxed_order` on pgvector >= 0.8), so a\n * filtered approximate query keeps scanning past the default ef_search\n * frontier instead of starving. Carries the slot index types so the\n * backend knows which GUCs apply. Backends without GUC semantics\n * ignore the brand.\n */\nexport function markAnnIndexScan(\n query: SqlFragment,\n indexTypes: readonly string[],\n): void {\n sqlIntentRegistry.annIndexScanQueries.set(query, indexTypes);\n}\n\nexport function annIndexScanTypes(\n query: SqlFragment,\n): readonly string[] | undefined {\n return sqlIntentRegistry.annIndexScanQueries.get(query);\n}\n\n/** @internal Copies execution semantics when immutable fragments are composed. */\nexport function copySqlIntents(\n target: SqlFragment,\n sources: readonly SqlFragment[],\n): void {\n if (sources.some((source) => shouldForceCustomPlan(source))) {\n markForceCustomPlan(target);\n }\n\n const indexTypes = new Set<string>();\n for (const source of sources) {\n for (const indexType of annIndexScanTypes(source) ?? []) {\n indexTypes.add(indexType);\n }\n }\n if (indexTypes.size > 0) markAnnIndexScan(target, [...indexTypes]);\n}\n\n/**\n * Whether a compiled statement can be run as raw text (`executeRaw`) without\n * losing execution semantics. Both brands above ride on the SQL *object* and\n * are honored only by `backend.execute`: the force-custom-plan flag makes\n * PostgreSQL re-plan against the actual parameters (opposed to reusing a\n * cached statement), and the ANN-scan brand drives the pgvector iterative-scan\n * GUC wrapper. A statement carrying either must not be flattened to text and\n * cached — callers fall back to `backend.execute`. Keeping this predicate\n * beside the brands means a future brand updates one place, not every caller.\n */\nexport function isRawExecutable(query: SqlFragment): boolean {\n return (\n !shouldForceCustomPlan(query) && annIndexScanTypes(query) === undefined\n );\n}\n","import { ConfigurationError } from \"../errors\";\nimport { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport {\n bindSqlValue,\n getSqlDialectProfile,\n inlineSqlStringLiteral,\n} from \"./dialect/profile\";\nimport { type SqlDialect } from \"./dialect/types\";\nimport { copySqlIntents } from \"./sql-intent\";\n\n/** Nominal identity shared by every package entrypoint. */\nconst SQL_FRAGMENT_BRAND: unique symbol = typeGraphGlobalSymbol(\"sql-fragment\");\nconst SQL_PLACEHOLDER_BRAND: unique symbol =\n typeGraphGlobalSymbol(\"sql-placeholder\");\n\nexport type SqlTextChunk = Readonly<{\n kind: \"text\";\n value: string;\n}>;\n\nexport type SqlParameterChunk = Readonly<{\n kind: \"parameter\";\n value: unknown;\n}>;\n\nexport type SqlIdentifierChunk = Readonly<{\n kind: \"identifier\";\n value: string;\n}>;\n\nexport type SqlPlaceholderChunk = Readonly<{\n kind: \"placeholder\";\n value: Placeholder;\n}>;\n\n/** One immutable unit in a database-independent SQL fragment. */\nexport type SqlChunk =\n SqlTextChunk | SqlParameterChunk | SqlIdentifierChunk | SqlPlaceholderChunk;\n\n/**\n * An immutable, database-independent SQL expression.\n *\n * Fragments contain syntax and bound values as separate nodes. A database\n * adapter renders the same fragment with its native placeholder convention at\n * the final execution boundary.\n */\nexport type SqlFragment = Readonly<{\n [SQL_FRAGMENT_BRAND]: true;\n append: (fragment: SqlFragment) => SqlFragment;\n chunks: readonly SqlChunk[];\n}>;\n\n/** A named value resolved when a prepared statement is executed. */\nexport class Placeholder {\n readonly [SQL_PLACEHOLDER_BRAND] = true as const;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\n Object.freeze(this);\n }\n}\n\nclass SqlFragmentValue implements SqlFragment {\n readonly [SQL_FRAGMENT_BRAND] = true as const;\n\n readonly chunks: readonly SqlChunk[];\n\n constructor(chunks: readonly SqlChunk[]) {\n this.chunks = Object.freeze([...chunks]);\n Object.freeze(this);\n }\n\n append(fragment: SqlFragment): SqlFragment {\n return createFragment(\n [...this.chunks, ...getChunks(fragment)],\n [this, fragment],\n );\n }\n}\n\nfunction createFragment(\n chunks: readonly SqlChunk[],\n intentSources: readonly SqlFragment[] = [],\n): SqlFragment {\n const fragment = new SqlFragmentValue(chunks);\n copySqlIntents(fragment, intentSources);\n return fragment;\n}\n\nfunction getChunks(fragment: SqlFragment): readonly SqlChunk[] {\n if (!isSqlFragment(fragment)) {\n throw new ConfigurationError(\n \"Expected a SQL fragment created by TypeGraph's sql helper\",\n );\n }\n return fragment.chunks;\n}\n\n/** Returns whether a value is a TypeGraph-owned SQL fragment. */\nexport function isSqlFragment(value: unknown): value is SqlFragment {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_FRAGMENT_BRAND in value &&\n value[SQL_FRAGMENT_BRAND] === true &&\n \"chunks\" in value &&\n Array.isArray(value.chunks) &&\n \"append\" in value &&\n typeof value.append === \"function\"\n );\n}\n\n/** Returns whether a value is a TypeGraph named SQL placeholder. */\nexport function isSqlPlaceholder(value: unknown): value is Placeholder {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_PLACEHOLDER_BRAND in value &&\n value[SQL_PLACEHOLDER_BRAND] === true &&\n \"name\" in value &&\n typeof value.name === \"string\"\n );\n}\n\n/** @internal Enforces exhaustive handling at every fragment boundary. */\nexport function throwUnsupportedSqlChunk(chunk: never): never {\n throw new ConfigurationError(\"Unsupported SQL fragment chunk\", { chunk });\n}\n\nfunction textNode(value: string): SqlTextChunk {\n return Object.freeze({ kind: \"text\", value });\n}\n\nfunction parameterNode(value: unknown): SqlParameterChunk {\n return Object.freeze({ kind: \"parameter\", value });\n}\n\nfunction identifierNode(value: string): SqlIdentifierChunk {\n return Object.freeze({ kind: \"identifier\", value });\n}\n\nfunction placeholderNode(value: Placeholder): SqlPlaceholderChunk {\n return Object.freeze({ kind: \"placeholder\", value });\n}\n\nfunction templateSql(\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [];\n\n for (const [index, text] of strings.entries()) {\n if (text.length > 0) chunks.push(textNode(text));\n\n if (index >= values.length) continue;\n const value = values[index];\n if (isSqlFragment(value)) {\n chunks.push(...getChunks(value));\n intentSources.push(value);\n } else if (isSqlPlaceholder(value)) {\n chunks.push(placeholderNode(value));\n } else {\n chunks.push(parameterNode(value));\n }\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction rawSql(value: string): SqlFragment {\n return createFragment(value.length === 0 ? [] : [textNode(value)]);\n}\n\nfunction identifierSql(value: string): SqlFragment {\n return createFragment([identifierNode(value)]);\n}\n\nfunction joinSql(\n fragments: readonly SqlFragment[],\n separator: SqlFragment = EMPTY_SQL,\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [separator];\n\n for (const [index, fragment] of fragments.entries()) {\n if (index > 0) chunks.push(...getChunks(separator));\n chunks.push(...getChunks(fragment));\n intentSources.push(fragment);\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction placeholderSql(name: string): SqlFragment {\n return createFragment([placeholderNode(new Placeholder(name))]);\n}\n\nconst EMPTY_SQL = createFragment([]);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport type SqlTag = Readonly<{\n empty: () => SqlFragment;\n identifier: (value: string) => SqlFragment;\n join: (\n fragments: readonly SqlFragment[],\n separator?: SqlFragment,\n ) => SqlFragment;\n placeholder: (name: string) => SqlFragment;\n raw: (value: string) => SqlFragment;\n}> &\n ((\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ) => SqlFragment);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport const sql: SqlTag = Object.assign(templateSql, {\n empty: function empty(): SqlFragment {\n return EMPTY_SQL;\n },\n identifier: identifierSql,\n join: joinSql,\n placeholder: placeholderSql,\n raw: rawSql,\n});\n\n/** A rendered statement and its ordered bound parameters. */\nexport type RenderedSql = Readonly<{\n sql: string;\n params: readonly unknown[];\n}>;\n\nfunction quotedIdentifier(identifier: string): string {\n return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction resolvedPlaceholder(\n placeholder: Placeholder,\n bindings: Readonly<Record<string, unknown>> | undefined,\n dialect: SqlDialect,\n): unknown {\n if (bindings === undefined) return placeholder;\n\n if (!Object.hasOwn(bindings, placeholder.name)) {\n throw new ConfigurationError(\n `Missing binding for parameter \"${placeholder.name}\"`,\n { parameterName: placeholder.name },\n );\n }\n return bindSqlValue(bindings[placeholder.name], dialect);\n}\n\n/**\n * Renders a fragment for a database adapter.\n *\n * Named placeholders remain in `params` when `bindings` is omitted, allowing\n * a prepared template to resolve them later. Passing `bindings` resolves every\n * placeholder eagerly.\n */\nexport function renderSql(\n fragment: SqlFragment,\n dialect: SqlDialect,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n const parts: string[] = [];\n const params: unknown[] = [];\n const profile = getSqlDialectProfile(dialect);\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n params.push(bindSqlValue(node.value, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n case \"placeholder\": {\n params.push(resolvedPlaceholder(node.value, bindings, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return Object.freeze({\n sql: parts.join(\"\"),\n params: Object.freeze(params),\n });\n}\n\n/** Renders a fragment using SQLite's `?` placeholders. */\nexport function renderSqlite(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"sqlite\", bindings);\n}\n\n/** Renders a fragment using PostgreSQL's numbered placeholders. */\nexport function renderPostgres(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"postgres\", bindings);\n}\n\nfunction inlineLiteral(value: unknown, dialect: SqlDialect): string {\n if (value === undefined || value === null) return \"NULL\";\n if (typeof value === \"string\") return inlineSqlStringLiteral(value, dialect);\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new ConfigurationError(\"Cannot inline a non-finite SQL number\", {\n value,\n });\n }\n return String(value);\n }\n if (typeof value === \"bigint\") return String(value);\n if (typeof value === \"boolean\") {\n return getSqlDialectProfile(dialect).booleanLiteralString(value);\n }\n if (value instanceof Date) {\n return inlineSqlStringLiteral(value.toISOString(), dialect);\n }\n\n throw new ConfigurationError(\"Cannot inline this SQL parameter value\", {\n value,\n });\n}\n\n/**\n * Renders a fragment with safe scalar literals instead of bound parameters.\n *\n * This is intentionally limited to DDL paths whose drivers cannot bind values.\n * Application queries should always use {@link renderSql}.\n */\nexport function renderSqlInline(\n fragment: SqlFragment,\n dialect: SqlDialect,\n): string {\n const parts: string[] = [];\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n parts.push(inlineLiteral(node.value, dialect));\n break;\n }\n case \"placeholder\": {\n throw new ConfigurationError(\n `Cannot inline unresolved SQL placeholder \"${node.value.name}\"`,\n { parameterName: node.value.name },\n );\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return parts.join(\"\");\n}\n","/**\n * Shared LIKE-escape clause for the query compiler.\n *\n * The compiler builds `contains` / `startsWith` / `endsWith` patterns by\n * escaping the literal `%`, `_`, and `\\` in user input with a backslash (see\n * the pattern builders in `compiler/predicates.ts`). For that escaping to take\n * effect the emitted `LIKE` / `ILIKE` must declare backslash as its escape\n * character. PostgreSQL's default LIKE escape is already backslash, so this\n * clause is a no-op there; SQLite has *no* default escape character, so without\n * it an escaped `\\%` matches a literal backslash followed by any character —\n * silently diverging from Postgres. Emitting it on every compiled predicate\n * makes the two backends match by construction.\n */\nimport { sql, type SqlFragment } from \"../sql-fragment\";\n\n/**\n * The backslash escape character used by the JS pattern builder\n * (`compileStringPattern` in `compiler/predicates.ts`) to prefix the literal\n * `%`, `_`, and `\\` in user input. It must match the character declared by\n * {@link likeEscapeClause}: the builder prefixes wildcards with this character,\n * and the clause tells SQL to treat it as the escape. Both are backslash.\n */\nexport const LIKE_ESCAPE_CHARACTER = \"\\\\\";\n\n/**\n * `ESCAPE '\\'` clause appended to every compiled `LIKE` / `ILIKE` predicate,\n * declaring {@link LIKE_ESCAPE_CHARACTER} as the escape character. The single\n * backslash inside the quotes is a literal in both PostgreSQL (with\n * `standard_conforming_strings`, the default) and SQLite.\n */\nexport const likeEscapeClause: SqlFragment = sql`ESCAPE '\\\\'`;\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { compareStrings } from './chunk-HZUB5CON.js';
|
|
2
|
+
import { ConfigurationError, CardinalityError, EndpointError, DisjointError } from './chunk-YDEJQWOL.js';
|
|
2
3
|
import { readOwnProperty, hasOwnKey, isPresent } from './chunk-DYATYRY4.js';
|
|
4
|
+
import { sql } from 'drizzle-orm';
|
|
3
5
|
|
|
4
6
|
// src/constraints/index.ts
|
|
5
7
|
var UNIQUE_KEY_SEPARATOR = "";
|
|
@@ -102,25 +104,8 @@ function evaluatePredicate(pred, props) {
|
|
|
102
104
|
}
|
|
103
105
|
return isPresent(value);
|
|
104
106
|
}
|
|
105
|
-
function
|
|
106
|
-
|
|
107
|
-
return [baseKind];
|
|
108
|
-
}
|
|
109
|
-
const root = findRootAncestor(baseKind, registry);
|
|
110
|
-
return registry.expandSubClasses(root);
|
|
111
|
-
}
|
|
112
|
-
function findRootAncestor(kind, registry) {
|
|
113
|
-
const ancestors = registry.getAncestors(kind);
|
|
114
|
-
if (ancestors.size === 0) {
|
|
115
|
-
return kind;
|
|
116
|
-
}
|
|
117
|
-
for (const ancestor of ancestors) {
|
|
118
|
-
if (registry.getAncestors(ancestor).size === 0) {
|
|
119
|
-
return ancestor;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
const firstAncestor = [...ancestors][0];
|
|
123
|
-
return firstAncestor ? findRootAncestor(firstAncestor, registry) : kind;
|
|
107
|
+
function subClassComponent(kind, registry) {
|
|
108
|
+
return registry.getSubClassComponent(kind);
|
|
124
109
|
}
|
|
125
110
|
function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeCount, hasActiveEdge) {
|
|
126
111
|
switch (cardinality) {
|
|
@@ -202,6 +187,58 @@ function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
|
|
|
202
187
|
return void 0;
|
|
203
188
|
}
|
|
204
189
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
190
|
+
// src/utils/tuple-key.ts
|
|
191
|
+
function encodeTupleKey(values) {
|
|
192
|
+
return JSON.stringify(values);
|
|
193
|
+
}
|
|
194
|
+
var AXIS_SEPARATOR = "";
|
|
195
|
+
var DISJOINT_AXIS_PREFIX = `${AXIS_SEPARATOR}disjoint${AXIS_SEPARATOR}`;
|
|
196
|
+
var DISJOINT_CONSTRAINT_NAME = `${AXIS_SEPARATOR}disjointWith`;
|
|
197
|
+
function disjointnessClaimAxis(kind, otherKind, registry) {
|
|
198
|
+
return `${DISJOINT_AXIS_PREFIX}${registry.disjointPairLabel(kind, otherKind)}`;
|
|
199
|
+
}
|
|
200
|
+
function assertClaimAxisSafe(name, subject) {
|
|
201
|
+
if (!name.includes(AXIS_SEPARATOR)) return;
|
|
202
|
+
throw new ConfigurationError(
|
|
203
|
+
`${subject} name ${JSON.stringify(name)} contains U+001E, which TypeGraph reserves for claim axes.`,
|
|
204
|
+
{ name },
|
|
205
|
+
{
|
|
206
|
+
suggestion: `Rename it without the U+001E (record separator) character.`
|
|
207
|
+
}
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
function uniquenessClaimKinds(kind, scope, registry) {
|
|
211
|
+
return scope === "kind" ? [kind] : subClassComponent(kind, registry);
|
|
212
|
+
}
|
|
213
|
+
function uniquenessClaimTarget(kind, scope, registry) {
|
|
214
|
+
const kinds = uniquenessClaimKinds(kind, scope, registry);
|
|
215
|
+
return { axis: kinds[0] ?? kind, crossKind: kinds.length > 1 };
|
|
216
|
+
}
|
|
217
|
+
function uniquenessClaimAxis(kind, scope, registry) {
|
|
218
|
+
return uniquenessClaimTarget(kind, scope, registry).axis;
|
|
219
|
+
}
|
|
220
|
+
function uniquenessProbeKinds(kind, scope, registry) {
|
|
221
|
+
const axis = uniquenessClaimAxis(kind, scope, registry);
|
|
222
|
+
const coveredKinds = uniquenessClaimKinds(kind, scope, registry);
|
|
223
|
+
const rest = coveredKinds.filter((candidate) => candidate !== axis).toSorted((left, right) => compareStrings(left, right));
|
|
224
|
+
return [axis, ...rest];
|
|
225
|
+
}
|
|
226
|
+
function edgeCardinalityAxis(cardinality, edgeKind) {
|
|
227
|
+
return `${cardinality}:${edgeKind}`;
|
|
228
|
+
}
|
|
229
|
+
function compareClaimTargets(left, right) {
|
|
230
|
+
return compareStrings(left.relation, right.relation) || compareStrings(left.graphId, right.graphId) || compareStrings(left.axis, right.axis) || compareStrings(left.constraintName ?? "", right.constraintName ?? "") || compareStrings(left.key, right.key);
|
|
231
|
+
}
|
|
232
|
+
function isSameClaimOwner(left, right) {
|
|
233
|
+
return left.nodeId === right.nodeId && left.concreteKind === right.concreteKind;
|
|
234
|
+
}
|
|
235
|
+
function claimOwnerKey(owner) {
|
|
236
|
+
return encodeTupleKey([owner.concreteKind, owner.nodeId]);
|
|
237
|
+
}
|
|
238
|
+
function claimOwnerMatchesSql(existing, proposed, columns) {
|
|
239
|
+
return sql`${existing(columns.nodeId)} = ${proposed(columns.nodeId)} AND ${existing(columns.concreteKind)} = ${proposed(columns.concreteKind)}`;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export { DISJOINT_CONSTRAINT_NAME, assertClaimAxisSafe, assertWhereFieldDeclared, captureWherePredicate, checkCardinality, checkDisjointness, checkUniqueEdge, checkWherePredicate, claimOwnerKey, claimOwnerMatchesSql, compareClaimTargets, computeUniqueKey, disjointnessClaimAxis, edgeCardinalityAxis, encodeTupleKey, isSameClaimOwner, subClassComponent, uniquenessClaimTarget, uniquenessProbeKinds, validateEdgeEndpoints };
|
|
243
|
+
//# sourceMappingURL=chunk-5LKOVCPP.js.map
|
|
244
|
+
//# sourceMappingURL=chunk-5LKOVCPP.js.map
|