@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
|
@@ -0,0 +1,1207 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk7PRMDZIA_cjs = require('./chunk-7PRMDZIA.cjs');
|
|
4
|
+
var chunkRDP6ZRSM_cjs = require('./chunk-RDP6ZRSM.cjs');
|
|
5
|
+
var chunkZBFZGLZE_cjs = require('./chunk-ZBFZGLZE.cjs');
|
|
6
|
+
var chunkGHZPZNFC_cjs = require('./chunk-GHZPZNFC.cjs');
|
|
7
|
+
var chunkLLVOQOWE_cjs = require('./chunk-LLVOQOWE.cjs');
|
|
8
|
+
var chunkM5MSP3BI_cjs = require('./chunk-M5MSP3BI.cjs');
|
|
9
|
+
var chunkOJHD3LXJ_cjs = require('./chunk-OJHD3LXJ.cjs');
|
|
10
|
+
var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
|
|
11
|
+
var chunkX4GDXBOP_cjs = require('./chunk-X4GDXBOP.cjs');
|
|
12
|
+
var chunkN66HCGCY_cjs = require('./chunk-N66HCGCY.cjs');
|
|
13
|
+
|
|
14
|
+
// src/store/types.ts
|
|
15
|
+
var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
|
|
16
|
+
var TRANSACTION_RUNTIME = chunkOJHD3LXJ_cjs.typeGraphGlobalSymbol(
|
|
17
|
+
"transaction-runtime-v1"
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
// src/store/runtime-port.ts
|
|
21
|
+
var STORE_RUNTIME = chunkOJHD3LXJ_cjs.typeGraphGlobalSymbol("store-runtime-v1");
|
|
22
|
+
function storeRuntime(store) {
|
|
23
|
+
const runtime = store[STORE_RUNTIME];
|
|
24
|
+
if (runtime === void 0) {
|
|
25
|
+
throw new TypeError(
|
|
26
|
+
"Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return runtime;
|
|
30
|
+
}
|
|
31
|
+
function storeBackend(store) {
|
|
32
|
+
return storeRuntime(store).backend;
|
|
33
|
+
}
|
|
34
|
+
function transactionBackend(transaction) {
|
|
35
|
+
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
36
|
+
if (runtime === void 0) {
|
|
37
|
+
throw new TypeError(
|
|
38
|
+
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return runtime.backend;
|
|
42
|
+
}
|
|
43
|
+
function transactionNodeOperationHookRunner(transaction) {
|
|
44
|
+
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
45
|
+
if (runtime === void 0) {
|
|
46
|
+
throw new TypeError(
|
|
47
|
+
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return runtime.runNodeOperationHooks;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/store/claims/sites.ts
|
|
54
|
+
function disjointnessSites(registry, kind) {
|
|
55
|
+
return registry.getDisjointKinds(kind).map((otherKind) => ({
|
|
56
|
+
axis: chunkLLVOQOWE_cjs.disjointnessClaimAxis(kind, otherKind, registry),
|
|
57
|
+
constraintName: chunkLLVOQOWE_cjs.DISJOINT_CONSTRAINT_NAME,
|
|
58
|
+
needsLockFence: true,
|
|
59
|
+
placement: "pre-insert",
|
|
60
|
+
refusalReason: "nodeDisjointness",
|
|
61
|
+
refusal: { kind: "disjointness", ownKind: kind, otherKind }
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
function nodeClaimSites(registry, kind, uniqueConstraints, operation) {
|
|
65
|
+
const uniqueness = uniqueConstraints.map((constraint) => {
|
|
66
|
+
const target = chunkLLVOQOWE_cjs.uniquenessClaimTarget(kind, constraint.scope, registry);
|
|
67
|
+
return {
|
|
68
|
+
axis: target.axis,
|
|
69
|
+
constraintName: constraint.name,
|
|
70
|
+
needsLockFence: target.crossKind,
|
|
71
|
+
placement: operation !== "create" || target.crossKind ? "pre-insert" : "post-insert",
|
|
72
|
+
refusalReason: target.crossKind ? "nodeUniquenessScope" : "nodeUniquenessClaim",
|
|
73
|
+
refusal: { kind: "uniqueness", constraint }
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
return operation === "update" ? uniqueness : [...disjointnessSites(registry, kind), ...uniqueness];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// src/store/claims/node-claims.ts
|
|
80
|
+
function createUniquenessContext(graphId, registry, backend) {
|
|
81
|
+
return { graphId, registry, backend };
|
|
82
|
+
}
|
|
83
|
+
function claimKeyFor(refusal, id, props) {
|
|
84
|
+
if (refusal.kind === "disjointness") return id;
|
|
85
|
+
return chunkLLVOQOWE_cjs.checkWherePredicate(refusal.constraint, props) ? chunkLLVOQOWE_cjs.computeUniqueKey(
|
|
86
|
+
props,
|
|
87
|
+
refusal.constraint.fields,
|
|
88
|
+
refusal.constraint.collation
|
|
89
|
+
) : void 0;
|
|
90
|
+
}
|
|
91
|
+
function nodeClaimEntries(registry, kind, id, props, constraints, operation) {
|
|
92
|
+
return nodeClaimSites(registry, kind, constraints, operation).flatMap(
|
|
93
|
+
(site) => {
|
|
94
|
+
const key = claimKeyFor(site.refusal, id, props);
|
|
95
|
+
return key === void 0 ? [] : [
|
|
96
|
+
{
|
|
97
|
+
axis: site.axis,
|
|
98
|
+
constraintName: site.constraintName,
|
|
99
|
+
key,
|
|
100
|
+
placement: site.placement,
|
|
101
|
+
refusalReason: site.refusalReason,
|
|
102
|
+
refusal: site.refusal
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
function mapClaimRefusal(error, entries) {
|
|
109
|
+
const owed = entries.find(
|
|
110
|
+
(entry) => entry.refusal.kind === "disjointness" && entry.constraintName === error.details.constraintName && entry.key === error.details.newId && (error.details.axis === void 0 || entry.axis === error.details.axis)
|
|
111
|
+
);
|
|
112
|
+
if (owed === void 0) throw error;
|
|
113
|
+
throw new chunkX4GDXBOP_cjs.DisjointError(
|
|
114
|
+
{
|
|
115
|
+
nodeId: error.details.newId,
|
|
116
|
+
attemptedKind: owed.refusal.ownKind,
|
|
117
|
+
conflictingKind: error.details.kind
|
|
118
|
+
},
|
|
119
|
+
{ cause: error }
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
async function issuingClaims(entries, issue) {
|
|
123
|
+
try {
|
|
124
|
+
await issue();
|
|
125
|
+
} catch (error) {
|
|
126
|
+
if (error instanceof chunkX4GDXBOP_cjs.UniquenessError) mapClaimRefusal(error, entries);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function claimFenceRefusal(ctx, backend, entries) {
|
|
131
|
+
const gating = entries.find((entry) => entry.placement === "pre-insert");
|
|
132
|
+
if (gating === void 0) return void 0;
|
|
133
|
+
return chunkRDP6ZRSM_cjs.constraintFenceRefusal(ctx, backend, gating.refusalReason);
|
|
134
|
+
}
|
|
135
|
+
function isUniquenessClaimEntry(entry) {
|
|
136
|
+
return entry.refusal.kind === "uniqueness";
|
|
137
|
+
}
|
|
138
|
+
async function probeUniqueKey(ctx, kind, id, entry) {
|
|
139
|
+
const mine = { concreteKind: kind, nodeId: id };
|
|
140
|
+
let heldByThisNode = false;
|
|
141
|
+
for (const kindToCheck of chunkLLVOQOWE_cjs.uniquenessProbeKinds(
|
|
142
|
+
kind,
|
|
143
|
+
entry.refusal.constraint.scope,
|
|
144
|
+
ctx.registry
|
|
145
|
+
)) {
|
|
146
|
+
const existing = await ctx.backend.checkUnique({
|
|
147
|
+
graphId: ctx.graphId,
|
|
148
|
+
nodeKind: kindToCheck,
|
|
149
|
+
constraintName: entry.constraintName,
|
|
150
|
+
key: entry.key
|
|
151
|
+
});
|
|
152
|
+
if (existing === void 0) continue;
|
|
153
|
+
if (!chunkLLVOQOWE_cjs.isSameClaimOwner(
|
|
154
|
+
{ concreteKind: existing.concrete_kind, nodeId: existing.node_id },
|
|
155
|
+
mine
|
|
156
|
+
)) {
|
|
157
|
+
throw new chunkX4GDXBOP_cjs.UniquenessError({
|
|
158
|
+
constraintName: entry.constraintName,
|
|
159
|
+
kind: existing.concrete_kind,
|
|
160
|
+
existingId: existing.node_id,
|
|
161
|
+
newId: id,
|
|
162
|
+
fields: entry.refusal.constraint.fields
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (kindToCheck === entry.axis) heldByThisNode = true;
|
|
166
|
+
}
|
|
167
|
+
return heldByThisNode;
|
|
168
|
+
}
|
|
169
|
+
async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
|
|
170
|
+
for (const entry of nodeClaimEntries(
|
|
171
|
+
ctx.registry,
|
|
172
|
+
kind,
|
|
173
|
+
id,
|
|
174
|
+
props,
|
|
175
|
+
constraints,
|
|
176
|
+
"create"
|
|
177
|
+
)) {
|
|
178
|
+
if (isUniquenessClaimEntry(entry))
|
|
179
|
+
await probeUniqueKey(ctx, kind, id, entry);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function claimTarget(graphId, entry) {
|
|
183
|
+
return {
|
|
184
|
+
relation: "uniques",
|
|
185
|
+
graphId,
|
|
186
|
+
axis: entry.axis,
|
|
187
|
+
constraintName: entry.constraintName,
|
|
188
|
+
key: entry.key
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function claimInsertParams(graphId, claim) {
|
|
192
|
+
return {
|
|
193
|
+
graphId,
|
|
194
|
+
nodeKind: claim.entry.axis,
|
|
195
|
+
constraintName: claim.entry.constraintName,
|
|
196
|
+
key: claim.entry.key,
|
|
197
|
+
nodeId: claim.item.id,
|
|
198
|
+
concreteKind: claim.item.kind
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async function issueClaimsIndividually(ctx, claims, onIssued) {
|
|
202
|
+
for (const claim of claims) {
|
|
203
|
+
await issuingClaims(
|
|
204
|
+
[claim.entry],
|
|
205
|
+
() => ctx.backend.insertUnique(claimInsertParams(ctx.graphId, claim))
|
|
206
|
+
);
|
|
207
|
+
onIssued?.([claim]);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function issueClaimsBatched(ctx, claims, onIssued) {
|
|
211
|
+
if (claims.length === 0) return;
|
|
212
|
+
const batch = ctx.backend.insertUniqueBatch;
|
|
213
|
+
if (batch === void 0) {
|
|
214
|
+
await issueClaimsIndividually(ctx, claims, onIssued);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
await issuingClaims(
|
|
218
|
+
claims.map((claim) => claim.entry),
|
|
219
|
+
async () => {
|
|
220
|
+
await batch(claims.map((claim) => claimInsertParams(ctx.graphId, claim)));
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
onIssued?.(claims);
|
|
224
|
+
}
|
|
225
|
+
async function claimGroupThenWrite(ctx, issue, gating, gatedWrite) {
|
|
226
|
+
const issued = [];
|
|
227
|
+
try {
|
|
228
|
+
await issue(ctx, gating, (landed) => {
|
|
229
|
+
issued.push(...landed);
|
|
230
|
+
});
|
|
231
|
+
return await gatedWrite();
|
|
232
|
+
} catch (error) {
|
|
233
|
+
for (const claim of issued.toReversed()) {
|
|
234
|
+
await releaseClaimedUniqueKeys(ctx, claim.item.kind, claim.item.id, [
|
|
235
|
+
{
|
|
236
|
+
axis: claim.entry.axis,
|
|
237
|
+
constraintName: claim.entry.constraintName,
|
|
238
|
+
key: claim.entry.key
|
|
239
|
+
}
|
|
240
|
+
]);
|
|
241
|
+
}
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async function withNodeCreateClaimsIssuedBy(ctx, items, backend, issue, gatedInsert) {
|
|
246
|
+
const claimContext = createUniquenessContext(
|
|
247
|
+
ctx.graphId,
|
|
248
|
+
ctx.registry,
|
|
249
|
+
backend
|
|
250
|
+
);
|
|
251
|
+
const claims = items.flatMap(
|
|
252
|
+
(item) => nodeClaimEntries(
|
|
253
|
+
ctx.registry,
|
|
254
|
+
item.kind,
|
|
255
|
+
item.id,
|
|
256
|
+
item.props,
|
|
257
|
+
item.constraints,
|
|
258
|
+
"create"
|
|
259
|
+
).map((entry) => ({
|
|
260
|
+
item,
|
|
261
|
+
entry,
|
|
262
|
+
target: claimTarget(ctx.graphId, entry)
|
|
263
|
+
}))
|
|
264
|
+
);
|
|
265
|
+
const refusal = claimFenceRefusal(
|
|
266
|
+
ctx,
|
|
267
|
+
backend,
|
|
268
|
+
claims.map((claim) => claim.entry)
|
|
269
|
+
);
|
|
270
|
+
if (refusal !== void 0) throw refusal;
|
|
271
|
+
const inPlacement = (placement) => claims.filter((claim) => claim.entry.placement === placement).toSorted(
|
|
272
|
+
(left, right) => chunkLLVOQOWE_cjs.compareClaimTargets(left.target, right.target)
|
|
273
|
+
);
|
|
274
|
+
const result = await claimGroupThenWrite(
|
|
275
|
+
claimContext,
|
|
276
|
+
issue,
|
|
277
|
+
inPlacement("pre-insert"),
|
|
278
|
+
gatedInsert
|
|
279
|
+
);
|
|
280
|
+
await issue(claimContext, inPlacement("post-insert"));
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
function withNodeCreateClaims(ctx, item, backend, gatedInsert) {
|
|
284
|
+
return withNodeCreateClaimsIssuedBy(
|
|
285
|
+
ctx,
|
|
286
|
+
[item],
|
|
287
|
+
backend,
|
|
288
|
+
issueClaimsIndividually,
|
|
289
|
+
gatedInsert
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
function withNodeCreateClaimsBatch(ctx, items, backend, gatedInsert) {
|
|
293
|
+
return withNodeCreateClaimsIssuedBy(
|
|
294
|
+
ctx,
|
|
295
|
+
items,
|
|
296
|
+
backend,
|
|
297
|
+
issueClaimsBatched,
|
|
298
|
+
gatedInsert
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
function alreadyAppliedRowWrite() {
|
|
302
|
+
return Promise.resolve(void 0);
|
|
303
|
+
}
|
|
304
|
+
async function deleteUniquenessEntries(ctx, kind, id, props, constraints) {
|
|
305
|
+
await releaseOwnedUniqueKeys(
|
|
306
|
+
ctx,
|
|
307
|
+
kind,
|
|
308
|
+
id,
|
|
309
|
+
nodeClaimEntries(ctx.registry, kind, id, props, constraints, "create")
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
async function hardDeleteClaimsByNodeIds(ctx, concreteKind, nodeIds) {
|
|
313
|
+
await chunkN66HCGCY_cjs.requireDefined(ctx.backend.hardDeleteUniquesByNodeIds)({
|
|
314
|
+
graphId: ctx.graphId,
|
|
315
|
+
concreteKind,
|
|
316
|
+
nodeIds
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
async function planNodeClaimUpdate(ctx, kind, id, oldProps, newProps, constraints) {
|
|
320
|
+
const oldKeys = new Map(
|
|
321
|
+
nodeClaimEntries(
|
|
322
|
+
ctx.registry,
|
|
323
|
+
kind,
|
|
324
|
+
id,
|
|
325
|
+
oldProps,
|
|
326
|
+
constraints,
|
|
327
|
+
"update"
|
|
328
|
+
).map((entry) => [entry.constraintName, entry.key])
|
|
329
|
+
);
|
|
330
|
+
const newEntries = new Map(
|
|
331
|
+
nodeClaimEntries(ctx.registry, kind, id, newProps, constraints, "update").filter(
|
|
332
|
+
(entry) => isUniquenessClaimEntry(entry)
|
|
333
|
+
).map((entry) => [entry.constraintName, entry])
|
|
334
|
+
);
|
|
335
|
+
const pending = [];
|
|
336
|
+
for (const constraint of constraints) {
|
|
337
|
+
const oldKey = oldKeys.get(constraint.name);
|
|
338
|
+
const newEntry = newEntries.get(constraint.name);
|
|
339
|
+
if (oldKey === void 0 && newEntry === void 0) continue;
|
|
340
|
+
if (oldKey !== void 0 && oldKey === newEntry?.key) continue;
|
|
341
|
+
const alreadyHeld = newEntry === void 0 ? false : await probeUniqueKey(ctx, kind, id, newEntry);
|
|
342
|
+
pending.push({
|
|
343
|
+
constraintName: constraint.name,
|
|
344
|
+
release: oldKey,
|
|
345
|
+
claim: newEntry === void 0 || alreadyHeld ? void 0 : newEntry
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
return pending;
|
|
349
|
+
}
|
|
350
|
+
async function planNodeClaimReinsert(ctx, kind, id, props, constraints) {
|
|
351
|
+
const pending = [];
|
|
352
|
+
for (const entry of nodeClaimEntries(
|
|
353
|
+
ctx.registry,
|
|
354
|
+
kind,
|
|
355
|
+
id,
|
|
356
|
+
props,
|
|
357
|
+
constraints,
|
|
358
|
+
"resurrect"
|
|
359
|
+
)) {
|
|
360
|
+
const alreadyHeld = isUniquenessClaimEntry(entry) ? await probeUniqueKey(ctx, kind, id, entry) : false;
|
|
361
|
+
pending.push({
|
|
362
|
+
constraintName: entry.constraintName,
|
|
363
|
+
release: void 0,
|
|
364
|
+
claim: alreadyHeld ? void 0 : entry
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
return pending;
|
|
368
|
+
}
|
|
369
|
+
async function releaseOwnedUniqueKeys(ctx, kind, id, keys) {
|
|
370
|
+
for (const entry of keys) {
|
|
371
|
+
await ctx.backend.deleteUnique({
|
|
372
|
+
graphId: ctx.graphId,
|
|
373
|
+
constraintName: entry.constraintName,
|
|
374
|
+
key: entry.key,
|
|
375
|
+
concreteKind: kind,
|
|
376
|
+
nodeId: id
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
async function releaseClaimedUniqueKeys(ctx, kind, id, keys) {
|
|
381
|
+
for (const entry of keys) {
|
|
382
|
+
await ctx.backend.deleteUnique({
|
|
383
|
+
graphId: ctx.graphId,
|
|
384
|
+
nodeKind: entry.axis,
|
|
385
|
+
constraintName: entry.constraintName,
|
|
386
|
+
key: entry.key,
|
|
387
|
+
concreteKind: kind,
|
|
388
|
+
nodeId: id
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async function claimUniqueKeysThen(ctx, kind, id, plan, gatedWrite) {
|
|
393
|
+
const claimed = [];
|
|
394
|
+
try {
|
|
395
|
+
for (const mutation of plan) {
|
|
396
|
+
const claim = mutation.claim;
|
|
397
|
+
if (claim === void 0) continue;
|
|
398
|
+
await issuingClaims(
|
|
399
|
+
[claim],
|
|
400
|
+
() => ctx.backend.insertUnique({
|
|
401
|
+
graphId: ctx.graphId,
|
|
402
|
+
nodeKind: claim.axis,
|
|
403
|
+
constraintName: mutation.constraintName,
|
|
404
|
+
key: claim.key,
|
|
405
|
+
nodeId: id,
|
|
406
|
+
concreteKind: kind
|
|
407
|
+
})
|
|
408
|
+
);
|
|
409
|
+
claimed.push({
|
|
410
|
+
axis: claim.axis,
|
|
411
|
+
constraintName: mutation.constraintName,
|
|
412
|
+
key: claim.key
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
return await gatedWrite();
|
|
416
|
+
} catch (error) {
|
|
417
|
+
await releaseClaimedUniqueKeys(ctx, kind, id, claimed);
|
|
418
|
+
throw error;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
async function withNodeClaimTransition(ctx, kind, id, plan, gatedWrite) {
|
|
422
|
+
const refusal = claimFenceRefusal(
|
|
423
|
+
ctx,
|
|
424
|
+
ctx.backend,
|
|
425
|
+
plan.flatMap(
|
|
426
|
+
(mutation) => mutation.claim === void 0 ? [] : [mutation.claim]
|
|
427
|
+
)
|
|
428
|
+
);
|
|
429
|
+
if (refusal !== void 0) throw refusal;
|
|
430
|
+
const result = await claimUniqueKeysThen(ctx, kind, id, plan, gatedWrite);
|
|
431
|
+
await releaseOwnedUniqueKeys(
|
|
432
|
+
ctx,
|
|
433
|
+
kind,
|
|
434
|
+
id,
|
|
435
|
+
plan.flatMap(
|
|
436
|
+
(mutation) => mutation.release === void 0 ? [] : [{ constraintName: mutation.constraintName, key: mutation.release }]
|
|
437
|
+
)
|
|
438
|
+
);
|
|
439
|
+
return result;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// src/store/claims/resolved-node-claims.ts
|
|
443
|
+
function claimRowKey(entry) {
|
|
444
|
+
return chunkLLVOQOWE_cjs.encodeTupleKey([entry.constraintName, entry.key]);
|
|
445
|
+
}
|
|
446
|
+
function claimsCompete(left, right) {
|
|
447
|
+
return claimRowKey(left.entry) === claimRowKey(right.entry) && (right.probeKinds.includes(left.entry.axis) || left.probeKinds.includes(right.entry.axis));
|
|
448
|
+
}
|
|
449
|
+
function proposedClaimRefusal(incumbent, challenger) {
|
|
450
|
+
return new chunkX4GDXBOP_cjs.UniquenessError({
|
|
451
|
+
constraintName: challenger.entry.constraintName,
|
|
452
|
+
kind: incumbent.owner.concreteKind,
|
|
453
|
+
existingId: incumbent.owner.nodeId,
|
|
454
|
+
newId: challenger.owner.nodeId,
|
|
455
|
+
fields: challenger.entry.refusal.constraint.fields
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
function proposedClaims(ctx, upserts) {
|
|
459
|
+
const accepted = [];
|
|
460
|
+
for (const upsert of upserts) {
|
|
461
|
+
const owner = {
|
|
462
|
+
concreteKind: upsert.kind,
|
|
463
|
+
nodeId: upsert.id
|
|
464
|
+
};
|
|
465
|
+
const entries = nodeClaimEntries(
|
|
466
|
+
ctx.registry,
|
|
467
|
+
upsert.kind,
|
|
468
|
+
upsert.id,
|
|
469
|
+
{ ...upsert.props },
|
|
470
|
+
upsert.constraints,
|
|
471
|
+
"create"
|
|
472
|
+
);
|
|
473
|
+
for (const entry of entries) {
|
|
474
|
+
if (!isUniquenessClaimEntry(entry)) continue;
|
|
475
|
+
const proposal = {
|
|
476
|
+
owner,
|
|
477
|
+
entry,
|
|
478
|
+
probeKinds: chunkLLVOQOWE_cjs.uniquenessProbeKinds(
|
|
479
|
+
upsert.kind,
|
|
480
|
+
entry.refusal.constraint.scope,
|
|
481
|
+
ctx.registry
|
|
482
|
+
)
|
|
483
|
+
};
|
|
484
|
+
const incumbent = accepted.find(
|
|
485
|
+
(candidate) => !chunkLLVOQOWE_cjs.isSameClaimOwner(candidate.owner, proposal.owner) && claimsCompete(candidate, proposal)
|
|
486
|
+
);
|
|
487
|
+
if (incumbent !== void 0) {
|
|
488
|
+
throw proposedClaimRefusal(incumbent, proposal);
|
|
489
|
+
}
|
|
490
|
+
accepted.push(proposal);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
return accepted;
|
|
494
|
+
}
|
|
495
|
+
function groupClaimsForProbe(claims) {
|
|
496
|
+
const groups = /* @__PURE__ */ new Map();
|
|
497
|
+
for (const claim of claims) {
|
|
498
|
+
for (const probeKind of claim.probeKinds) {
|
|
499
|
+
const groupKey = chunkLLVOQOWE_cjs.encodeTupleKey([probeKind, claim.entry.constraintName]);
|
|
500
|
+
const existing = groups.get(groupKey);
|
|
501
|
+
if (existing === void 0) {
|
|
502
|
+
groups.set(groupKey, {
|
|
503
|
+
probeKind,
|
|
504
|
+
constraintName: claim.entry.constraintName,
|
|
505
|
+
claimsByKey: /* @__PURE__ */ new Map([[claim.entry.key, claim]])
|
|
506
|
+
});
|
|
507
|
+
continue;
|
|
508
|
+
}
|
|
509
|
+
existing.claimsByKey.set(claim.entry.key, claim);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return [...groups.values()];
|
|
513
|
+
}
|
|
514
|
+
function requireBatchProbe(ctx) {
|
|
515
|
+
const checkUniqueBatch = ctx.backend.checkUniqueBatch;
|
|
516
|
+
if (checkUniqueBatch === void 0) {
|
|
517
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
518
|
+
"Resolved node writes require batched uniqueness probes",
|
|
519
|
+
{ code: "RESOLVED_NODE_UNIQUENESS_UNSUPPORTED" }
|
|
520
|
+
);
|
|
521
|
+
}
|
|
522
|
+
return checkUniqueBatch;
|
|
523
|
+
}
|
|
524
|
+
async function validateResolvedNodeClaims(ctx, upserts, releases = []) {
|
|
525
|
+
const checkUniqueBatch = requireBatchProbe(ctx);
|
|
526
|
+
const claims = proposedClaims(ctx, upserts);
|
|
527
|
+
if (claims.length === 0) return;
|
|
528
|
+
const affectedOwners = new Set(
|
|
529
|
+
[...upserts, ...releases].map(
|
|
530
|
+
(reference) => chunkLLVOQOWE_cjs.claimOwnerKey({ concreteKind: reference.kind, nodeId: reference.id })
|
|
531
|
+
)
|
|
532
|
+
);
|
|
533
|
+
for (const group of groupClaimsForProbe(claims)) {
|
|
534
|
+
const existingRows = await checkUniqueBatch({
|
|
535
|
+
graphId: ctx.graphId,
|
|
536
|
+
nodeKind: group.probeKind,
|
|
537
|
+
constraintName: group.constraintName,
|
|
538
|
+
keys: [...group.claimsByKey.keys()]
|
|
539
|
+
});
|
|
540
|
+
for (const existing of existingRows) {
|
|
541
|
+
if (affectedOwners.has(
|
|
542
|
+
chunkLLVOQOWE_cjs.claimOwnerKey({
|
|
543
|
+
concreteKind: existing.concrete_kind,
|
|
544
|
+
nodeId: existing.node_id
|
|
545
|
+
})
|
|
546
|
+
)) {
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
const claim = group.claimsByKey.get(existing.key);
|
|
550
|
+
if (claim === void 0) continue;
|
|
551
|
+
throw new chunkX4GDXBOP_cjs.UniquenessError({
|
|
552
|
+
constraintName: group.constraintName,
|
|
553
|
+
// The holder's own kind, never `group.probeKind`: that is the claim
|
|
554
|
+
// AXIS, which a shared scope folds across kinds and which the caller
|
|
555
|
+
// never wrote. The probe and the fence report the same value.
|
|
556
|
+
kind: existing.concrete_kind,
|
|
557
|
+
existingId: existing.node_id,
|
|
558
|
+
newId: claim.owner.nodeId,
|
|
559
|
+
fields: claim.entry.refusal.constraint.fields
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
async function prepareResolvedNodeClaims(ctx, upserts, releases) {
|
|
565
|
+
const hardDeleteUniquesByNodeIds = ctx.backend.hardDeleteUniquesByNodeIds;
|
|
566
|
+
if (ctx.backend.checkUniqueBatch === void 0 || ctx.backend.insertUniqueBatch === void 0 || hardDeleteUniquesByNodeIds === void 0) {
|
|
567
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
568
|
+
"Resolved node writes require batched uniqueness operations",
|
|
569
|
+
{ code: "RESOLVED_NODE_UNIQUENESS_UNSUPPORTED" }
|
|
570
|
+
);
|
|
571
|
+
}
|
|
572
|
+
await validateResolvedNodeClaims(ctx, upserts, releases);
|
|
573
|
+
const idsByKind = /* @__PURE__ */ new Map();
|
|
574
|
+
for (const reference of [...upserts, ...releases]) {
|
|
575
|
+
const ids = idsByKind.get(reference.kind) ?? /* @__PURE__ */ new Set();
|
|
576
|
+
ids.add(reference.id);
|
|
577
|
+
idsByKind.set(reference.kind, ids);
|
|
578
|
+
}
|
|
579
|
+
for (const [concreteKind, nodeIds] of idsByKind) {
|
|
580
|
+
await hardDeleteUniquesByNodeIds({
|
|
581
|
+
graphId: ctx.graphId,
|
|
582
|
+
concreteKind,
|
|
583
|
+
nodeIds: [...nodeIds]
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
async function applyResolvedNodeClaims(ctx, backend, upserts, releases, apply) {
|
|
588
|
+
const claimContext = {
|
|
589
|
+
graphId: ctx.graphId,
|
|
590
|
+
registry: ctx.registry,
|
|
591
|
+
backend
|
|
592
|
+
};
|
|
593
|
+
await prepareResolvedNodeClaims(claimContext, upserts, releases);
|
|
594
|
+
const result = await apply();
|
|
595
|
+
await withNodeCreateClaimsBatch(
|
|
596
|
+
ctx,
|
|
597
|
+
upserts.map((upsert) => ({
|
|
598
|
+
kind: upsert.kind,
|
|
599
|
+
id: upsert.id,
|
|
600
|
+
props: { ...upsert.props },
|
|
601
|
+
constraints: upsert.constraints
|
|
602
|
+
})),
|
|
603
|
+
backend,
|
|
604
|
+
alreadyAppliedRowWrite
|
|
605
|
+
);
|
|
606
|
+
return result;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
// src/store/embedding-sync.ts
|
|
610
|
+
var embeddingFieldsCache = /* @__PURE__ */ new WeakMap();
|
|
611
|
+
function getEmbeddingFields(schema) {
|
|
612
|
+
const cached = embeddingFieldsCache.get(schema);
|
|
613
|
+
if (cached) return cached;
|
|
614
|
+
const fields = chunkHAHNRASW_cjs.resolveEmbeddingFields(schema);
|
|
615
|
+
embeddingFieldsCache.set(schema, fields);
|
|
616
|
+
return fields;
|
|
617
|
+
}
|
|
618
|
+
async function syncEmbeddings(ctx, schema, props) {
|
|
619
|
+
const { backend } = ctx;
|
|
620
|
+
if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
const embeddingFields = getEmbeddingFields(schema);
|
|
624
|
+
if (embeddingFields.length === 0) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
for (const field of embeddingFields) {
|
|
628
|
+
const value = chunkN66HCGCY_cjs.readOwnProperty(props, field.fieldPath);
|
|
629
|
+
if (isValidEmbeddingValue(value)) {
|
|
630
|
+
await backend.upsertEmbedding({
|
|
631
|
+
graphId: ctx.graphId,
|
|
632
|
+
nodeKind: ctx.nodeKind,
|
|
633
|
+
nodeId: ctx.nodeId,
|
|
634
|
+
fieldPath: field.fieldPath,
|
|
635
|
+
embedding: value,
|
|
636
|
+
dimensions: field.dimensions,
|
|
637
|
+
metric: field.metric,
|
|
638
|
+
indexType: field.indexType
|
|
639
|
+
});
|
|
640
|
+
} else if (value === void 0) {
|
|
641
|
+
await backend.deleteEmbedding({
|
|
642
|
+
graphId: ctx.graphId,
|
|
643
|
+
nodeKind: ctx.nodeKind,
|
|
644
|
+
nodeId: ctx.nodeId,
|
|
645
|
+
fieldPath: field.fieldPath,
|
|
646
|
+
dimensions: field.dimensions,
|
|
647
|
+
metric: field.metric,
|
|
648
|
+
indexType: field.indexType
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
async function syncEmbeddingsBatchForKind(args, schema, items) {
|
|
654
|
+
const { graphId, nodeKind, backend } = args;
|
|
655
|
+
if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
const embeddingFields = getEmbeddingFields(schema);
|
|
659
|
+
if (embeddingFields.length === 0) {
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
for (const field of embeddingFields) {
|
|
663
|
+
const rows = [];
|
|
664
|
+
const deletionIds = [];
|
|
665
|
+
for (const item of items) {
|
|
666
|
+
const value = chunkN66HCGCY_cjs.readOwnProperty(item.props, field.fieldPath);
|
|
667
|
+
if (isValidEmbeddingValue(value)) {
|
|
668
|
+
rows.push({ nodeId: item.nodeId, embedding: value });
|
|
669
|
+
} else if (value === void 0) {
|
|
670
|
+
deletionIds.push(item.nodeId);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
if (rows.length > 0) {
|
|
674
|
+
if (backend.upsertEmbeddingBatch === void 0) {
|
|
675
|
+
for (const row of rows) {
|
|
676
|
+
await backend.upsertEmbedding({
|
|
677
|
+
graphId,
|
|
678
|
+
nodeKind,
|
|
679
|
+
nodeId: row.nodeId,
|
|
680
|
+
fieldPath: field.fieldPath,
|
|
681
|
+
embedding: row.embedding,
|
|
682
|
+
dimensions: field.dimensions,
|
|
683
|
+
metric: field.metric,
|
|
684
|
+
indexType: field.indexType
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
} else {
|
|
688
|
+
await backend.upsertEmbeddingBatch({
|
|
689
|
+
graphId,
|
|
690
|
+
nodeKind,
|
|
691
|
+
fieldPath: field.fieldPath,
|
|
692
|
+
dimensions: field.dimensions,
|
|
693
|
+
metric: field.metric,
|
|
694
|
+
indexType: field.indexType,
|
|
695
|
+
rows
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
if (deletionIds.length > 0 && backend.deleteEmbeddingBatch !== void 0) {
|
|
700
|
+
await backend.deleteEmbeddingBatch({
|
|
701
|
+
graphId,
|
|
702
|
+
nodeKind,
|
|
703
|
+
nodeIds: deletionIds,
|
|
704
|
+
fieldPath: field.fieldPath,
|
|
705
|
+
dimensions: field.dimensions,
|
|
706
|
+
metric: field.metric,
|
|
707
|
+
indexType: field.indexType
|
|
708
|
+
});
|
|
709
|
+
} else {
|
|
710
|
+
for (const nodeId of deletionIds) {
|
|
711
|
+
await backend.deleteEmbedding({
|
|
712
|
+
graphId,
|
|
713
|
+
nodeKind,
|
|
714
|
+
nodeId,
|
|
715
|
+
fieldPath: field.fieldPath,
|
|
716
|
+
dimensions: field.dimensions,
|
|
717
|
+
metric: field.metric,
|
|
718
|
+
indexType: field.indexType
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
async function deleteNodeEmbeddings(ctx, schema) {
|
|
725
|
+
const { backend } = ctx;
|
|
726
|
+
if (!backend.deleteEmbedding) {
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
const embeddingFields = getEmbeddingFields(schema);
|
|
730
|
+
if (embeddingFields.length === 0) {
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
for (const field of embeddingFields) {
|
|
734
|
+
await backend.deleteEmbedding({
|
|
735
|
+
graphId: ctx.graphId,
|
|
736
|
+
nodeKind: ctx.nodeKind,
|
|
737
|
+
nodeId: ctx.nodeId,
|
|
738
|
+
fieldPath: field.fieldPath,
|
|
739
|
+
dimensions: field.dimensions,
|
|
740
|
+
metric: field.metric,
|
|
741
|
+
indexType: field.indexType
|
|
742
|
+
});
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
function isValidEmbeddingValue(value) {
|
|
746
|
+
if (!Array.isArray(value)) {
|
|
747
|
+
return false;
|
|
748
|
+
}
|
|
749
|
+
return value.every((n) => typeof n === "number" && Number.isFinite(n));
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// src/store/fulltext-sync.ts
|
|
753
|
+
var FIELD_SEPARATOR = "\n";
|
|
754
|
+
function resolveCombinedLanguage(fields) {
|
|
755
|
+
return fields[0]?.metadata.language ?? chunkHAHNRASW_cjs.DEFAULT_SEARCHABLE_LANGUAGE;
|
|
756
|
+
}
|
|
757
|
+
function computeFulltextContent(schema, props) {
|
|
758
|
+
const searchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema);
|
|
759
|
+
if (searchableFields.length === 0) return void 0;
|
|
760
|
+
const parts = [];
|
|
761
|
+
for (const field of searchableFields) {
|
|
762
|
+
const value = chunkN66HCGCY_cjs.readOwnProperty(props, field.fieldPath);
|
|
763
|
+
if (typeof value === "string" && value.length > 0) {
|
|
764
|
+
parts.push(value);
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
if (parts.length === 0) return void 0;
|
|
768
|
+
return {
|
|
769
|
+
content: parts.join(FIELD_SEPARATOR),
|
|
770
|
+
language: resolveCombinedLanguage(searchableFields)
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
async function syncFulltext(ctx, schema, props) {
|
|
774
|
+
const { backend } = ctx;
|
|
775
|
+
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
const computed = computeFulltextContent(schema, props);
|
|
779
|
+
if (computed !== void 0) {
|
|
780
|
+
await backend.upsertFulltext({
|
|
781
|
+
graphId: ctx.graphId,
|
|
782
|
+
nodeKind: ctx.nodeKind,
|
|
783
|
+
nodeId: ctx.nodeId,
|
|
784
|
+
content: computed.content,
|
|
785
|
+
language: computed.language
|
|
786
|
+
});
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) return;
|
|
790
|
+
await backend.deleteFulltext({
|
|
791
|
+
graphId: ctx.graphId,
|
|
792
|
+
nodeKind: ctx.nodeKind,
|
|
793
|
+
nodeId: ctx.nodeId
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
async function syncFulltextBatchForKind(args, schema, items) {
|
|
797
|
+
const { graphId, nodeKind, backend } = args;
|
|
798
|
+
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
const rows = [];
|
|
802
|
+
const emptyContentIds = [];
|
|
803
|
+
const hasSearchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0;
|
|
804
|
+
for (const item of items) {
|
|
805
|
+
const computed = computeFulltextContent(schema, item.props);
|
|
806
|
+
if (computed !== void 0) {
|
|
807
|
+
rows.push({
|
|
808
|
+
nodeId: item.nodeId,
|
|
809
|
+
content: computed.content,
|
|
810
|
+
language: computed.language
|
|
811
|
+
});
|
|
812
|
+
} else if (hasSearchableFields) {
|
|
813
|
+
emptyContentIds.push(item.nodeId);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
if (rows.length > 0) {
|
|
817
|
+
if (backend.upsertFulltextBatch === void 0) {
|
|
818
|
+
for (const row of rows) {
|
|
819
|
+
await backend.upsertFulltext({
|
|
820
|
+
graphId,
|
|
821
|
+
nodeKind,
|
|
822
|
+
nodeId: row.nodeId,
|
|
823
|
+
content: row.content,
|
|
824
|
+
language: row.language
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
} else {
|
|
828
|
+
await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
if (emptyContentIds.length > 0) {
|
|
832
|
+
if (backend.deleteFulltextBatch === void 0) {
|
|
833
|
+
for (const nodeId of emptyContentIds) {
|
|
834
|
+
await backend.deleteFulltext({ graphId, nodeKind, nodeId });
|
|
835
|
+
}
|
|
836
|
+
} else {
|
|
837
|
+
await backend.deleteFulltextBatch({
|
|
838
|
+
graphId,
|
|
839
|
+
nodeKind,
|
|
840
|
+
nodeIds: emptyContentIds
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
async function deleteNodeFulltext(ctx, schema) {
|
|
846
|
+
const { backend } = ctx;
|
|
847
|
+
if (!backend.deleteFulltext) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) {
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
853
|
+
await backend.deleteFulltext({
|
|
854
|
+
graphId: ctx.graphId,
|
|
855
|
+
nodeKind: ctx.nodeKind,
|
|
856
|
+
nodeId: ctx.nodeId
|
|
857
|
+
});
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// src/store/operations/node-write-pipeline.ts
|
|
861
|
+
function createNodeWriteContext(graphId, registry, lock) {
|
|
862
|
+
return { graphId, registry, lock };
|
|
863
|
+
}
|
|
864
|
+
function uniquenessContext(ctx, backend) {
|
|
865
|
+
return createUniquenessContext(ctx.graphId, ctx.registry, backend);
|
|
866
|
+
}
|
|
867
|
+
function nodeSyncContext(ctx, kind, id, backend) {
|
|
868
|
+
return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
|
|
869
|
+
}
|
|
870
|
+
async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
871
|
+
if (policy?.enforceDeleteBehavior === false) return;
|
|
872
|
+
const behavior = args.onDelete ?? "restrict";
|
|
873
|
+
const connectedEdges = await backend.findEdgesConnectedTo({
|
|
874
|
+
graphId: ctx.graphId,
|
|
875
|
+
nodeKind: args.kind,
|
|
876
|
+
nodeId: args.id
|
|
877
|
+
});
|
|
878
|
+
if (connectedEdges.length === 0) return;
|
|
879
|
+
switch (behavior) {
|
|
880
|
+
case "restrict": {
|
|
881
|
+
throw new chunkX4GDXBOP_cjs.RestrictedDeleteError({
|
|
882
|
+
nodeKind: args.kind,
|
|
883
|
+
nodeId: args.id,
|
|
884
|
+
edgeCount: connectedEdges.length,
|
|
885
|
+
edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
case "cascade":
|
|
889
|
+
case "disconnect": {
|
|
890
|
+
const connectedEdgeIds = connectedEdges.map((edge) => edge.id);
|
|
891
|
+
const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
|
|
892
|
+
if (batchDelete === void 0) {
|
|
893
|
+
for (const edge of connectedEdges) {
|
|
894
|
+
await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
|
|
895
|
+
}
|
|
896
|
+
} else {
|
|
897
|
+
await batchDelete({
|
|
898
|
+
graphId: ctx.graphId,
|
|
899
|
+
ids: connectedEdgeIds
|
|
900
|
+
});
|
|
901
|
+
}
|
|
902
|
+
if (args.mode === "hard") {
|
|
903
|
+
await chunk7PRMDZIA_cjs.purgeEdgeClaims(backend, ctx.graphId, connectedEdgeIds);
|
|
904
|
+
}
|
|
905
|
+
break;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
async function applyNodeInsertSyncFans(ctx, args, backend) {
|
|
910
|
+
await Promise.all([
|
|
911
|
+
syncEmbeddings(
|
|
912
|
+
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
913
|
+
args.schema,
|
|
914
|
+
args.props
|
|
915
|
+
),
|
|
916
|
+
syncFulltext(
|
|
917
|
+
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
918
|
+
args.schema,
|
|
919
|
+
args.props
|
|
920
|
+
)
|
|
921
|
+
]);
|
|
922
|
+
}
|
|
923
|
+
async function applyNodeInsertSyncFansBatch(ctx, items, backend) {
|
|
924
|
+
if (items.length === 0) return;
|
|
925
|
+
const byKind = /* @__PURE__ */ new Map();
|
|
926
|
+
for (const item of items) {
|
|
927
|
+
const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
|
|
928
|
+
group.rows.push({ nodeId: item.id, props: item.props });
|
|
929
|
+
byKind.set(item.kind, group);
|
|
930
|
+
}
|
|
931
|
+
await Promise.all(
|
|
932
|
+
[...byKind.entries()].flatMap(([kind, group]) => {
|
|
933
|
+
const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
|
|
934
|
+
return [
|
|
935
|
+
syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
|
|
936
|
+
syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
|
|
937
|
+
];
|
|
938
|
+
})
|
|
939
|
+
);
|
|
940
|
+
}
|
|
941
|
+
function parseRowProps(row) {
|
|
942
|
+
return chunkGHZPZNFC_cjs.rowPropsToObject(row.props);
|
|
943
|
+
}
|
|
944
|
+
async function planNodeUpdateUniqueness(ctx, args, backend) {
|
|
945
|
+
const { kind, id } = args.existing;
|
|
946
|
+
if (args.existing.deleted_at !== void 0) {
|
|
947
|
+
return planNodeClaimReinsert(
|
|
948
|
+
uniquenessContext(ctx, backend),
|
|
949
|
+
kind,
|
|
950
|
+
id,
|
|
951
|
+
args.validatedProps,
|
|
952
|
+
args.uniqueConstraints
|
|
953
|
+
);
|
|
954
|
+
}
|
|
955
|
+
return planNodeClaimUpdate(
|
|
956
|
+
uniquenessContext(ctx, backend),
|
|
957
|
+
kind,
|
|
958
|
+
id,
|
|
959
|
+
parseRowProps(args.existing),
|
|
960
|
+
args.validatedProps,
|
|
961
|
+
args.uniqueConstraints
|
|
962
|
+
);
|
|
963
|
+
}
|
|
964
|
+
async function applyNodeUpdate(ctx, args, backend) {
|
|
965
|
+
const { kind, id } = args.existing;
|
|
966
|
+
const plan = await planNodeUpdateUniqueness(
|
|
967
|
+
ctx,
|
|
968
|
+
{
|
|
969
|
+
existing: args.existing,
|
|
970
|
+
validatedProps: args.validatedProps,
|
|
971
|
+
uniqueConstraints: args.uniqueConstraints
|
|
972
|
+
},
|
|
973
|
+
backend
|
|
974
|
+
);
|
|
975
|
+
const updateParams = {
|
|
976
|
+
graphId: ctx.graphId,
|
|
977
|
+
kind,
|
|
978
|
+
id,
|
|
979
|
+
props: args.validatedProps,
|
|
980
|
+
incrementVersion: true
|
|
981
|
+
};
|
|
982
|
+
if (args.validFrom !== void 0) updateParams.validFrom = args.validFrom;
|
|
983
|
+
if (chunkM5MSP3BI_cjs.assertsStoredLowerBound(args)) {
|
|
984
|
+
updateParams.expectedValidFrom = args.expectedValidFrom;
|
|
985
|
+
}
|
|
986
|
+
if (args.clearDeleted) updateParams.clearDeleted = true;
|
|
987
|
+
const row = await withNodeClaimTransition(
|
|
988
|
+
uniquenessContext(ctx, backend),
|
|
989
|
+
kind,
|
|
990
|
+
id,
|
|
991
|
+
plan,
|
|
992
|
+
() => backend.updateNode({
|
|
993
|
+
...updateParams,
|
|
994
|
+
...args.clearValidTo === true ? { clearValidTo: true } : args.validTo === void 0 ? {} : { validTo: args.validTo }
|
|
995
|
+
})
|
|
996
|
+
);
|
|
997
|
+
await Promise.all([
|
|
998
|
+
syncEmbeddings(
|
|
999
|
+
nodeSyncContext(ctx, kind, id, backend),
|
|
1000
|
+
args.schema,
|
|
1001
|
+
args.validatedProps
|
|
1002
|
+
),
|
|
1003
|
+
syncFulltext(
|
|
1004
|
+
nodeSyncContext(ctx, kind, id, backend),
|
|
1005
|
+
args.schema,
|
|
1006
|
+
args.validatedProps
|
|
1007
|
+
)
|
|
1008
|
+
]);
|
|
1009
|
+
return row;
|
|
1010
|
+
}
|
|
1011
|
+
async function applyNodeSoftDelete(ctx, args, backend, policy) {
|
|
1012
|
+
const { kind, id } = args.existing;
|
|
1013
|
+
await enforceNodeDeleteBehavior(
|
|
1014
|
+
ctx,
|
|
1015
|
+
{ kind, id, mode: "soft", onDelete: args.onDelete },
|
|
1016
|
+
backend,
|
|
1017
|
+
policy
|
|
1018
|
+
);
|
|
1019
|
+
await backend.deleteNode({
|
|
1020
|
+
graphId: ctx.graphId,
|
|
1021
|
+
kind,
|
|
1022
|
+
id
|
|
1023
|
+
});
|
|
1024
|
+
await deleteUniquenessEntries(
|
|
1025
|
+
uniquenessContext(ctx, backend),
|
|
1026
|
+
kind,
|
|
1027
|
+
id,
|
|
1028
|
+
parseRowProps(args.existing),
|
|
1029
|
+
args.uniqueConstraints
|
|
1030
|
+
);
|
|
1031
|
+
await deleteNodeEmbeddings(
|
|
1032
|
+
nodeSyncContext(ctx, kind, id, backend),
|
|
1033
|
+
args.schema
|
|
1034
|
+
);
|
|
1035
|
+
await deleteNodeFulltext(
|
|
1036
|
+
nodeSyncContext(ctx, kind, id, backend),
|
|
1037
|
+
args.schema
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
async function applyNodeHardDelete(ctx, args, backend) {
|
|
1041
|
+
await enforceNodeDeleteBehavior(
|
|
1042
|
+
ctx,
|
|
1043
|
+
{ kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
|
|
1044
|
+
backend
|
|
1045
|
+
);
|
|
1046
|
+
await backend.hardDeleteNode({
|
|
1047
|
+
graphId: ctx.graphId,
|
|
1048
|
+
kind: args.kind,
|
|
1049
|
+
id: args.id
|
|
1050
|
+
});
|
|
1051
|
+
await deleteNodeEmbeddings(
|
|
1052
|
+
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
1053
|
+
args.schema
|
|
1054
|
+
);
|
|
1055
|
+
}
|
|
1056
|
+
async function applyNodeResurrect(ctx, args, backend) {
|
|
1057
|
+
const { kind, id } = args.existing;
|
|
1058
|
+
const props = parseRowProps(args.existing);
|
|
1059
|
+
const plan = await planNodeClaimReinsert(
|
|
1060
|
+
uniquenessContext(ctx, backend),
|
|
1061
|
+
kind,
|
|
1062
|
+
id,
|
|
1063
|
+
props,
|
|
1064
|
+
args.uniqueConstraints
|
|
1065
|
+
);
|
|
1066
|
+
const row = await withNodeClaimTransition(
|
|
1067
|
+
uniquenessContext(ctx, backend),
|
|
1068
|
+
kind,
|
|
1069
|
+
id,
|
|
1070
|
+
plan,
|
|
1071
|
+
() => backend.updateNode({
|
|
1072
|
+
graphId: ctx.graphId,
|
|
1073
|
+
kind,
|
|
1074
|
+
id,
|
|
1075
|
+
props,
|
|
1076
|
+
incrementVersion: true,
|
|
1077
|
+
clearDeleted: true
|
|
1078
|
+
})
|
|
1079
|
+
);
|
|
1080
|
+
await Promise.all([
|
|
1081
|
+
syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
|
|
1082
|
+
syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
|
|
1083
|
+
]);
|
|
1084
|
+
return row;
|
|
1085
|
+
}
|
|
1086
|
+
async function applyNodeSetUpdate(ctx, args, backend) {
|
|
1087
|
+
const { kind, schema, uniqueConstraints } = args;
|
|
1088
|
+
const updateNodeSet = backend.updateNodeSet;
|
|
1089
|
+
if (updateNodeSet === void 0) {
|
|
1090
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
1091
|
+
"The transaction backend does not support set-based node updates",
|
|
1092
|
+
{ code: "SET_UPDATE_UNSUPPORTED", kind }
|
|
1093
|
+
);
|
|
1094
|
+
}
|
|
1095
|
+
if (uniqueConstraints.length > 0 && (backend.hardDeleteUniquesByNodeIds === void 0 || backend.insertUniqueBatch === void 0 || backend.checkUniqueBatch === void 0)) {
|
|
1096
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
1097
|
+
"The transaction backend lacks batched uniqueness operations",
|
|
1098
|
+
{ code: "SET_UPDATE_UNIQUENESS_UNSUPPORTED", kind }
|
|
1099
|
+
);
|
|
1100
|
+
}
|
|
1101
|
+
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0 && (backend.upsertFulltext === void 0 || backend.deleteFulltext === void 0 || backend.upsertFulltextBatch === void 0 || backend.deleteFulltextBatch === void 0)) {
|
|
1102
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
1103
|
+
"The transaction backend lacks batched fulltext operations",
|
|
1104
|
+
{ code: "SET_UPDATE_FULLTEXT_UNSUPPORTED", kind }
|
|
1105
|
+
);
|
|
1106
|
+
}
|
|
1107
|
+
if (getEmbeddingFields(schema).length > 0 && (backend.upsertEmbedding === void 0 || backend.deleteEmbedding === void 0 || backend.upsertEmbeddingBatch === void 0 || backend.deleteEmbeddingBatch === void 0)) {
|
|
1108
|
+
throw new chunkX4GDXBOP_cjs.ConfigurationError(
|
|
1109
|
+
"The transaction backend lacks batched vector operations",
|
|
1110
|
+
{ code: "SET_UPDATE_VECTOR_UNSUPPORTED", kind }
|
|
1111
|
+
);
|
|
1112
|
+
}
|
|
1113
|
+
const result = await updateNodeSet({
|
|
1114
|
+
graphId: ctx.graphId,
|
|
1115
|
+
kind,
|
|
1116
|
+
patch: args.patch,
|
|
1117
|
+
unsetProperties: args.unsetProperties,
|
|
1118
|
+
candidateIds: args.candidateIds,
|
|
1119
|
+
candidateIdColumn: args.candidateIdColumn
|
|
1120
|
+
});
|
|
1121
|
+
if (result.affectedCount === 0) return { affectedCount: 0 };
|
|
1122
|
+
const sidecarItems = result.rows.map((row) => {
|
|
1123
|
+
const props = chunkGHZPZNFC_cjs.rowPropsToObject(row.props);
|
|
1124
|
+
const validatedProps = chunkRDP6ZRSM_cjs.validateNodeProps(schema, props, {
|
|
1125
|
+
kind,
|
|
1126
|
+
operation: "update",
|
|
1127
|
+
id: row.id
|
|
1128
|
+
});
|
|
1129
|
+
if (!chunkZBFZGLZE_cjs.canonicalEqual(validatedProps, props)) {
|
|
1130
|
+
throw new chunkX4GDXBOP_cjs.ValidationError(
|
|
1131
|
+
`Set update would persist a non-canonical ${kind} row`,
|
|
1132
|
+
{
|
|
1133
|
+
entityType: "node",
|
|
1134
|
+
kind,
|
|
1135
|
+
operation: "update",
|
|
1136
|
+
id: row.id,
|
|
1137
|
+
issues: [
|
|
1138
|
+
{
|
|
1139
|
+
path: "props",
|
|
1140
|
+
message: "The complete row requires schema normalization"
|
|
1141
|
+
}
|
|
1142
|
+
]
|
|
1143
|
+
}
|
|
1144
|
+
);
|
|
1145
|
+
}
|
|
1146
|
+
return {
|
|
1147
|
+
kind,
|
|
1148
|
+
id: row.id,
|
|
1149
|
+
schema,
|
|
1150
|
+
props: validatedProps,
|
|
1151
|
+
uniqueConstraints
|
|
1152
|
+
};
|
|
1153
|
+
});
|
|
1154
|
+
const claimItems = sidecarItems.map((item) => ({
|
|
1155
|
+
kind: item.kind,
|
|
1156
|
+
id: item.id,
|
|
1157
|
+
props: item.props,
|
|
1158
|
+
constraints: item.uniqueConstraints
|
|
1159
|
+
}));
|
|
1160
|
+
if (uniqueConstraints.length > 0) {
|
|
1161
|
+
await validateResolvedNodeClaims(
|
|
1162
|
+
createUniquenessContext(ctx.graphId, ctx.registry, backend),
|
|
1163
|
+
claimItems,
|
|
1164
|
+
[]
|
|
1165
|
+
);
|
|
1166
|
+
await hardDeleteClaimsByNodeIds(
|
|
1167
|
+
uniquenessContext(ctx, backend),
|
|
1168
|
+
kind,
|
|
1169
|
+
result.rows.map((row) => row.id)
|
|
1170
|
+
);
|
|
1171
|
+
}
|
|
1172
|
+
await withNodeCreateClaimsBatch(
|
|
1173
|
+
ctx,
|
|
1174
|
+
claimItems,
|
|
1175
|
+
backend,
|
|
1176
|
+
alreadyAppliedRowWrite
|
|
1177
|
+
);
|
|
1178
|
+
await applyNodeInsertSyncFansBatch(ctx, sidecarItems, backend);
|
|
1179
|
+
return { affectedCount: result.affectedCount };
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
|
|
1183
|
+
exports.STORE_RUNTIME = STORE_RUNTIME;
|
|
1184
|
+
exports.TRANSACTION_RUNTIME = TRANSACTION_RUNTIME;
|
|
1185
|
+
exports.applyNodeHardDelete = applyNodeHardDelete;
|
|
1186
|
+
exports.applyNodeInsertSyncFans = applyNodeInsertSyncFans;
|
|
1187
|
+
exports.applyNodeInsertSyncFansBatch = applyNodeInsertSyncFansBatch;
|
|
1188
|
+
exports.applyNodeResurrect = applyNodeResurrect;
|
|
1189
|
+
exports.applyNodeSetUpdate = applyNodeSetUpdate;
|
|
1190
|
+
exports.applyNodeSoftDelete = applyNodeSoftDelete;
|
|
1191
|
+
exports.applyNodeUpdate = applyNodeUpdate;
|
|
1192
|
+
exports.applyResolvedNodeClaims = applyResolvedNodeClaims;
|
|
1193
|
+
exports.checkUniquenessConstraints = checkUniquenessConstraints;
|
|
1194
|
+
exports.computeFulltextContent = computeFulltextContent;
|
|
1195
|
+
exports.createNodeWriteContext = createNodeWriteContext;
|
|
1196
|
+
exports.createUniquenessContext = createUniquenessContext;
|
|
1197
|
+
exports.getEmbeddingFields = getEmbeddingFields;
|
|
1198
|
+
exports.nodeClaimEntries = nodeClaimEntries;
|
|
1199
|
+
exports.nodeClaimSites = nodeClaimSites;
|
|
1200
|
+
exports.storeBackend = storeBackend;
|
|
1201
|
+
exports.storeRuntime = storeRuntime;
|
|
1202
|
+
exports.transactionBackend = transactionBackend;
|
|
1203
|
+
exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
|
|
1204
|
+
exports.withNodeCreateClaims = withNodeCreateClaims;
|
|
1205
|
+
exports.withNodeCreateClaimsBatch = withNodeCreateClaimsBatch;
|
|
1206
|
+
//# sourceMappingURL=chunk-TUVD4DFR.cjs.map
|
|
1207
|
+
//# sourceMappingURL=chunk-TUVD4DFR.cjs.map
|