@nicia-ai/typegraph 0.50.0 → 0.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/backend/drizzle/indexes.cjs +10 -8
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/drizzle/indexes.js +6 -4
- package/dist/backend/index.cjs +183 -50
- package/dist/backend/index.d.cts +90 -4
- package/dist/backend/index.d.ts +90 -4
- package/dist/backend/index.js +6 -9
- package/dist/backend/postgres/index.cjs +30 -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 +16 -14
- package/dist/backend/postgres/pglite-store.cjs +6 -62
- 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 +6 -62
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +18 -16
- package/dist/backend/postgres/pglite.d.cts +3 -3
- package/dist/backend/postgres/pglite.d.ts +3 -3
- package/dist/backend/postgres/pglite.js +17 -15
- package/dist/backend/sqlite/index.cjs +27 -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 +14 -12
- package/dist/backend/sqlite/libsql.cjs +21 -19
- 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 +16 -14
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +8 -64
- 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 +7 -64
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +22 -19
- 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 -15
- package/dist/{chunk-TUVD4DFR.cjs → chunk-2CVDZCXH.cjs} +122 -51
- package/dist/chunk-2CVDZCXH.cjs.map +1 -0
- package/dist/{chunk-I5C6OTKR.js → chunk-2DWTBNSH.js} +3 -3
- package/dist/{chunk-I5C6OTKR.js.map → chunk-2DWTBNSH.js.map} +1 -1
- package/dist/{chunk-C76WFIVZ.cjs → chunk-2KCTP3U2.cjs} +180 -127
- package/dist/chunk-2KCTP3U2.cjs.map +1 -0
- package/dist/{chunk-BYBDM423.cjs → chunk-322TBTOQ.cjs} +48 -48
- package/dist/{chunk-BYBDM423.cjs.map → chunk-322TBTOQ.cjs.map} +1 -1
- package/dist/chunk-36SX6QXP.cjs +186 -0
- package/dist/chunk-36SX6QXP.cjs.map +1 -0
- package/dist/{chunk-H3XP6BAV.js → chunk-36VYWVQU.js} +3 -3
- package/dist/{chunk-H3XP6BAV.js.map → chunk-36VYWVQU.js.map} +1 -1
- package/dist/{chunk-VTJVMP4I.js → chunk-4DKY6RIU.js} +102 -31
- package/dist/chunk-4DKY6RIU.js.map +1 -0
- package/dist/chunk-4QKOZYMV.js +9 -0
- package/dist/chunk-4QKOZYMV.js.map +1 -0
- package/dist/{chunk-U3Z7XKAG.js → chunk-57JM6NW3.js} +8 -18
- package/dist/chunk-57JM6NW3.js.map +1 -0
- package/dist/{chunk-WCLMKNQE.cjs → chunk-5FVZSE3B.cjs} +1356 -1108
- package/dist/chunk-5FVZSE3B.cjs.map +1 -0
- package/dist/{chunk-XMY2SXOH.cjs → chunk-5WWEYV4H.cjs} +2208 -579
- package/dist/chunk-5WWEYV4H.cjs.map +1 -0
- package/dist/{chunk-WQBAQZHR.js → chunk-6NLYIMJO.js} +4 -4
- package/dist/{chunk-WQBAQZHR.js.map → chunk-6NLYIMJO.js.map} +1 -1
- package/dist/{chunk-G2TLHH6T.cjs → chunk-7B7I7YAW.cjs} +6 -6
- package/dist/{chunk-G2TLHH6T.cjs.map → chunk-7B7I7YAW.cjs.map} +1 -1
- package/dist/{chunk-EDLKIQRI.js → chunk-7G5IYROL.js} +6 -548
- package/dist/chunk-7G5IYROL.js.map +1 -0
- package/dist/{chunk-46UGOVRW.js → chunk-7QFRK6PU.js} +3 -7
- package/dist/chunk-7QFRK6PU.js.map +1 -0
- package/dist/chunk-A4C4NJ5U.cjs +12 -0
- package/dist/chunk-A4C4NJ5U.cjs.map +1 -0
- package/dist/{chunk-7CCMCMJO.cjs → chunk-AOGOC6JF.cjs} +77 -68
- package/dist/chunk-AOGOC6JF.cjs.map +1 -0
- package/dist/{chunk-TYGGUWMS.cjs → chunk-B3MN7EJR.cjs} +177 -137
- package/dist/chunk-B3MN7EJR.cjs.map +1 -0
- package/dist/{chunk-K6VKTBST.cjs → chunk-BZ5MVITP.cjs} +4 -4
- package/dist/{chunk-K6VKTBST.cjs.map → chunk-BZ5MVITP.cjs.map} +1 -1
- package/dist/{chunk-ZAQUKCUC.js → chunk-CBOD7TXH.js} +5 -5
- package/dist/{chunk-ZAQUKCUC.js.map → chunk-CBOD7TXH.js.map} +1 -1
- package/dist/{chunk-LLVOQOWE.cjs → chunk-CRZ56SZU.cjs} +6 -5
- package/dist/chunk-CRZ56SZU.cjs.map +1 -0
- package/dist/{chunk-ON47CBE4.cjs → chunk-D3GWARN7.cjs} +47 -47
- package/dist/{chunk-ON47CBE4.cjs.map → chunk-D3GWARN7.cjs.map} +1 -1
- package/dist/{chunk-W5SOCUBL.js → chunk-D3OUDFU7.js} +5 -5
- package/dist/{chunk-W5SOCUBL.js.map → chunk-D3OUDFU7.js.map} +1 -1
- package/dist/chunk-EKG2UXNX.cjs +23 -0
- package/dist/chunk-EKG2UXNX.cjs.map +1 -0
- package/dist/{chunk-2Q45FAIE.js → chunk-EVYW3532.js} +28 -19
- package/dist/chunk-EVYW3532.js.map +1 -0
- package/dist/{chunk-7PRMDZIA.cjs → chunk-FMMW3KX7.cjs} +21 -55
- package/dist/chunk-FMMW3KX7.cjs.map +1 -0
- package/dist/chunk-H2VWDQWC.cjs +571 -0
- package/dist/chunk-H2VWDQWC.cjs.map +1 -0
- package/dist/chunk-H4FY6OZK.js +13 -0
- package/dist/chunk-H4FY6OZK.js.map +1 -0
- package/dist/{chunk-OJHD3LXJ.cjs → chunk-H5IJSROF.cjs} +2 -8
- package/dist/chunk-H5IJSROF.cjs.map +1 -0
- package/dist/{chunk-U5EL6JUV.js → chunk-I5IOSA27.js} +101 -103
- package/dist/chunk-I5IOSA27.js.map +1 -0
- package/dist/{chunk-SHC7BCG5.cjs → chunk-I7YAY2VQ.cjs} +7 -7
- package/dist/{chunk-SHC7BCG5.cjs.map → chunk-I7YAY2VQ.cjs.map} +1 -1
- package/dist/chunk-IRCWIA3R.js +20 -0
- package/dist/chunk-IRCWIA3R.js.map +1 -0
- package/dist/chunk-IVQBLXBK.cjs +55 -0
- package/dist/chunk-IVQBLXBK.cjs.map +1 -0
- package/dist/{chunk-5PP4KRPV.js → chunk-IZD4HTCP.js} +5 -5
- package/dist/{chunk-5PP4KRPV.js.map → chunk-IZD4HTCP.js.map} +1 -1
- package/dist/{chunk-RDP6ZRSM.cjs → chunk-JQKMEKKW.cjs} +261 -204
- package/dist/chunk-JQKMEKKW.cjs.map +1 -0
- package/dist/chunk-JVA3KDEA.cjs +691 -0
- package/dist/chunk-JVA3KDEA.cjs.map +1 -0
- package/dist/{chunk-JG5XIJDY.js → chunk-K67P5DLL.js} +62 -22
- package/dist/chunk-K67P5DLL.js.map +1 -0
- package/dist/{chunk-MX7EKQPM.js → chunk-K6OZIHKI.js} +345 -97
- package/dist/chunk-K6OZIHKI.js.map +1 -0
- package/dist/{chunk-CS6JTQQ2.cjs → chunk-KACEYDYV.cjs} +94 -62
- package/dist/chunk-KACEYDYV.cjs.map +1 -0
- package/dist/{chunk-5OWHU7Z7.cjs → chunk-L6EVYIID.cjs} +248 -210
- package/dist/chunk-L6EVYIID.cjs.map +1 -0
- package/dist/{chunk-7OWE7WD6.js → chunk-LI4K2KEJ.js} +4 -4
- package/dist/{chunk-7OWE7WD6.js.map → chunk-LI4K2KEJ.js.map} +1 -1
- package/dist/chunk-LKZDQ2B4.js +1581 -0
- package/dist/chunk-LKZDQ2B4.js.map +1 -0
- package/dist/{chunk-45YZXI6X.cjs → chunk-LLFPQOBA.cjs} +27 -27
- package/dist/{chunk-45YZXI6X.cjs.map → chunk-LLFPQOBA.cjs.map} +1 -1
- package/dist/{chunk-ZRJTM7MT.js → chunk-LZMQ3SFK.js} +3 -3
- package/dist/{chunk-ZRJTM7MT.js.map → chunk-LZMQ3SFK.js.map} +1 -1
- package/dist/{chunk-DI6VC62F.js → chunk-M3VTS3F6.js} +3 -3
- package/dist/{chunk-DI6VC62F.js.map → chunk-M3VTS3F6.js.map} +1 -1
- package/dist/{chunk-MZ34E2GN.js → chunk-NBOS7BY3.js} +60 -21
- package/dist/chunk-NBOS7BY3.js.map +1 -0
- package/dist/{chunk-YA36ABIL.js → chunk-NGQDGL5X.js} +14 -48
- package/dist/chunk-NGQDGL5X.js.map +1 -0
- package/dist/{chunk-ZBFZGLZE.cjs → chunk-NLX5OWK7.cjs} +6 -2
- package/dist/chunk-NLX5OWK7.cjs.map +1 -0
- package/dist/chunk-NUQ2YFFH.cjs +1637 -0
- package/dist/chunk-NUQ2YFFH.cjs.map +1 -0
- package/dist/{chunk-TTCOPKUL.cjs → chunk-OGL4X4PH.cjs} +182 -184
- package/dist/chunk-OGL4X4PH.cjs.map +1 -0
- package/dist/{chunk-HY5BNOUN.cjs → chunk-OTNTGEXR.cjs} +4 -4
- package/dist/{chunk-HY5BNOUN.cjs.map → chunk-OTNTGEXR.cjs.map} +1 -1
- package/dist/chunk-OTWE63BW.js +53 -0
- package/dist/chunk-OTWE63BW.js.map +1 -0
- package/dist/chunk-PC5NGH5A.js +549 -0
- package/dist/chunk-PC5NGH5A.js.map +1 -0
- package/dist/{chunk-IPRP6TDL.cjs → chunk-PS3TUWJM.cjs} +7 -7
- package/dist/{chunk-IPRP6TDL.cjs.map → chunk-PS3TUWJM.cjs.map} +1 -1
- package/dist/{chunk-V76FGHY3.js → chunk-PVFFH7TL.js} +5 -5
- package/dist/{chunk-V76FGHY3.js.map → chunk-PVFFH7TL.js.map} +1 -1
- package/dist/chunk-QCD5JKU4.cjs +15 -0
- package/dist/chunk-QCD5JKU4.cjs.map +1 -0
- package/dist/{chunk-IRPYOHRC.js → chunk-QG5VEOKX.js} +6 -2
- package/dist/chunk-QG5VEOKX.js.map +1 -0
- package/dist/{chunk-2CYI5HRH.js → chunk-RI7RJH4G.js} +49 -17
- package/dist/chunk-RI7RJH4G.js.map +1 -0
- package/dist/{chunk-5LKOVCPP.js → chunk-RVUL2HXY.js} +6 -5
- package/dist/chunk-RVUL2HXY.js.map +1 -0
- package/dist/{chunk-WK23PGTP.cjs → chunk-S5GU4LUN.cjs} +11 -11
- package/dist/{chunk-WK23PGTP.cjs.map → chunk-S5GU4LUN.cjs.map} +1 -1
- package/dist/{chunk-S33YQEL7.js → chunk-SDPWO2Z5.js} +6 -6
- package/dist/{chunk-S33YQEL7.js.map → chunk-SDPWO2Z5.js.map} +1 -1
- package/dist/{chunk-6S3PTHL4.js → chunk-SLGGT2XD.js} +3 -3
- package/dist/{chunk-6S3PTHL4.js.map → chunk-SLGGT2XD.js.map} +1 -1
- package/dist/{chunk-HSEZ7X6Y.cjs → chunk-TIJUA4I6.cjs} +45 -45
- package/dist/{chunk-HSEZ7X6Y.cjs.map → chunk-TIJUA4I6.cjs.map} +1 -1
- package/dist/{chunk-CSNOYIB4.cjs → chunk-TM54OBHX.cjs} +13 -13
- package/dist/{chunk-CSNOYIB4.cjs.map → chunk-TM54OBHX.cjs.map} +1 -1
- package/dist/{chunk-MM3JHVKZ.cjs → chunk-TUWSVL6I.cjs} +4 -4
- package/dist/{chunk-MM3JHVKZ.cjs.map → chunk-TUWSVL6I.cjs.map} +1 -1
- package/dist/{chunk-2GIV5X4P.js → chunk-TYEYRCXL.js} +86 -33
- package/dist/chunk-TYEYRCXL.js.map +1 -0
- package/dist/{chunk-MJPZNEJZ.js → chunk-UKOVGCRN.js} +2095 -496
- package/dist/chunk-UKOVGCRN.js.map +1 -0
- package/dist/chunk-UYKDYE5D.cjs +12 -0
- package/dist/{chunk-KWNWG4RC.cjs.map → chunk-UYKDYE5D.cjs.map} +1 -1
- package/dist/{chunk-FX5ZW6PN.js → chunk-VAAC7L57.js} +95 -40
- package/dist/chunk-VAAC7L57.js.map +1 -0
- package/dist/{chunk-ISKCIQF2.cjs → chunk-VKHXYVN7.cjs} +14 -25
- package/dist/chunk-VKHXYVN7.cjs.map +1 -0
- package/dist/chunk-VUQZNUHU.js +171 -0
- package/dist/chunk-VUQZNUHU.js.map +1 -0
- package/dist/{chunk-K2XYLVVB.cjs → chunk-WDM5WQK4.cjs} +175 -136
- package/dist/chunk-WDM5WQK4.cjs.map +1 -0
- package/dist/{chunk-GVYVGGPJ.js → chunk-WFSYYU4W.js} +66 -28
- package/dist/chunk-WFSYYU4W.js.map +1 -0
- package/dist/{chunk-R7MRFE5P.js → chunk-WS5MT2UJ.js} +3 -3
- package/dist/{chunk-R7MRFE5P.js.map → chunk-WS5MT2UJ.js.map} +1 -1
- package/dist/chunk-XORONCV3.js +202 -0
- package/dist/chunk-XORONCV3.js.map +1 -0
- package/dist/chunk-ZGVTNKTX.cjs +217 -0
- package/dist/chunk-ZGVTNKTX.cjs.map +1 -0
- package/dist/core/index.cjs +20 -20
- package/dist/core/index.d.cts +4 -4
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +4 -4
- package/dist/{ddl-B49O7dB_.d.ts → ddl-BvcbgzHo.d.ts} +3 -3
- package/dist/{ddl-DcZG660s.d.cts → ddl-Ufebz5q5.d.cts} +3 -3
- package/dist/graph-extension/index.d.cts +2 -4
- package/dist/graph-extension/index.d.ts +2 -4
- package/dist/graph-merge/index.cjs +140 -125
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +8 -9
- package/dist/graph-merge/index.d.ts +8 -9
- package/dist/graph-merge/index.js +42 -27
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/index.cjs +144 -143
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -12
- package/dist/index.d.ts +11 -12
- package/dist/index.js +30 -29
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +14 -12
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/indexes/index.js +7 -5
- package/dist/{ingestion-import-target-CI8OWIkM.d.ts → ingestion-import-target-CAs1OX-l.d.cts} +1 -1
- package/dist/{ingestion-import-target-DCpfM1PX.d.cts → ingestion-import-target-DCQSPfNx.d.ts} +1 -1
- package/dist/interchange/index.cjs +41 -39
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +8 -8
- package/dist/interchange/index.d.ts +8 -8
- package/dist/interchange/index.js +16 -14
- package/dist/interchange/index.js.map +1 -1
- package/dist/local-store-impl-JC7OBRAW.js +75 -0
- package/dist/local-store-impl-JC7OBRAW.js.map +1 -0
- package/dist/local-store-impl-UOS2LUIG.cjs +77 -0
- package/dist/local-store-impl-UOS2LUIG.cjs.map +1 -0
- package/dist/{manager-Cfg1ENj1.d.ts → manager-B68OrPR2.d.ts} +1 -2
- package/dist/{manager-D348fa6W.d.cts → manager-D_t7oK69.d.cts} +1 -2
- package/dist/pglite-store-impl-J5J5AA52.cjs +75 -0
- package/dist/pglite-store-impl-J5J5AA52.cjs.map +1 -0
- package/dist/pglite-store-impl-LDRH2DUH.js +73 -0
- package/dist/pglite-store-impl-LDRH2DUH.js.map +1 -0
- package/dist/{postgres-UStOycLI.d.ts → postgres-BPLSVyHM.d.ts} +1 -1
- package/dist/{postgres-CH1kkM5J.d.cts → postgres-CqvtFC2y.d.cts} +1 -1
- package/dist/profiler/index.d.cts +9 -9
- package/dist/profiler/index.d.ts +9 -9
- package/dist/provenance/index.cjs +33 -20
- 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 +24 -11
- package/dist/provenance/index.js.map +1 -1
- package/dist/{repair-validity-windows-aWX7VNvv.d.cts → repair-validity-windows-DEzCKAdy.d.cts} +7 -3
- package/dist/{repair-validity-windows-BtOEe2pS.d.ts → repair-validity-windows-GMdaS2AH.d.ts} +7 -3
- package/dist/resolve-D_H8MHtq.d.ts +1805 -0
- package/dist/resolve-WEW8gWws.d.cts +1805 -0
- package/dist/schema/index.cjs +42 -40
- package/dist/schema/index.d.cts +4 -6
- package/dist/schema/index.d.ts +4 -6
- package/dist/schema/index.js +15 -13
- package/dist/{searchable-z4BiFfHI.d.ts → searchable-C_UREI9K.d.ts} +1 -1
- package/dist/{searchable-C8-RrL3l.d.cts → searchable-ClgET_i7.d.cts} +1 -1
- package/dist/{sqlite-axLw5Lo5.d.ts → sqlite-D1mXO9Kp.d.cts} +2 -1
- package/dist/{sqlite-Cyx9j9o6.d.cts → sqlite-MZA3oZNB.d.ts} +2 -1
- package/dist/{store-CTfQ9taw.d.ts → store-CuFX7fCx.d.cts} +38 -41
- package/dist/{store-DR9J7JVB.d.cts → store-D-ZjXQpW.d.ts} +38 -41
- package/dist/{temporal-CBOrERz5.d.ts → temporal-CpyEiRY8.d.cts} +1 -1
- package/dist/{temporal-B4Ky4wzh.d.cts → temporal-y0Aep9Su.d.ts} +1 -1
- package/dist/{types-CWg4dTjj.d.ts → types-6yf0Vv-_.d.cts} +1672 -1
- package/dist/{types-CWg4dTjj.d.cts → types-6yf0Vv-_.d.ts} +1672 -1
- package/dist/{types-BScHXVM7.d.ts → types-DzJ4dlzk.d.cts} +1 -1
- package/dist/{types-BE921wRl.d.cts → types-_vVSB9k-.d.ts} +1 -1
- package/dist/{where-BWXUPV3C.d.ts → where-DuG2LCLe.d.ts} +1 -1
- package/dist/{where-CNtx1aLc.d.cts → where-Mhf_yyKX.d.cts} +1 -1
- package/package.json +5 -1
- package/dist/chunk-2CYI5HRH.js.map +0 -1
- package/dist/chunk-2GIV5X4P.js.map +0 -1
- package/dist/chunk-2Q45FAIE.js.map +0 -1
- package/dist/chunk-46UGOVRW.js.map +0 -1
- package/dist/chunk-5LKOVCPP.js.map +0 -1
- package/dist/chunk-5OWHU7Z7.cjs.map +0 -1
- package/dist/chunk-6LEOAIIB.js +0 -1160
- package/dist/chunk-6LEOAIIB.js.map +0 -1
- package/dist/chunk-7CCMCMJO.cjs.map +0 -1
- package/dist/chunk-7PRMDZIA.cjs.map +0 -1
- package/dist/chunk-C76WFIVZ.cjs.map +0 -1
- package/dist/chunk-CS6JTQQ2.cjs.map +0 -1
- package/dist/chunk-EDLKIQRI.js.map +0 -1
- package/dist/chunk-EH3JZJUM.cjs +0 -567
- package/dist/chunk-EH3JZJUM.cjs.map +0 -1
- package/dist/chunk-FX5ZW6PN.js.map +0 -1
- package/dist/chunk-GHZPZNFC.cjs +0 -132
- package/dist/chunk-GHZPZNFC.cjs.map +0 -1
- package/dist/chunk-GVYVGGPJ.js.map +0 -1
- package/dist/chunk-IHK5KA2Q.cjs +0 -262
- package/dist/chunk-IHK5KA2Q.cjs.map +0 -1
- package/dist/chunk-IRPYOHRC.js.map +0 -1
- package/dist/chunk-ISKCIQF2.cjs.map +0 -1
- package/dist/chunk-JG5XIJDY.js.map +0 -1
- package/dist/chunk-K2XYLVVB.cjs.map +0 -1
- package/dist/chunk-KWNWG4RC.cjs +0 -12
- package/dist/chunk-LLVOQOWE.cjs.map +0 -1
- package/dist/chunk-MJPZNEJZ.js.map +0 -1
- package/dist/chunk-MX7EKQPM.js.map +0 -1
- package/dist/chunk-MZ34E2GN.js.map +0 -1
- package/dist/chunk-OJHD3LXJ.cjs.map +0 -1
- package/dist/chunk-PALYTHGM.js +0 -114
- package/dist/chunk-PALYTHGM.js.map +0 -1
- package/dist/chunk-RDP6ZRSM.cjs.map +0 -1
- package/dist/chunk-S3SDEQMC.js +0 -532
- package/dist/chunk-S3SDEQMC.js.map +0 -1
- package/dist/chunk-TEC24ZDA.cjs +0 -1254
- package/dist/chunk-TEC24ZDA.cjs.map +0 -1
- package/dist/chunk-TP4NJTI3.cjs +0 -1192
- package/dist/chunk-TP4NJTI3.cjs.map +0 -1
- package/dist/chunk-TTCOPKUL.cjs.map +0 -1
- package/dist/chunk-TUVD4DFR.cjs.map +0 -1
- package/dist/chunk-TYGGUWMS.cjs.map +0 -1
- package/dist/chunk-U3Z7XKAG.js.map +0 -1
- package/dist/chunk-U5EL6JUV.js.map +0 -1
- package/dist/chunk-VTJVMP4I.js.map +0 -1
- package/dist/chunk-WCLMKNQE.cjs.map +0 -1
- package/dist/chunk-XMY2SXOH.cjs.map +0 -1
- package/dist/chunk-Y55DLLEG.js +0 -247
- package/dist/chunk-Y55DLLEG.js.map +0 -1
- package/dist/chunk-YA36ABIL.js.map +0 -1
- package/dist/chunk-ZBFZGLZE.cjs.map +0 -1
- package/dist/index-B0PrmE3K.d.cts +0 -1146
- package/dist/index-CwcXsL5R.d.ts +0 -1146
- package/dist/materialize-indexes-C9GG3O3C.d.ts +0 -266
- package/dist/materialize-indexes-CrSiW_lT.d.cts +0 -266
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/drizzle/columns/fulltext.ts","../src/backend/drizzle/schema/postgres.ts","../src/backend/drizzle/schema/sqlite.ts","../src/backend/drizzle/ddl.ts"],"names":["customType","assertNoSystemIndexNameCollision","nodes","pgTable","text","jsonb","integer","timestamp","primaryKey","buildPostgresSystemIndexBuilders","buildPostgresNodeIndexBuilders","edges","buildPostgresEdgeIndexBuilders","recordedNodes","bigint","recordedEdges","recordedClock","index","uniqueIndex","sql","check","uniques","edgeClaims","schemaVersions","boolean","fulltext","DEFAULT_TABLE_NAMES","sqliteTable","buildSqliteSystemIndexBuilders","buildSqliteNodeIndexBuilders","buildSqliteEdgeIndexBuilders","tables","getSqliteTableConfig","is","SQLiteTable","fts5Strategy","BASE_CONTRIBUTION_OWNER","getPgTableConfig","PgTable","tsvectorStrategy"],"mappings":"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","file":"chunk-TP4NJTI3.cjs","sourcesContent":["/**\n * Custom Drizzle column types for the PostgreSQL `tsvectorStrategy`\n * fulltext table (`tsvector` + `regconfig`). Lets drizzle-kit\n * introspect the typed fulltext table the same way it introspects\n * `nodes`, `edges`, etc. Alternate strategies (pg_trgm, ParadeDB,\n * pgroonga) carry their own DDL via `FulltextStrategy.ownedTables()`\n * and don't use these columns.\n */\nimport { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * PostgreSQL `regconfig` column type — a registered text-search\n * configuration name (e.g. `'english'::regconfig`). Identical wire\n * format to `text`, but the `regconfig` SQL type lets a generated\n * column reference it inside `to_tsvector(\"language\", \"content\")`\n * as an immutable expression.\n */\nexport const regconfig = customType<{\n data: string;\n driverData: string;\n}>({\n dataType: () => \"regconfig\",\n});\n\n/**\n * PostgreSQL `tsvector` column type. Represents a parsed,\n * dictionary-normalized document; the GIN index that\n * `tsvectorFulltextTable` declares makes `@@ tsquery` lookups cheap.\n *\n * The on-the-wire driver representation is the canonical text form\n * (`'word1':1 'word2':2`); this type is read-only in practice — the\n * value is computed by a `GENERATED ALWAYS AS (...) STORED` clause —\n * so no `toDriver` mapping is provided.\n */\nexport const tsvector = customType<{\n data: string;\n driverData: string;\n}>({\n dataType: () => \"tsvector\",\n});\n","/**\n * Drizzle PostgreSQL schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Uses PostgreSQL-native types: JSONB, TIMESTAMPTZ, BOOLEAN, VECTOR.\n *\n * The embeddings table uses pgvector's native VECTOR type. Ensure the\n * extension is enabled before creating tables:\n *\n * ```sql\n * CREATE EXTENSION IF NOT EXISTS vector;\n * ```\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n *\n * // Custom table names\n * import { createPostgresTables } from \"@nicia-ai/typegraph/adapters/drizzle/postgres\";\n * const tables = createPostgresTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n bigint,\n boolean,\n check,\n index,\n integer,\n jsonb,\n pgTable,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n} from \"drizzle-orm/pg-core\";\n\nimport {\n buildPostgresEdgeIndexBuilders,\n buildPostgresNodeIndexBuilders,\n buildPostgresSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport { assertNoSystemIndexNameCollision } from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\nimport { regconfig, tsvector } from \"../columns/fulltext\";\n\n/**\n * Table name configuration.\n */\nexport type PostgresTableNames = Readonly<{\n nodes: string;\n edges: string;\n recordedNodes: string;\n recordedEdges: string;\n recordedClock: string;\n revisionOrigins: string;\n identityAssertions: string;\n recordedIdentityAssertions: string;\n identityClosure: string;\n identitySeparation: string;\n uniques: string;\n edgeClaims: string;\n schemaVersions: string;\n fulltext: string;\n indexMaterializations: string;\n contributionMaterializations: string;\n kindRemovals: string;\n reconciliationMarkers: string;\n}>;\n\nexport type CreatePostgresTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: PostgresTableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n recordedNodes: \"typegraph_recorded_nodes\",\n recordedEdges: \"typegraph_recorded_edges\",\n recordedClock: \"typegraph_recorded_clock\",\n revisionOrigins: \"typegraph_revision_origins\",\n identityAssertions: \"typegraph_identity_assertions\",\n recordedIdentityAssertions: \"typegraph_recorded_identity_assertions\",\n identityClosure: \"typegraph_identity_closure\",\n identitySeparation: \"typegraph_identity_separation\",\n uniques: \"typegraph_node_uniques\",\n edgeClaims: \"typegraph_edge_claims\",\n schemaVersions: \"typegraph_schema_versions\",\n fulltext: \"typegraph_node_fulltext\",\n indexMaterializations: \"typegraph_index_materializations\",\n contributionMaterializations: \"typegraph_contribution_materializations\",\n kindRemovals: \"typegraph_kind_removals\",\n reconciliationMarkers: \"typegraph_reconciliation_markers\",\n};\n\n/**\n * Creates PostgreSQL table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createPostgresTables(\n names: Partial<PostgresTableNames> = {},\n options: CreatePostgresTablesOptions = {},\n) {\n const n: PostgresTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n assertNoSystemIndexNameCollision(indexes, n);\n\n const nodes = pgTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: jsonb(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n // for both dialects + the runtime materializer).\n ...buildPostgresSystemIndexBuilders(\"nodes\", n.nodes, t),\n ...buildPostgresNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = pgTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: jsonb(\"props\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n ...buildPostgresSystemIndexBuilders(\"edges\", n.edges, t),\n ...buildPostgresEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const recordedNodes = pgTable(\n n.recordedNodes,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: jsonb(\"props\").notNull(),\n version: integer(\"version\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: jsonb(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildPostgresSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n ],\n );\n\n const recordedEdges = pgTable(\n n.recordedEdges,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: jsonb(\"props\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: jsonb(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildPostgresSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n ],\n );\n\n const recordedClock = pgTable(\n n.recordedClock,\n {\n graphId: text(\"graph_id\").notNull(),\n revision: bigint(\"revision\", { mode: \"number\" }).notNull(),\n recordedAt: timestamp(\"recorded_at\", { withTimezone: true }).notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const revisionOrigins = pgTable(\n n.revisionOrigins,\n {\n graphId: text(\"graph_id\").notNull(),\n origin: text(\"origin\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n // The identity assertion ledger. `ended_by_kind` / `ended_by_id` record WHY\n // an assertion stopped being current: NULL for an explicit retraction,\n // populated with the deleted endpoint's `(kind, id)` when a node soft-delete\n // cascaded onto it. The CHECK holds the two invariants the writers rely on —\n // the pair is set or unset together, and a cause only ever names an ENDED\n // row's own endpoint.\n const identityAssertions = pgTable(\n n.identityAssertions,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n relation: text(\"rel\").notNull(),\n aKind: text(\"a_kind\").notNull(),\n aId: text(\"a_id\").notNull(),\n bKind: text(\"b_kind\").notNull(),\n bId: text(\"b_id\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }).notNull(),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n endedByKind: text(\"ended_by_kind\"),\n endedById: text(\"ended_by_id\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n index(`${n.identityAssertions}_a_idx`).on(\n t.graphId,\n t.aKind,\n t.aId,\n t.validTo,\n ),\n index(`${n.identityAssertions}_b_idx`).on(\n t.graphId,\n t.bKind,\n t.bId,\n t.validTo,\n ),\n uniqueIndex(`${n.identityAssertions}_current_pair_idx`)\n .on(t.graphId, t.relation, t.aKind, t.aId, t.bKind, t.bId)\n .where(sql`${t.validTo} IS NULL`),\n check(\n `${n.identityAssertions}_ended_by_check`,\n sql`(ended_by_kind IS NULL) = (ended_by_id IS NULL) AND (ended_by_kind IS NULL OR (valid_to IS NOT NULL AND ((ended_by_kind = a_kind AND ended_by_id = a_id) OR (ended_by_kind = b_kind AND ended_by_id = b_id))))`,\n ),\n ],\n );\n\n const recordedIdentityAssertions = pgTable(\n n.recordedIdentityAssertions,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n relation: text(\"rel\").notNull(),\n aKind: text(\"a_kind\").notNull(),\n aId: text(\"a_id\").notNull(),\n bKind: text(\"b_kind\").notNull(),\n bId: text(\"b_id\").notNull(),\n validFrom: timestamp(\"valid_from\", { withTimezone: true }).notNull(),\n validTo: timestamp(\"valid_to\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n endedByKind: text(\"ended_by_kind\"),\n endedById: text(\"ended_by_id\"),\n recordedFrom: bigint(\"recorded_from\", { mode: \"number\" }).notNull(),\n recordedTo: bigint(\"recorded_to\", { mode: \"number\" }).notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: jsonb(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n index(`${n.recordedIdentityAssertions}_entity_idx`).on(\n t.graphId,\n t.id,\n t.recordedFrom,\n t.recordedTo,\n ),\n index(`${n.recordedIdentityAssertions}_a_idx`).on(\n t.graphId,\n t.aKind,\n t.aId,\n t.recordedFrom,\n t.recordedTo,\n ),\n index(`${n.recordedIdentityAssertions}_b_idx`).on(\n t.graphId,\n t.bKind,\n t.bId,\n t.recordedFrom,\n t.recordedTo,\n ),\n ],\n );\n\n const identityClosure = pgTable(\n n.identityClosure,\n {\n graphId: text(\"graph_id\").notNull(),\n memberKind: text(\"member_kind\").notNull(),\n memberId: text(\"member_id\").notNull(),\n classKind: text(\"class_kind\").notNull(),\n classId: text(\"class_id\").notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.memberKind, t.memberId] }),\n index(`${n.identityClosure}_class_idx`).on(\n t.graphId,\n t.classKind,\n t.classId,\n ),\n ],\n );\n\n // The identity separation relation: the `different` ledger lifted to whole\n // identity classes, one row per separated class pair. `class_key_low` /\n // `class_key_high` hold the persisted class-key encoding (see\n // `identity/separation.ts`), ordered by code point. The CHECK pins `COLLATE\n // \"C\"` because a database whose default collation is linguistic orders text\n // differently from the writer, which would reject legitimate pairs; under\n // `C` the comparison is byte order, which is exactly code-point order.\n // Fusing two separated classes relabels both sides of their shared row to\n // one key, so the contradiction cannot commit.\n const identitySeparation = pgTable(\n n.identitySeparation,\n {\n graphId: text(\"graph_id\").notNull(),\n classKeyLow: text(\"class_key_low\").notNull(),\n classKeyHigh: text(\"class_key_high\").notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.classKeyLow, t.classKeyHigh] }),\n index(`${n.identitySeparation}_high_idx`).on(t.graphId, t.classKeyHigh),\n check(\n `${n.identitySeparation}_ordered_pair_check`,\n sql`class_key_low COLLATE \"C\" < class_key_high COLLATE \"C\"`,\n ),\n ],\n );\n\n const uniques = pgTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: timestamp(\"deleted_at\", { withTimezone: true }),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n // The edge cardinality claim relation: one row per claim AXIS\n // (`<cardinality>:<edgeKind>`) and endpoint KEY, naming the edge that holds\n // it. Declared edge cardinality is a predicate over `(kind, from)` or\n // `(kind, from, to)`, which the edges primary key `(graph_id, id)` cannot\n // fence, so this relation's own primary key is what refuses a second\n // concurrent claimant. A claim whose holder is no longer live (or, for\n // `oneActive`, no longer active) is taken over in place, which is why the\n // relation needs no release path — see `store/claims/edge-claims.ts`.\n const edgeClaims = pgTable(\n n.edgeClaims,\n {\n graphId: text(\"graph_id\").notNull(),\n axis: text(\"axis\").notNull(),\n key: text(\"key\").notNull(),\n edgeId: text(\"edge_id\").notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.axis, t.key] }),\n index(`${n.edgeClaims}_edge_idx`).on(t.graphId, t.edgeId),\n ],\n );\n\n const schemaVersions = pgTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: jsonb(\"schema_doc\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull(),\n isActive: boolean(\"is_active\").notNull().default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n // Partial unique index enforcing the \"at most one active version\n // per graph\" invariant at the storage layer. Defense in depth\n // against buggy backend implementations or out-of-band writes.\n // Forces the deactivate-then-activate ordering used by\n // `commitSchemaVersion` and `setActiveVersion`.\n uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n .on(t.graphId)\n .where(sql`${t.isActive} = TRUE`),\n ],\n );\n\n /**\n * Per-deployment record of which declared indexes have been\n * materialized against this database. Owned and written by\n * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n * index names are physical, database-global identifiers — `graphId`\n * is provenance, not identity.\n */\n const indexMaterializations = pgTable(\n n.indexMaterializations,\n {\n indexName: text(\"index_name\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n entity: text(\"entity\").notNull(),\n kind: text(\"kind\").notNull(),\n signature: text(\"signature\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n // Cross-caller build claim: while `building_since` is fresh (within\n // the lease), exactly one materializer owns this index's CREATE\n // INDEX CONCURRENTLY. Serializes same-index CIC across processes —\n // two concurrent expression-index CICs deadlock each other (no\n // safe-snapshot exemption). NULL when no build is in flight.\n buildingSince: timestamp(\"building_since\", { withTimezone: true }),\n claimToken: text(\"claim_token\"),\n },\n (t) => [primaryKey({ columns: [t.indexName] })],\n );\n\n /**\n * Per-deployment record of extension kinds removed via\n * `store.removeKinds()` whose data has not yet been cleaned up by\n * `store.materializeRemovals()`. Same per-deployment rationale as\n * `indexMaterializations`: two replicas of the same `schema_doc` may\n * be at different stages of the data-cleanup phase. Keyed on\n * `(graph_id, kind_name, entity, schema_version)` — each remove\n * operation is its own row. `entity` separates a node and an edge\n * that share a kind name; the `schema_version` discriminator keeps a\n * re-add-then-re-remove cycle from collapsing onto the prior row,\n * where the COALESCE-on-failure rule would preserve the earlier\n * `removed_at` and silently skip the new pending cleanup.\n */\n const kindRemovals = pgTable(\n n.kindRemovals,\n {\n graphId: text(\"graph_id\").notNull(),\n kindName: text(\"kind_name\").notNull(),\n entity: text(\"entity\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n removedAt: timestamp(\"removed_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n }),\n ],\n );\n\n /**\n * Per-deployment high-water mark for `materializeRemovals`\n * reconciliation: the schema version up to which the historical\n * \"did every removal land in `kindRemovals`?\" walk has been\n * verified. Subsequent calls walk only versions newer than this\n * marker, instead of re-walking from version 1 every time.\n */\n const reconciliationMarkers = pgTable(\n n.reconciliationMarkers,\n {\n graphId: text(\"graph_id\").notNull(),\n reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n /**\n * Per-deployment durable marker that a strategy-owned table\n * contribution (#129 — fulltext today) has been materialized against\n * this database (#135). The single source of truth replacing the old\n * in-memory per-backend `fulltextEnsured` latch: \"is fulltext storage\n * materialized?\" is now a queryable database fact, written only by\n * the async boot path and read (cached) by the fulltext hot-path\n * gate.\n *\n * Keyed on `(graph_id, logical_name, owner, table_name)` — unlike\n * `indexMaterializations` (physical index name is database-global),\n * a contribution's identity is graph-scoped: two graphs can each own\n * a logically-identical fulltext table. `signature` is deliberately\n * NOT in the key: a same-identity row with a different signature is\n * detectable drift, surfaced as a loud error rather than a silent\n * re-materialize. `materialized_at` is null until the first success;\n * the COALESCE-on-failure rule preserves it across failed retries,\n * mirroring `indexMaterializations`.\n */\n const contributionMaterializations = pgTable(\n n.contributionMaterializations,\n {\n graphId: text(\"graph_id\").notNull(),\n logicalName: text(\"logical_name\").notNull(),\n owner: text(\"owner\").notNull(),\n tableName: text(\"table_name\").notNull(),\n signature: text(\"signature\").notNull(),\n materializedAt: timestamp(\"materialized_at\", { withTimezone: true }),\n lastAttemptedAt: timestamp(\"last_attempted_at\", {\n withTimezone: true,\n }).notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n }),\n ],\n );\n\n /**\n * Drizzle pg-core table for the default `tsvectorStrategy` so\n * drizzle-kit can introspect the fulltext table alongside the\n * others. Mirrors `tsvectorStrategy.ownedTables(...).createDdl` —\n * the typed shape and the strategy DDL must stay in sync (drift\n * sentinel lives in `tests/typed-fulltext-table.test.ts`).\n *\n * Why `regconfig` + GENERATED: `to_tsvector(\"language\", \"content\")`\n * needs an immutable language to qualify for use inside a\n * `STORED` generated column, so Postgres can own the\n * `content → tsv` invariant.\n *\n * Alternate strategies (pg_trgm, ParadeDB, pgroonga) bring their\n * own DDL; `generatePostgresDDL` skips this typed table for them\n * and defers to the active strategy's `ownedTables(...).createDdl`.\n * Drizzle-kit consumers on non-default strategies must override\n * `tables.fulltext` in their schema barrel.\n */\n const fulltext = pgTable(\n n.fulltext,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n content: text(\"content\").notNull(),\n language: regconfig(\"language\").notNull(),\n tsv: tsvector(\"tsv\")\n .generatedAlwaysAs(sql`to_tsvector(\"language\", \"content\")`)\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.nodeKind, t.nodeId] }),\n index(`${n.fulltext}_tsv_idx`).using(\"gin\", t.tsv),\n index(`${n.fulltext}_kind_idx`).on(t.graphId, t.nodeKind),\n ],\n );\n\n return {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n revisionOrigins,\n identityAssertions,\n recordedIdentityAssertions,\n identityClosure,\n identitySeparation,\n uniques,\n edgeClaims,\n schemaVersions,\n indexMaterializations,\n contributionMaterializations,\n kindRemovals,\n reconciliationMarkers,\n fulltext,\n fulltextTableName: n.fulltext,\n } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createPostgresTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n uniques,\n edgeClaims,\n schemaVersions,\n fulltext,\n} = tables;\n\n/**\n * Type representing the tables object returned by createPostgresTables.\n */\nexport type PostgresTables = ReturnType<typeof createPostgresTables>;\n","/**\n * Drizzle SQLite schema for TypeGraph.\n *\n * Provides table definitions that can be customized via the factory function.\n * Users import these tables into their Drizzle schema and use drizzle-kit\n * for migrations.\n *\n * @example\n * ```typescript\n * // Default table names\n * import { tables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n *\n * // Custom table names\n * import { createSqliteTables } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite\";\n * const tables = createSqliteTables({\n * nodes: \"myapp_nodes\",\n * edges: \"myapp_edges\",\n * });\n * ```\n */\nimport { sql } from \"drizzle-orm\";\nimport {\n check,\n index,\n integer,\n primaryKey,\n sqliteTable,\n text,\n uniqueIndex,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n buildSqliteEdgeIndexBuilders,\n buildSqliteNodeIndexBuilders,\n buildSqliteSystemIndexBuilders,\n} from \"../../../indexes/drizzle\";\nimport { assertNoSystemIndexNameCollision } from \"../../../indexes/system\";\nimport { type IndexDeclaration } from \"../../../indexes/types\";\n\n/**\n * Table name configuration.\n */\nexport type SqliteTableNames = Readonly<{\n nodes: string;\n edges: string;\n recordedNodes: string;\n recordedEdges: string;\n recordedClock: string;\n revisionOrigins: string;\n identityAssertions: string;\n recordedIdentityAssertions: string;\n identityClosure: string;\n identitySeparation: string;\n uniques: string;\n edgeClaims: string;\n schemaVersions: string;\n fulltext: string;\n indexMaterializations: string;\n contributionMaterializations: string;\n kindRemovals: string;\n reconciliationMarkers: string;\n}>;\n\n/**\n * Physical name of the legacy single shared embeddings table, dropped in\n * the cross-backend vector cutover (the clean cut of #157). Strategies now\n * own per-`(nodeKind, fieldPath)` typed storage. Retained only so the\n * one-time migration utility can address and drain the old table.\n */\nexport const LEGACY_EMBEDDINGS_TABLE_NAME = \"typegraph_node_embeddings\";\n\nexport type CreateSqliteTablesOptions = Readonly<{\n /**\n * Additional TypeGraph indexes to include in the Drizzle schema.\n *\n * These become first-class Drizzle indexes, so drizzle-kit migrations will\n * pick them up automatically.\n */\n indexes?: readonly IndexDeclaration[] | undefined;\n}>;\n\nconst DEFAULT_TABLE_NAMES: SqliteTableNames = {\n nodes: \"typegraph_nodes\",\n edges: \"typegraph_edges\",\n recordedNodes: \"typegraph_recorded_nodes\",\n recordedEdges: \"typegraph_recorded_edges\",\n recordedClock: \"typegraph_recorded_clock\",\n revisionOrigins: \"typegraph_revision_origins\",\n identityAssertions: \"typegraph_identity_assertions\",\n recordedIdentityAssertions: \"typegraph_recorded_identity_assertions\",\n identityClosure: \"typegraph_identity_closure\",\n identitySeparation: \"typegraph_identity_separation\",\n uniques: \"typegraph_node_uniques\",\n edgeClaims: \"typegraph_edge_claims\",\n schemaVersions: \"typegraph_schema_versions\",\n fulltext: \"typegraph_node_fulltext\",\n indexMaterializations: \"typegraph_index_materializations\",\n contributionMaterializations: \"typegraph_contribution_materializations\",\n kindRemovals: \"typegraph_kind_removals\",\n reconciliationMarkers: \"typegraph_reconciliation_markers\",\n};\n\n/**\n * Creates SQLite table definitions with customizable table names.\n * Index names are derived from table names.\n */\nexport function createSqliteTables(\n names: Partial<SqliteTableNames> = {},\n options: CreateSqliteTablesOptions = {},\n) {\n const n: SqliteTableNames = { ...DEFAULT_TABLE_NAMES, ...names };\n const indexes = options.indexes ?? [];\n assertNoSystemIndexNameCollision(indexes, n);\n\n const nodes = sqliteTable(\n n.nodes,\n {\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: text(\"props\").notNull(),\n version: integer(\"version\").notNull().default(1),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.kind, t.id] }),\n // System indexes come from SYSTEM_INDEX_DECLARATIONS (single source\n // for both dialects + the runtime materializer).\n ...buildSqliteSystemIndexBuilders(\"nodes\", n.nodes, t),\n ...buildSqliteNodeIndexBuilders(t, indexes),\n ],\n );\n\n const edges = sqliteTable(\n n.edges,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: text(\"props\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n ...buildSqliteSystemIndexBuilders(\"edges\", n.edges, t),\n ...buildSqliteEdgeIndexBuilders(t, indexes),\n ],\n );\n\n const recordedNodes = sqliteTable(\n n.recordedNodes,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n kind: text(\"kind\").notNull(),\n id: text(\"id\").notNull(),\n props: text(\"props\").notNull(),\n version: integer(\"version\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n recordedFrom: integer(\"recorded_from\").notNull(),\n recordedTo: integer(\"recorded_to\").notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: text(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildSqliteSystemIndexBuilders(\"recordedNodes\", n.recordedNodes, t),\n ],\n );\n\n const recordedEdges = sqliteTable(\n n.recordedEdges,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n kind: text(\"kind\").notNull(),\n fromKind: text(\"from_kind\").notNull(),\n fromId: text(\"from_id\").notNull(),\n toKind: text(\"to_kind\").notNull(),\n toId: text(\"to_id\").notNull(),\n props: text(\"props\").notNull(),\n validFrom: text(\"valid_from\"),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n recordedFrom: integer(\"recorded_from\").notNull(),\n recordedTo: integer(\"recorded_to\").notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: text(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n ...buildSqliteSystemIndexBuilders(\"recordedEdges\", n.recordedEdges, t),\n ],\n );\n\n const recordedClock = sqliteTable(\n n.recordedClock,\n {\n graphId: text(\"graph_id\").notNull(),\n revision: integer(\"revision\").notNull(),\n recordedAt: text(\"recorded_at\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n const revisionOrigins = sqliteTable(\n n.revisionOrigins,\n {\n graphId: text(\"graph_id\").notNull(),\n origin: text(\"origin\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n // The identity assertion ledger. `ended_by_kind` / `ended_by_id` record WHY\n // an assertion stopped being current: NULL for an explicit retraction,\n // populated with the deleted endpoint's `(kind, id)` when a node soft-delete\n // cascaded onto it. The CHECK holds the two invariants the writers rely on —\n // the pair is set or unset together, and a cause only ever names an ENDED\n // row's own endpoint.\n const identityAssertions = sqliteTable(\n n.identityAssertions,\n {\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n relation: text(\"rel\").notNull(),\n aKind: text(\"a_kind\").notNull(),\n aId: text(\"a_id\").notNull(),\n bKind: text(\"b_kind\").notNull(),\n bId: text(\"b_id\").notNull(),\n validFrom: text(\"valid_from\").notNull(),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n endedByKind: text(\"ended_by_kind\"),\n endedById: text(\"ended_by_id\"),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.id] }),\n index(`${n.identityAssertions}_a_idx`).on(\n t.graphId,\n t.aKind,\n t.aId,\n t.validTo,\n ),\n index(`${n.identityAssertions}_b_idx`).on(\n t.graphId,\n t.bKind,\n t.bId,\n t.validTo,\n ),\n uniqueIndex(`${n.identityAssertions}_current_pair_idx`)\n .on(t.graphId, t.relation, t.aKind, t.aId, t.bKind, t.bId)\n .where(sql`${t.validTo} IS NULL`),\n check(\n `${n.identityAssertions}_ended_by_check`,\n sql`(ended_by_kind IS NULL) = (ended_by_id IS NULL) AND (ended_by_kind IS NULL OR (valid_to IS NOT NULL AND ((ended_by_kind = a_kind AND ended_by_id = a_id) OR (ended_by_kind = b_kind AND ended_by_id = b_id))))`,\n ),\n ],\n );\n\n const recordedIdentityAssertions = sqliteTable(\n n.recordedIdentityAssertions,\n {\n historyId: text(\"history_id\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n id: text(\"id\").notNull(),\n relation: text(\"rel\").notNull(),\n aKind: text(\"a_kind\").notNull(),\n aId: text(\"a_id\").notNull(),\n bKind: text(\"b_kind\").notNull(),\n bId: text(\"b_id\").notNull(),\n validFrom: text(\"valid_from\").notNull(),\n validTo: text(\"valid_to\"),\n createdAt: text(\"created_at\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n deletedAt: text(\"deleted_at\"),\n endedByKind: text(\"ended_by_kind\"),\n endedById: text(\"ended_by_id\"),\n recordedFrom: integer(\"recorded_from\").notNull(),\n recordedTo: integer(\"recorded_to\").notNull(),\n op: text(\"op\").notNull(),\n schemaVersion: integer(\"schema_version\"),\n txId: text(\"tx_id\"),\n meta: text(\"meta\"),\n },\n (t) => [\n primaryKey({ columns: [t.historyId] }),\n index(`${n.recordedIdentityAssertions}_entity_idx`).on(\n t.graphId,\n t.id,\n t.recordedFrom,\n t.recordedTo,\n ),\n index(`${n.recordedIdentityAssertions}_a_idx`).on(\n t.graphId,\n t.aKind,\n t.aId,\n t.recordedFrom,\n t.recordedTo,\n ),\n index(`${n.recordedIdentityAssertions}_b_idx`).on(\n t.graphId,\n t.bKind,\n t.bId,\n t.recordedFrom,\n t.recordedTo,\n ),\n ],\n );\n\n const identityClosure = sqliteTable(\n n.identityClosure,\n {\n graphId: text(\"graph_id\").notNull(),\n memberKind: text(\"member_kind\").notNull(),\n memberId: text(\"member_id\").notNull(),\n classKind: text(\"class_kind\").notNull(),\n classId: text(\"class_id\").notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.memberKind, t.memberId] }),\n index(`${n.identityClosure}_class_idx`).on(\n t.graphId,\n t.classKind,\n t.classId,\n ),\n ],\n );\n\n // The identity separation relation: the `different` ledger lifted to whole\n // identity classes, one row per separated class pair. `class_key_low` /\n // `class_key_high` hold the persisted class-key encoding (see\n // `identity/separation.ts`), ordered by code point so the CHECK below —\n // SQLite compares TEXT with the BINARY collation, which is code-point order\n // — rejects `low = high`. Fusing two separated classes relabels both sides\n // of their shared row to one key, so the contradiction cannot commit.\n const identitySeparation = sqliteTable(\n n.identitySeparation,\n {\n graphId: text(\"graph_id\").notNull(),\n classKeyLow: text(\"class_key_low\").notNull(),\n classKeyHigh: text(\"class_key_high\").notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.classKeyLow, t.classKeyHigh] }),\n index(`${n.identitySeparation}_high_idx`).on(t.graphId, t.classKeyHigh),\n check(\n `${n.identitySeparation}_ordered_pair_check`,\n sql`class_key_low < class_key_high`,\n ),\n ],\n );\n\n const uniques = sqliteTable(\n n.uniques,\n {\n graphId: text(\"graph_id\").notNull(),\n nodeKind: text(\"node_kind\").notNull(),\n constraintName: text(\"constraint_name\").notNull(),\n key: text(\"key\").notNull(),\n nodeId: text(\"node_id\").notNull(),\n concreteKind: text(\"concrete_kind\").notNull(),\n deletedAt: text(\"deleted_at\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.nodeKind, t.constraintName, t.key],\n }),\n index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId),\n ],\n );\n\n // The edge cardinality claim relation — same shape and same role as the\n // PostgreSQL table, with a text timestamp, mirroring `uniques`. See\n // `store/claims/edge-claims.ts` for why it needs no release path.\n const edgeClaims = sqliteTable(\n n.edgeClaims,\n {\n graphId: text(\"graph_id\").notNull(),\n axis: text(\"axis\").notNull(),\n key: text(\"key\").notNull(),\n edgeId: text(\"edge_id\").notNull(),\n updatedAt: text(\"updated_at\").notNull(),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.axis, t.key] }),\n index(`${n.edgeClaims}_edge_idx`).on(t.graphId, t.edgeId),\n ],\n );\n\n const schemaVersions = sqliteTable(\n n.schemaVersions,\n {\n graphId: text(\"graph_id\").notNull(),\n version: integer(\"version\").notNull(),\n schemaHash: text(\"schema_hash\").notNull(),\n schemaDoc: text(\"schema_doc\").notNull(),\n createdAt: text(\"created_at\").notNull(),\n isActive: integer(\"is_active\", { mode: \"boolean\" })\n .notNull()\n .default(false),\n },\n (t) => [\n primaryKey({ columns: [t.graphId, t.version] }),\n index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive),\n // Partial unique index enforcing the \"at most one active version\n // per graph\" invariant at the storage layer. Defense in depth\n // against buggy backend implementations or out-of-band writes.\n // Forces the deactivate-then-activate ordering used by\n // `commitSchemaVersion` and `setActiveVersion`.\n uniqueIndex(`${n.schemaVersions}_one_active_per_graph_idx`)\n .on(t.graphId)\n .where(sql`${t.isActive} = 1`),\n ],\n );\n\n /**\n * Per-deployment record of which declared indexes have been\n * materialized against this database. Owned and written by\n * `store.materializeIndexes()`. Keyed on `index_name` because SQL\n * index names are physical, database-global identifiers — `graphId`\n * is provenance, not identity.\n */\n const indexMaterializations = sqliteTable(\n n.indexMaterializations,\n {\n indexName: text(\"index_name\").notNull(),\n graphId: text(\"graph_id\").notNull(),\n entity: text(\"entity\").notNull(),\n kind: text(\"kind\").notNull(),\n signature: text(\"signature\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n materializedAt: text(\"materialized_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [primaryKey({ columns: [t.indexName] })],\n );\n\n /**\n * Per-deployment record of extension kinds removed via\n * `store.removeKinds()` whose data has not yet been cleaned up by\n * `store.materializeRemovals()`. Keyed on `(graph_id, kind_name,\n * entity, schema_version)` — each remove operation is its own row.\n * `entity` separates a node and an edge that share a kind name; the\n * `schema_version` discriminator keeps a re-add-then-re-remove cycle\n * (Foo removed at v=N, re-added, then removed again at v=N+2) from\n * collapsing onto the prior row, where the COALESCE-on-failure rule\n * would preserve the earlier `removed_at` and silently skip the new\n * pending cleanup. `removed_at` is null until the data-cleanup pass\n * succeeds; the pending set is \"rows where removed_at IS NULL\".\n */\n const kindRemovals = sqliteTable(\n n.kindRemovals,\n {\n graphId: text(\"graph_id\").notNull(),\n kindName: text(\"kind_name\").notNull(),\n entity: text(\"entity\").notNull(),\n schemaVersion: integer(\"schema_version\").notNull(),\n removedAt: text(\"removed_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.kindName, t.entity, t.schemaVersion],\n }),\n ],\n );\n\n /**\n * Per-deployment high-water mark for the `materializeRemovals`\n * reconciliation walk. One row per `graph_id` carrying the schema\n * version up to which the historical \"did every removal land in\n * `kindRemovals`?\" walk has been verified. Lets subsequent calls\n * skip already-checked transitions instead of re-walking from\n * version 1 every time.\n */\n const reconciliationMarkers = sqliteTable(\n n.reconciliationMarkers,\n {\n graphId: text(\"graph_id\").notNull(),\n reconciledToVersion: integer(\"reconciled_to_version\").notNull(),\n },\n (t) => [primaryKey({ columns: [t.graphId] })],\n );\n\n /**\n * Per-deployment durable marker that a strategy-owned table\n * contribution (#129 — the FTS5 virtual table today) has been\n * materialized against this database (#135). Replaces the in-memory\n * per-backend `fulltextEnsured` latch with a queryable database fact.\n * Keyed on `(graph_id, logical_name, owner, table_name)`; `signature`\n * stays out of the key so same-identity drift is a loud error, not a\n * silent re-materialize. Same COALESCE-on-failure preservation rule\n * as `indexMaterializations`.\n */\n const contributionMaterializations = sqliteTable(\n n.contributionMaterializations,\n {\n graphId: text(\"graph_id\").notNull(),\n logicalName: text(\"logical_name\").notNull(),\n owner: text(\"owner\").notNull(),\n tableName: text(\"table_name\").notNull(),\n signature: text(\"signature\").notNull(),\n materializedAt: text(\"materialized_at\"),\n lastAttemptedAt: text(\"last_attempted_at\").notNull(),\n lastError: text(\"last_error\"),\n },\n (t) => [\n primaryKey({\n columns: [t.graphId, t.logicalName, t.owner, t.tableName],\n }),\n ],\n );\n\n return {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n revisionOrigins,\n identityAssertions,\n recordedIdentityAssertions,\n identityClosure,\n identitySeparation,\n uniques,\n edgeClaims,\n schemaVersions,\n indexMaterializations,\n contributionMaterializations,\n kindRemovals,\n reconciliationMarkers,\n /**\n * The fulltext storage is a FTS5 virtual table which Drizzle cannot\n * represent. DDL is emitted as raw SQL and operations query it via\n * `sql.raw()`.\n */\n fulltextTableName: n.fulltext,\n } as const;\n}\n\n/**\n * Default tables with standard TypeGraph table names.\n */\nexport const tables = createSqliteTables();\n\n/**\n * Convenience exports for default tables.\n */\nexport const {\n nodes,\n edges,\n recordedNodes,\n recordedEdges,\n recordedClock,\n uniques,\n edgeClaims,\n schemaVersions,\n} = tables;\n\n/**\n * Type representing the tables object returned by createSqliteTables.\n */\nexport type SqliteTables = ReturnType<typeof createSqliteTables>;\n","/**\n * DDL generation utilities for TypeGraph backends.\n *\n * Provides utilities for generating DDL statements from Drizzle\n * table definitions. This ensures migrations match production schema.\n */\nimport { is } from \"drizzle-orm\";\nimport {\n getTableConfig as getPgTableConfig,\n type PgColumn,\n PgTable,\n type PgTableWithColumns,\n} from \"drizzle-orm/pg-core\";\nimport {\n getTableConfig as getSqliteTableConfig,\n type SQLiteColumn,\n SQLiteTable,\n type SQLiteTableWithColumns,\n} from \"drizzle-orm/sqlite-core\";\n\nimport {\n fts5Strategy,\n type FulltextStrategy,\n tsvectorStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n BASE_CONTRIBUTION_OWNER,\n type StrategyTableContribution,\n type TableContribution,\n} from \"../table-contribution\";\nimport {\n type PostgresTables,\n tables as postgresTables,\n} from \"./schema/postgres\";\nimport { type SqliteTables, tables as sqliteTables } from \"./schema/sqlite\";\n\n// Narrow interfaces for Drizzle column internals not exposed in public types.\n// These are accessed only in DDL generation for migration scripts.\ntype TimestampColumnConfig = Readonly<{\n config?: Readonly<{ withTimezone?: boolean }>;\n}>;\ntype CustomColumnType = Readonly<{\n getSQLType?: () => string;\n}>;\n\n// ============================================================\n// SQLite DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to SQLite types.\n */\nfunction getSqliteColumnType(column: SQLiteColumn): string {\n switch (column.columnType) {\n case \"SQLiteText\": {\n return \"TEXT\";\n }\n case \"SQLiteInteger\": {\n return \"INTEGER\";\n }\n case \"SQLiteReal\": {\n return \"REAL\";\n }\n case \"SQLiteBlob\": {\n return \"BLOB\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for SQLite.\n */\nfunction formatDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle SQLite table definition.\n */\nexport function generateSqliteCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string {\n const config = getSqliteTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [\n `\"${column.name}\"`,\n getSqliteColumnType(column as SQLiteColumn),\n ];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n columnDefs.push(...renderTableChecks(config.checks, config.name));\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Renders a Drizzle table's CHECK constraints as CREATE TABLE clauses.\n *\n * A CHECK is a correctness barrier, not a hint: the identity separation\n * relation relies on one to abort a contradictory transaction. Dropping it\n * from the emitted DDL would leave the barrier declared in the Drizzle schema\n * and absent from every runtime-provisioned database, so an unrenderable\n * expression throws rather than degrading to a table without it.\n */\nfunction renderTableChecks(\n checks: readonly Readonly<{ name: string; value: unknown }>[],\n tableName: string,\n): readonly string[] {\n return checks.map(\n (check) =>\n `CONSTRAINT \"${check.name}\" CHECK (${inlineSqlOrThrow(\n check.value,\n `table \"${tableName}\" CHECK constraint \"${check.name}\"`,\n )})`,\n );\n}\n\n/**\n * Gets the column name from an index column, handling both Column and SQL types.\n */\nfunction renderIndexColumn(col: unknown): string {\n if (col && typeof col === \"object\" && \"name\" in col) {\n return `\"${(col as { name: string }).name}\"`;\n }\n\n const sql = tryInlineSql(col);\n if (sql !== undefined) {\n return sql;\n }\n\n return \"unknown\";\n}\n\nfunction tryInlineSql(value: unknown): string | undefined {\n if (value && typeof value === \"object\" && \"getSQL\" in value) {\n const maybe = value as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return inlineSql(maybe.getSQL());\n }\n }\n\n return inlineSql(value);\n}\n\nfunction flattenSqlChunk(chunk: unknown): string {\n if (typeof chunk === \"string\") {\n return chunk;\n }\n\n if (typeof chunk === \"object\" && chunk !== null) {\n // Drizzle column references (SQLiteText, PgText, etc.) carry the\n // column name directly. Match these BEFORE the `getSQL` fallback —\n // a column's `.getSQL()` wraps the column back inside a SQL object\n // that points to itself, which would recurse infinitely.\n if (\"name\" in chunk && typeof chunk.name === \"string\") {\n return `\"${(chunk as { name: string }).name}\"`;\n }\n\n // Drizzle's StringChunk stores its literal as `.value`, usually as a\n // one-element array ([\"\"], [\"SELECT \"]) but sometimes as a plain string.\n if (\"value\" in chunk) {\n const value = chunk.value;\n if (typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((part) => flattenSqlChunk(part)).join(\"\");\n }\n }\n\n if (\"queryChunks\" in chunk && Array.isArray(chunk.queryChunks)) {\n return (chunk as { queryChunks: readonly unknown[] }).queryChunks\n .map((part) => flattenSqlChunk(part))\n .join(\"\");\n }\n\n if (\"getSQL\" in chunk) {\n const maybe = chunk as { getSQL?: () => unknown };\n if (typeof maybe.getSQL === \"function\") {\n return flattenSqlChunk(maybe.getSQL());\n }\n }\n }\n\n throw new Error(`Unable to inline SQL chunk: ${String(chunk)}`);\n}\n\nfunction inlineSql(value: unknown): string | undefined {\n try {\n return flattenSqlChunk(value);\n } catch {\n return undefined;\n }\n}\n\nfunction inlineSqlOrThrow(value: unknown, context: string): string {\n const inlined = inlineSql(value);\n if (inlined === undefined) {\n throw new Error(`Unable to inline SQL for ${context}`);\n }\n return inlined;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle SQLite table definition.\n */\nfunction generateSqliteCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: SQLiteTableWithColumns<any>,\n): string[] {\n const config = getSqliteTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `SQLite index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\" (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle SQLite table. The barrel\n * exposes non-table values (e.g. `fulltextTableName: string`) the DDL\n * generators must skip — and a contribution's barrel key is its\n * materialization identity, so a misclassified non-table would corrupt\n * that identity, not just emit stray DDL.\n */\nfunction isSqliteTable(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is SQLiteTableWithColumns<any> {\n return is(value, SQLiteTable);\n}\n\n/**\n * Strategy-declared contributions flagged `runtimeEnsure`. Per the\n * `runtimeEnsure` invariant only strategy contributions can be runtime\n * (base tables never are), so this is the complete runtime set without\n * walking base tables.\n */\nexport function runtimeStrategyContributions(\n fulltextStrategy: FulltextStrategy,\n fulltextTableName: string,\n): readonly StrategyTableContribution[] {\n return fulltextStrategy\n .ownedTables(fulltextTableName)\n .filter((contribution) => contribution.runtimeEnsure);\n}\n\n/**\n * The authoritative set of tables the SQLite backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n */\nexport function sqliteContributions(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): readonly TableContribution[] {\n const contributions: TableContribution[] = [];\n for (const [key, table] of Object.entries(tables)) {\n if (!isSqliteTable(table)) continue;\n // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n // the #135 materialization identity survives custom table-name\n // overrides; the resolved SQL name is only the physical tableName.\n contributions.push({\n logicalName: key,\n owner: BASE_CONTRIBUTION_OWNER,\n tableName: getSqliteTableConfig(table).name,\n createDdl: [\n generateSqliteCreateTableSQL(table),\n ...generateSqliteCreateIndexSQL(table),\n ],\n runtimeEnsure: false,\n });\n }\n // Strategy declarations are already authoritative contributions;\n // emitted last (after base tables).\n for (const declared of fulltextStrategy.ownedTables(\n tables.fulltextTableName,\n )) {\n contributions.push(declared);\n }\n return contributions;\n}\n\n/**\n * Generates all DDL statements for the given SQLite tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys.\n */\nexport function generateSqliteDDL(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): string[] {\n return sqliteContributions(tables, fulltextStrategy).flatMap(\n (contribution) => [...contribution.createDdl],\n );\n}\n\n/**\n * Generates a single SQL string for SQLite migrations.\n * Convenience function that joins all DDL statements.\n */\nexport function generateSqliteMigrationSQL(\n tables: SqliteTables = sqliteTables,\n fulltextStrategy: FulltextStrategy = fts5Strategy,\n): string {\n return generateSqliteDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n}\n\n// ============================================================\n// PostgreSQL DDL Generation\n// ============================================================\n\n/**\n * Maps Drizzle column types to PostgreSQL types.\n */\nfunction getPgColumnType(column: PgColumn): string {\n switch (column.columnType) {\n case \"PgText\": {\n return \"TEXT\";\n }\n case \"PgInteger\": {\n return \"INTEGER\";\n }\n case \"PgBigInt53\":\n case \"PgBigInt64\": {\n return \"BIGINT\";\n }\n case \"PgBoolean\": {\n return \"BOOLEAN\";\n }\n case \"PgJsonb\": {\n return \"JSONB\";\n }\n case \"PgTimestamp\": {\n return (column as unknown as TimestampColumnConfig).config?.withTimezone ?\n \"TIMESTAMPTZ\"\n : \"TIMESTAMP\";\n }\n case \"PgReal\": {\n return \"REAL\";\n }\n case \"PgDoublePrecision\": {\n return \"DOUBLE PRECISION\";\n }\n case \"PgCustomColumn\": {\n const dataType = (column as unknown as CustomColumnType).getSQLType?.();\n return dataType ?? \"TEXT\";\n }\n default: {\n return \"TEXT\";\n }\n }\n}\n\n/**\n * Formats a default value for PostgreSQL.\n */\nfunction formatPgDefaultValue(value: unknown): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value}'`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n // For other types, use JSON.stringify to avoid [object Object]\n return JSON.stringify(value);\n}\n\n/**\n * Generates CREATE TABLE SQL from a Drizzle PostgreSQL table definition.\n */\nexport function generatePgCreateTableSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string {\n const config = getPgTableConfig(table);\n const columnDefs: string[] = [];\n\n // Generate column definitions\n for (const column of config.columns) {\n const parts: string[] = [`\"${column.name}\"`, getPgColumnType(column)];\n\n if (column.notNull) {\n parts.push(\"NOT NULL\");\n }\n\n if (column.hasDefault && column.default !== undefined) {\n parts.push(`DEFAULT ${formatPgDefaultValue(column.default)}`);\n }\n\n columnDefs.push(parts.join(\" \"));\n }\n\n // Add primary key constraint\n const pk = config.primaryKeys[0];\n if (pk) {\n const pkColumns = pk.columns.map((c) => `\"${c.name}\"`).join(\", \");\n columnDefs.push(`PRIMARY KEY (${pkColumns})`);\n }\n\n columnDefs.push(...renderTableChecks(config.checks, config.name));\n\n return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\n \")}\\n);`;\n}\n\n/**\n * Generates CREATE INDEX SQL statements from a Drizzle PostgreSQL table definition.\n */\nfunction generatePgCreateIndexSQL(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n table: PgTableWithColumns<any>,\n): string[] {\n const config = getPgTableConfig(table);\n const statements: string[] = [];\n\n for (const index of config.indexes) {\n const indexConfig = index.config;\n const columns = indexConfig.columns\n .map((c) => renderIndexColumn(c))\n .join(\", \");\n const unique = indexConfig.unique ? \"UNIQUE \" : \"\";\n const method =\n indexConfig.method && indexConfig.method !== \"btree\" ?\n ` USING ${indexConfig.method}`\n : \"\";\n const where =\n indexConfig.where ?\n ` WHERE ${inlineSqlOrThrow(indexConfig.where, `PostgreSQL index \"${indexConfig.name}\" WHERE clause`)}`\n : \"\";\n\n statements.push(\n `CREATE ${unique}INDEX IF NOT EXISTS \"${indexConfig.name}\" ON \"${config.name}\"${method} (${columns})${where};`,\n );\n }\n\n return statements;\n}\n\n/**\n * Whether a schema-barrel value is a Drizzle Postgres table. See\n * {@link isSqliteTable} for why this uses Drizzle's brand check.\n */\nfunction isPgTable(\n value: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): value is PgTableWithColumns<any> {\n return is(value, PgTable);\n}\n\n/**\n * The authoritative set of tables the PostgreSQL backend owns: every\n * base/status Drizzle table plus the resolved fulltext-strategy\n * contribution(s). Single source of truth for DDL generation, the\n * bootstrap ensure, and drizzle-kit visibility (#129).\n *\n * The typed `tables.fulltext` object is **not** emitted via the\n * column-walker (it can't reproduce `GENERATED ALWAYS AS … STORED`);\n * instead the strategy's canonical DDL is carried as the fulltext\n * contribution's `createDdl`. drizzle-kit visibility for the default\n * tsvector strategy comes from `schema/postgres.ts` exporting that\n * same `tables.fulltext` object through the barrel — one object, not\n * two. (Non-default Postgres strategies must export their own table\n * for drizzle-kit; see `FulltextStrategy.ownedTables`.)\n */\nexport function postgresContributions(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): readonly TableContribution[] {\n const contributions: TableContribution[] = [];\n for (const [key, table] of Object.entries(tables)) {\n if (!isPgTable(table)) continue;\n // The strategy owns the fulltext slot's DDL (the column-walker\n // can't reproduce its generated tsvector column); the strategy\n // declaration below is the authoritative fulltext contribution.\n if (table === tables.fulltext) continue;\n // Stable factory key (`nodes`, `edges`, …) is the logicalName so\n // the #135 materialization identity survives custom table-name\n // overrides; the resolved SQL name is only the physical tableName.\n contributions.push({\n logicalName: key,\n owner: BASE_CONTRIBUTION_OWNER,\n tableName: getPgTableConfig(table).name,\n createDdl: [\n generatePgCreateTableSQL(table),\n ...generatePgCreateIndexSQL(table),\n ],\n runtimeEnsure: false,\n });\n }\n for (const declared of fulltextStrategy.ownedTables(\n tables.fulltextTableName,\n )) {\n contributions.push(declared);\n }\n return contributions;\n}\n\n/**\n * Generates all DDL statements for the given PostgreSQL tables.\n *\n * Iterates the unified contribution set (#129) — base tables first,\n * then strategy-owned tables. Per-contribution ordering is\n * table-then-its-own-indexes; safe because TypeGraph's tables carry no\n * cross-table foreign keys.\n */\nexport function generatePostgresDDL(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): string[] {\n return postgresContributions(tables, fulltextStrategy).flatMap(\n (contribution) => [...contribution.createDdl],\n );\n}\n\n/**\n * Generates a single SQL string for PostgreSQL migrations.\n * Convenience function that joins all DDL statements.\n *\n * Includes CREATE EXTENSION for pgvector since the per-`(kind, field)`\n * embedding tables `pgvectorStrategy` materializes at runtime use the\n * native VECTOR type.\n */\nexport function generatePostgresMigrationSQL(\n tables: PostgresTables = postgresTables,\n fulltextStrategy: FulltextStrategy = tsvectorStrategy,\n): string {\n // pgvector extension is required for the per-field embedding tables\n const extensionSql =\n \"-- Enable pgvector extension for vector similarity search\\nCREATE EXTENSION IF NOT EXISTS vector;\";\n const ddlSql = generatePostgresDDL(tables, fulltextStrategy).join(\"\\n\\n\");\n return `${extensionSql}\\n\\n${ddlSql}`;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/table-names.ts","../src/backend/migrate-recorded-time.ts","../src/backend/repair-validity-windows.ts"],"names":["createSqlSchema","shortHash","ConfigurationError","asCompiledStatementSql","sql","canonicalizeDatabaseTimestamp","RECORDED_MAX_REVISION","asCompiledRowsSql","temporaryTables","createSqliteTables","finalTables","sqliteContributions","createPostgresTables","postgresContributions","asRecordedInstant","ValidationError","createRecordedInstant","requireStatements","runOptionallyInTransaction"],"mappings":"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","file":"chunk-TTCOPKUL.cjs","sourcesContent":["/**\n * The one owner of \"which physical relations does this offline operation\n * touch?\" for the maintenance entrypoints that accept a `tableNames` override.\n */\nimport {\n createSqlSchema,\n type ResolvedSqlTableNames,\n type SqlTableNames,\n} from \"../query/compiler/schema\";\nimport type { GraphBackend } from \"./types\";\n\nfunction definedTableNameOverrides(\n override: Partial<SqlTableNames> | undefined,\n): Partial<SqlTableNames> {\n if (override === undefined) return {};\n return Object.fromEntries(\n Object.entries(override).filter(([, tableName]) => tableName !== undefined),\n );\n}\n\n/**\n * Resolves the relations an offline maintenance call targets.\n *\n * An override is a PATCH over the backend's own names. This matches the\n * `Partial<SqlTableNames>` input contract: naming only `nodes`, for example,\n * must not silently retarget edges and recorded relations to the built-in\n * defaults. `migrateLegacyRecordedTime` and\n * `repairInvertedValidityWindows` share this owner so an offline write can never\n * resolve the same partial override two different ways.\n */\nexport function resolvedTableNames(\n backend: Pick<GraphBackend, \"tableNames\">,\n override: Partial<SqlTableNames> | undefined,\n): ResolvedSqlTableNames {\n return createSqlSchema({\n ...backend.tableNames,\n ...definedTableNameOverrides(override),\n }).tables;\n}\n","/**\n * One-time offline migration from timestamp-only recorded relations to numeric\n * revisions. The durable remap table lets applications translate checkpoints\n * stored outside TypeGraph before deleting the migration metadata.\n */\nimport {\n asRecordedInstant,\n createRecordedInstant,\n RECORDED_MAX_REVISION,\n type RecordedInstant,\n} from \"../core/temporal\";\nimport { ConfigurationError, ValidationError } from \"../errors\";\nimport {\n createSqlSchema,\n type ResolvedSqlTableNames,\n type SqlTableNames,\n} from \"../query/compiler/schema\";\nimport { shortHash } from \"../query/dialect/vector-strategy\";\nimport { sql, type SqlFragment } from \"../query/sql-fragment\";\nimport { asCompiledRowsSql, asCompiledStatementSql } from \"../query/sql-intent\";\nimport { canonicalizeDatabaseTimestamp } from \"../utils/date\";\nimport { postgresContributions, sqliteContributions } from \"./drizzle/ddl\";\nimport { createPostgresTables } from \"./drizzle/schema/postgres\";\nimport { createSqliteTables } from \"./drizzle/schema/sqlite\";\nimport { resolvedTableNames } from \"./table-names\";\nimport { type GraphBackend, type TransactionBackend } from \"./types\";\n\nconst LEGACY_RECORDED_MAX = \"9999-12-31T23:59:59.999Z\";\nconst MIGRATION_SUFFIX = \"legacy_recorded_anchors\";\n\nconst RECORDED_NODE_COLUMNS = [\n \"history_id\",\n \"graph_id\",\n \"kind\",\n \"id\",\n \"props\",\n \"version\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n \"recorded_from\",\n \"recorded_to\",\n \"op\",\n \"schema_version\",\n \"tx_id\",\n \"meta\",\n] as const;\n\nconst RECORDED_EDGE_COLUMNS = [\n \"history_id\",\n \"graph_id\",\n \"id\",\n \"kind\",\n \"from_kind\",\n \"from_id\",\n \"to_kind\",\n \"to_id\",\n \"props\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n \"recorded_from\",\n \"recorded_to\",\n \"op\",\n \"schema_version\",\n \"tx_id\",\n \"meta\",\n] as const;\n\ntype LegacyInstantRow = Readonly<{\n graph_id: unknown;\n recorded_at: unknown;\n}>;\n\ntype MappingRow = Readonly<{\n graphId: string;\n legacyRecordedAt: string;\n recordedAt: string;\n revision: number;\n}>;\n\ntype RemapRow = Readonly<{ recorded_at: unknown; revision: unknown }>;\ntype MappingCountRow = Readonly<{ anchors: unknown; graphs: unknown }>;\ntype MissingMappingRow = Readonly<{ missing: unknown }>;\ntype ColumnRow = Readonly<{ name: unknown }>;\n\nexport type MigrateLegacyRecordedTimeOptions = Readonly<{\n backend: GraphBackend;\n /** Patch selected backend table names; unstated names remain configured. */\n tableNames?: Partial<SqlTableNames> | undefined;\n /** Override the durable legacy-anchor mapping table name. */\n mappingTableName?: string | undefined;\n}>;\n\nexport type MigrateLegacyRecordedTimeResult = Readonly<{\n /** `true` when timestamp columns were rewritten during this call. */\n migrated: boolean;\n /** Number of graphs represented in the legacy commit order. */\n graphs: number;\n /** Number of distinct legacy anchors available for remapping. */\n anchors: number;\n /** Physical table retaining the old-anchor → revision mapping. */\n mappingTableName: string;\n}>;\n\nexport type MigrateRecordedAnchorOptions = Readonly<{\n backend: Pick<GraphBackend, \"dialect\" | \"execute\" | \"tableNames\">;\n graphId: string;\n anchor: string;\n /** Patch selected backend table names; unstated names remain configured. */\n tableNames?: Partial<SqlTableNames> | undefined;\n mappingTableName?: string | undefined;\n}>;\n\nexport type DeleteLegacyRecordedAnchorMapOptions = Readonly<{\n backend: Pick<\n GraphBackend,\n \"dialect\" | \"execute\" | \"executeStatement\" | \"tableNames\" | \"transaction\"\n >;\n graphId: string;\n /** Patch selected backend table names; unstated names remain configured. */\n tableNames?: Partial<SqlTableNames> | undefined;\n mappingTableName?: string | undefined;\n /** Drop the mapping table when this deletion leaves it empty. */\n dropWhenEmpty?: boolean | undefined;\n}>;\n\nfunction shortenedIdentifier(value: string): string {\n if (value.length <= 63) return value;\n return `${value.slice(0, 50)}_${shortHash(value)}`;\n}\n\nfunction mappingTableName(\n tables: ResolvedSqlTableNames,\n override: string | undefined,\n): string {\n const candidate = override ?? `${tables.recordedClock}_${MIGRATION_SUFFIX}`;\n return createSqlSchema({\n recordedClock: shortenedIdentifier(candidate),\n }).tables.recordedClock;\n}\n\nfunction temporaryTableName(tableName: string, role: string): string {\n return shortenedIdentifier(`__tg_${role}_${shortHash(tableName)}`);\n}\n\nfunction requireStatements(\n target: Pick<TransactionBackend, \"dialect\" | \"executeStatement\">,\n): NonNullable<TransactionBackend[\"executeStatement\"]> {\n if (target.executeStatement === undefined) {\n throw new ConfigurationError(\n \"Recorded-time migration requires executeStatement support.\",\n { dialect: target.dialect },\n { suggestion: \"Use a built-in SQLite or PostgreSQL backend.\" },\n );\n }\n return target.executeStatement;\n}\n\nasync function executeStatement(\n target: Pick<TransactionBackend, \"dialect\" | \"executeStatement\">,\n statement: SqlFragment,\n): Promise<void> {\n await requireStatements(target)(asCompiledStatementSql(statement));\n}\n\nasync function executeDdl(\n target: Pick<TransactionBackend, \"dialect\" | \"executeStatement\">,\n ddl: string,\n): Promise<void> {\n await executeStatement(target, sql.raw(ddl));\n}\n\nfunction canonicalLegacyInstant(value: unknown): string {\n const canonical = canonicalizeDatabaseTimestamp(value);\n if (canonical === undefined) {\n throw new ConfigurationError(\n \"Legacy recorded-time relation contained an invalid timestamp.\",\n { value },\n );\n }\n return canonical;\n}\n\nfunction safeRevision(value: unknown): number {\n const revision =\n typeof value === \"bigint\" ? Number(value)\n : typeof value === \"string\" && /^\\d+$/.test(value) ? Number(value)\n : value;\n if (\n typeof revision !== \"number\" ||\n !Number.isSafeInteger(revision) ||\n revision < 1 ||\n revision >= RECORDED_MAX_REVISION\n ) {\n throw new ConfigurationError(\n \"Recorded anchor mapping contained an invalid revision.\",\n { value },\n );\n }\n return revision;\n}\n\nasync function columnNames(\n target: TransactionBackend,\n tableName: string,\n): Promise<ReadonlySet<string>> {\n const rows =\n target.dialect === \"sqlite\" ?\n await target.execute<ColumnRow>(\n asCompiledRowsSql(sql`PRAGMA table_info(${sql.identifier(tableName)})`),\n )\n : await target.execute<ColumnRow>(\n asCompiledRowsSql(sql`\n SELECT column_name AS name\n FROM information_schema.columns\n WHERE table_schema = current_schema()\n AND table_name = ${tableName}\n `),\n );\n return new Set(\n rows.flatMap((row) => (typeof row.name === \"string\" ? [row.name] : [])),\n );\n}\n\nasync function readLegacyInstants(\n target: TransactionBackend,\n tables: ResolvedSqlTableNames,\n): Promise<readonly MappingRow[]> {\n const rows = await target.execute<LegacyInstantRow>(\n asCompiledRowsSql(sql`\n SELECT graph_id, recorded_from AS recorded_at\n FROM ${sql.identifier(tables.recordedNodes)}\n UNION\n SELECT graph_id, recorded_to AS recorded_at\n FROM ${sql.identifier(tables.recordedNodes)}\n WHERE recorded_to <> ${LEGACY_RECORDED_MAX}\n UNION\n SELECT graph_id, recorded_from AS recorded_at\n FROM ${sql.identifier(tables.recordedEdges)}\n UNION\n SELECT graph_id, recorded_to AS recorded_at\n FROM ${sql.identifier(tables.recordedEdges)}\n WHERE recorded_to <> ${LEGACY_RECORDED_MAX}\n UNION\n SELECT graph_id, recorded_at\n FROM ${sql.identifier(tables.recordedClock)}\n `),\n );\n const instants = rows.map((row) => {\n if (typeof row.graph_id !== \"string\") {\n throw new ConfigurationError(\n \"Legacy recorded-time relation contained an invalid graph id.\",\n { graphId: row.graph_id },\n );\n }\n return {\n graphId: row.graph_id,\n recordedAt: canonicalLegacyInstant(row.recorded_at),\n };\n });\n instants.sort((left, right) => {\n if (left.graphId < right.graphId) return -1;\n if (left.graphId > right.graphId) return 1;\n if (left.recordedAt < right.recordedAt) return -1;\n if (left.recordedAt > right.recordedAt) return 1;\n return 0;\n });\n\n const mapping: MappingRow[] = [];\n let graphId: string | undefined;\n let revision = 0;\n let previousInstant: string | undefined;\n for (const instant of instants) {\n if (instant.graphId !== graphId) {\n graphId = instant.graphId;\n revision = 0;\n previousInstant = undefined;\n }\n if (instant.recordedAt === previousInstant) continue;\n revision += 1;\n mapping.push({\n graphId: instant.graphId,\n legacyRecordedAt: instant.recordedAt,\n recordedAt: instant.recordedAt,\n revision,\n });\n previousInstant = instant.recordedAt;\n }\n return mapping;\n}\n\nfunction migrationMapDdl(\n dialect: GraphBackend[\"dialect\"],\n table: string,\n): string {\n const revisionType = dialect === \"postgres\" ? \"BIGINT\" : \"INTEGER\";\n const recordedAtType = dialect === \"postgres\" ? \"TIMESTAMPTZ\" : \"TEXT\";\n return `CREATE TABLE IF NOT EXISTS \"${table}\" (\n graph_id TEXT NOT NULL,\n legacy_recorded_at TEXT NOT NULL,\n revision ${revisionType} NOT NULL,\n recorded_at ${recordedAtType} NOT NULL,\n PRIMARY KEY (graph_id, legacy_recorded_at)\n);`;\n}\n\nasync function writeMappingRows(\n target: TransactionBackend,\n tableName: string,\n rows: readonly MappingRow[],\n): Promise<void> {\n await executeStatement(target, sql`DELETE FROM ${sql.identifier(tableName)}`);\n const rowsPerStatement = Math.max(\n 1,\n Math.floor((target.capabilities.maxBindParameters ?? 900) / 4),\n );\n for (let start = 0; start < rows.length; start += rowsPerStatement) {\n const values = rows\n .slice(start, start + rowsPerStatement)\n .map(\n (row) =>\n sql`(${row.graphId}, ${row.legacyRecordedAt}, ${row.revision}, ${row.recordedAt})`,\n );\n await executeStatement(\n target,\n sql`\n INSERT INTO ${sql.identifier(tableName)}\n (graph_id, legacy_recorded_at, revision, recorded_at)\n VALUES ${sql.join(values, sql`, `)}\n `,\n );\n }\n}\n\nfunction tableDdl(\n dialect: GraphBackend[\"dialect\"],\n tables: ResolvedSqlTableNames,\n temporary: Readonly<{\n recordedClock: string;\n recordedEdges: string;\n recordedNodes: string;\n }>,\n): Readonly<{\n clock: readonly string[];\n edges: readonly string[];\n nodes: readonly string[];\n}> {\n if (dialect === \"sqlite\") {\n const temporaryTables = createSqliteTables(temporary);\n const finalTables = createSqliteTables(tables);\n const temporaryContributions = sqliteContributions(temporaryTables);\n const finalContributions = sqliteContributions(finalTables);\n return ddlForRecordedTables(temporaryContributions, finalContributions);\n }\n const temporaryTables = createPostgresTables(temporary);\n const finalTables = createPostgresTables(tables);\n return ddlForRecordedTables(\n postgresContributions(temporaryTables),\n postgresContributions(finalTables),\n );\n}\n\nfunction ddlForRecordedTables(\n temporary: readonly Readonly<{\n createDdl: readonly string[];\n logicalName: string;\n }>[],\n final: readonly Readonly<{\n createDdl: readonly string[];\n logicalName: string;\n }>[],\n): Readonly<{\n clock: readonly string[];\n edges: readonly string[];\n nodes: readonly string[];\n}> {\n function statements(\n logicalName: \"recordedClock\" | \"recordedEdges\" | \"recordedNodes\",\n ): readonly string[] {\n const temporaryDdl = temporary.find(\n (entry) => entry.logicalName === logicalName,\n )?.createDdl;\n const finalDdl = final.find(\n (entry) => entry.logicalName === logicalName,\n )?.createDdl;\n if (temporaryDdl === undefined || finalDdl === undefined) {\n throw new ConfigurationError(\n `Could not generate migration DDL for ${logicalName}.`,\n );\n }\n const createTable = temporaryDdl[0];\n if (createTable === undefined) {\n throw new ConfigurationError(\n `Could not generate migration table DDL for ${logicalName}.`,\n );\n }\n return [createTable, ...finalDdl.slice(1)];\n }\n return {\n clock: statements(\"recordedClock\"),\n edges: statements(\"recordedEdges\"),\n nodes: statements(\"recordedNodes\"),\n };\n}\n\nfunction migratedColumn(column: string, legacyAlias: string): SqlFragment {\n if (column === \"recorded_from\") return sql`from_map.revision`;\n if (column === \"recorded_to\") {\n return sql`\n CASE\n WHEN ${sql.raw(legacyAlias)}.recorded_to = ${LEGACY_RECORDED_MAX}\n THEN ${RECORDED_MAX_REVISION}\n ELSE to_map.revision\n END\n `;\n }\n return sql`${sql.raw(legacyAlias)}.${sql.identifier(column)}`;\n}\n\nfunction mappingMatch(\n dialect: GraphBackend[\"dialect\"],\n mappingAlias: \"anchor_map\" | \"from_map\" | \"to_map\",\n legacyColumn: \"recorded_at\" | \"recorded_from\" | \"recorded_to\",\n): SqlFragment {\n const mapping = sql.raw(mappingAlias);\n const legacy = sql.raw(`legacy.${legacyColumn}`);\n return dialect === \"postgres\" ?\n sql`${mapping}.recorded_at = ${legacy}`\n : sql`${mapping}.legacy_recorded_at = ${legacy}`;\n}\n\nfunction missingMappingCount(value: unknown, legacyTable: string): number {\n const count = Number(value);\n if (!Number.isSafeInteger(count) || count < 0) {\n throw new ConfigurationError(\n \"Recorded-time migration returned an invalid integrity-check count.\",\n { legacyTable, value },\n );\n }\n return count;\n}\n\nasync function assertRecordedRelationMappings(\n target: TransactionBackend,\n options: Readonly<{ legacyTable: string; mappingTable: string }>,\n): Promise<void> {\n const fromMatch = mappingMatch(target.dialect, \"from_map\", \"recorded_from\");\n const toMatch = mappingMatch(target.dialect, \"to_map\", \"recorded_to\");\n const rows = await target.execute<MissingMappingRow>(\n asCompiledRowsSql(sql`\n SELECT COUNT(*) AS missing\n FROM ${sql.identifier(options.legacyTable)} AS legacy\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS from_map\n ON from_map.graph_id = legacy.graph_id AND ${fromMatch}\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS to_map\n ON to_map.graph_id = legacy.graph_id AND ${toMatch}\n WHERE from_map.revision IS NULL\n OR (\n legacy.recorded_to <> ${LEGACY_RECORDED_MAX}\n AND to_map.revision IS NULL\n )\n `),\n );\n const missing = missingMappingCount(rows[0]?.missing, options.legacyTable);\n if (missing === 0) return;\n throw new ConfigurationError(\n \"Legacy recorded-time boundaries could not be mapped exactly.\",\n { legacyTable: options.legacyTable, missingRows: missing },\n {\n suggestion:\n \"Ensure every legacy boundary is a valid millisecond-precision timestamp produced by the preview recorded clock before retrying the offline migration.\",\n },\n );\n}\n\nasync function assertRecordedClockMappings(\n target: TransactionBackend,\n options: Readonly<{ legacyTable: string; mappingTable: string }>,\n): Promise<void> {\n const match = mappingMatch(target.dialect, \"anchor_map\", \"recorded_at\");\n const rows = await target.execute<MissingMappingRow>(\n asCompiledRowsSql(sql`\n SELECT COUNT(*) AS missing\n FROM ${sql.identifier(options.legacyTable)} AS legacy\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS anchor_map\n ON anchor_map.graph_id = legacy.graph_id AND ${match}\n WHERE anchor_map.revision IS NULL\n `),\n );\n const missing = missingMappingCount(rows[0]?.missing, options.legacyTable);\n if (missing === 0) return;\n throw new ConfigurationError(\n \"Legacy recorded clock values could not be mapped exactly.\",\n { legacyTable: options.legacyTable, missingRows: missing },\n {\n suggestion:\n \"Ensure every legacy clock value is a valid millisecond-precision timestamp produced by the preview recorded clock before retrying the offline migration.\",\n },\n );\n}\n\nasync function copyRecordedRelation(\n target: TransactionBackend,\n options: Readonly<{\n columns: readonly string[];\n legacyTable: string;\n mappingTable: string;\n temporaryTable: string;\n }>,\n): Promise<void> {\n const columnList = options.columns.map((column) => sql.identifier(column));\n const values = options.columns.map((column) =>\n migratedColumn(column, \"legacy\"),\n );\n await assertRecordedRelationMappings(target, options);\n const fromMatch = mappingMatch(target.dialect, \"from_map\", \"recorded_from\");\n const toMatch = mappingMatch(target.dialect, \"to_map\", \"recorded_to\");\n await executeStatement(\n target,\n sql`\n INSERT INTO ${sql.identifier(options.temporaryTable)}\n (${sql.join(columnList, sql`, `)})\n SELECT ${sql.join(values, sql`, `)}\n FROM ${sql.identifier(options.legacyTable)} AS legacy\n -- LEFT JOIN is deliberate: a missing mapping reaches the NOT NULL\n -- revision columns and fails loud instead of silently dropping history.\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS from_map\n ON from_map.graph_id = legacy.graph_id AND ${fromMatch}\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS to_map\n ON to_map.graph_id = legacy.graph_id AND ${toMatch}\n `,\n );\n}\n\nasync function copyRecordedClock(\n target: TransactionBackend,\n options: Readonly<{\n legacyTable: string;\n mappingTable: string;\n temporaryTable: string;\n }>,\n): Promise<void> {\n await assertRecordedClockMappings(target, options);\n const match = mappingMatch(target.dialect, \"anchor_map\", \"recorded_at\");\n await executeStatement(\n target,\n sql`\n INSERT INTO ${sql.identifier(options.temporaryTable)}\n (graph_id, revision, recorded_at)\n SELECT legacy.graph_id, anchor_map.revision, legacy.recorded_at\n FROM ${sql.identifier(options.legacyTable)} AS legacy\n -- Preserve fail-loud behavior if the preflight invariant changes later.\n LEFT JOIN ${sql.identifier(options.mappingTable)} AS anchor_map\n ON anchor_map.graph_id = legacy.graph_id AND ${match}\n `,\n );\n}\n\nasync function replaceLegacyTables(\n target: TransactionBackend,\n tables: ResolvedSqlTableNames,\n mappingTable: string,\n): Promise<void> {\n const temporary = {\n recordedNodes: temporaryTableName(tables.recordedNodes, \"rn\"),\n recordedEdges: temporaryTableName(tables.recordedEdges, \"re\"),\n recordedClock: temporaryTableName(tables.recordedClock, \"rc\"),\n };\n const ddl = tableDdl(target.dialect, tables, temporary);\n for (const table of Object.values(temporary)) {\n await executeStatement(\n target,\n sql`DROP TABLE IF EXISTS ${sql.identifier(table)}`,\n );\n }\n await executeDdl(target, requireCreateTable(ddl.nodes));\n await executeDdl(target, requireCreateTable(ddl.edges));\n await executeDdl(target, requireCreateTable(ddl.clock));\n await copyRecordedRelation(target, {\n columns: RECORDED_NODE_COLUMNS,\n legacyTable: tables.recordedNodes,\n mappingTable,\n temporaryTable: temporary.recordedNodes,\n });\n await copyRecordedRelation(target, {\n columns: RECORDED_EDGE_COLUMNS,\n legacyTable: tables.recordedEdges,\n mappingTable,\n temporaryTable: temporary.recordedEdges,\n });\n await copyRecordedClock(target, {\n legacyTable: tables.recordedClock,\n mappingTable,\n temporaryTable: temporary.recordedClock,\n });\n\n await executeStatement(\n target,\n sql`DROP TABLE ${sql.identifier(tables.recordedNodes)}`,\n );\n await executeStatement(\n target,\n sql`DROP TABLE ${sql.identifier(tables.recordedEdges)}`,\n );\n await executeStatement(\n target,\n sql`DROP TABLE ${sql.identifier(tables.recordedClock)}`,\n );\n await renameTable(target, temporary.recordedNodes, tables.recordedNodes);\n await renameTable(target, temporary.recordedEdges, tables.recordedEdges);\n await renameTable(target, temporary.recordedClock, tables.recordedClock);\n await renamePrimaryKeyConstraint(\n target,\n temporary.recordedNodes,\n tables.recordedNodes,\n );\n await renamePrimaryKeyConstraint(\n target,\n temporary.recordedEdges,\n tables.recordedEdges,\n );\n await renamePrimaryKeyConstraint(\n target,\n temporary.recordedClock,\n tables.recordedClock,\n );\n for (const statement of [\n ...ddl.nodes.slice(1),\n ...ddl.edges.slice(1),\n ...ddl.clock.slice(1),\n ]) {\n await executeDdl(target, statement);\n }\n}\n\nasync function renamePrimaryKeyConstraint(\n target: TransactionBackend,\n temporaryTable: string,\n finalTable: string,\n): Promise<void> {\n if (target.dialect !== \"postgres\") return;\n await executeStatement(\n target,\n sql`\n ALTER TABLE ${sql.identifier(finalTable)}\n RENAME CONSTRAINT ${sql.identifier(`${temporaryTable}_pkey`)}\n TO ${sql.identifier(shortenedIdentifier(`${finalTable}_pkey`))}\n `,\n );\n}\n\nfunction requireCreateTable(statements: readonly string[]): string {\n const statement = statements[0];\n if (statement === undefined) {\n throw new ConfigurationError(\"Recorded migration table DDL was empty.\");\n }\n return statement;\n}\n\nasync function renameTable(\n target: TransactionBackend,\n from: string,\n to: string,\n): Promise<void> {\n try {\n await executeStatement(\n target,\n sql`ALTER TABLE ${sql.identifier(from)} RENAME TO ${sql.identifier(to)}`,\n );\n } catch (error) {\n throw new ConfigurationError(\n \"Could not rename a migrated recorded-time table.\",\n { from, to },\n { cause: error },\n );\n }\n}\n\n/**\n * Rewrites timestamp-only recorded relations to numeric revisions.\n *\n * Run offline before opening a Store with the new schema. The durable mapping\n * table is retained so external checkpoint stores can call\n * {@link migrateRecordedAnchor}; delete each graph's rows after its downstream\n * checkpoints have been rewritten.\n */\nexport async function migrateLegacyRecordedTime(\n options: MigrateLegacyRecordedTimeOptions,\n): Promise<MigrateLegacyRecordedTimeResult> {\n const tables = resolvedTableNames(options.backend, options.tableNames);\n const mapTable = mappingTableName(tables, options.mappingTableName);\n return options.backend.transaction(async (target) => {\n const clockColumns = await columnNames(target, tables.recordedClock);\n if (clockColumns.size === 0) {\n return {\n migrated: false,\n graphs: 0,\n anchors: 0,\n mappingTableName: mapTable,\n };\n }\n if (clockColumns.has(\"revision\")) {\n const mapColumns = await columnNames(target, mapTable);\n if (mapColumns.size === 0) {\n return {\n migrated: false,\n graphs: 0,\n anchors: 0,\n mappingTableName: mapTable,\n };\n }\n const rows = await target.execute<MappingCountRow>(\n asCompiledRowsSql(sql`\n SELECT COUNT(*) AS anchors, COUNT(DISTINCT graph_id) AS graphs\n FROM ${sql.identifier(mapTable)}\n `),\n );\n const anchors = Number(rows[0]?.anchors ?? 0);\n const graphs = Number(rows[0]?.graphs ?? 0);\n return {\n migrated: false,\n graphs: Number.isSafeInteger(graphs) ? graphs : 0,\n anchors: Number.isSafeInteger(anchors) ? anchors : 0,\n mappingTableName: mapTable,\n };\n }\n const nodeColumns = await columnNames(target, tables.recordedNodes);\n const edgeColumns = await columnNames(target, tables.recordedEdges);\n if (\n !nodeColumns.has(\"recorded_from\") ||\n !edgeColumns.has(\"recorded_from\")\n ) {\n throw new ConfigurationError(\n \"Legacy recorded-time schema is incomplete.\",\n { tables },\n );\n }\n\n await executeDdl(target, migrationMapDdl(target.dialect, mapTable));\n const mapping = await readLegacyInstants(target, tables);\n await writeMappingRows(target, mapTable, mapping);\n await replaceLegacyTables(target, tables, mapTable);\n return {\n migrated: true,\n graphs: new Set(mapping.map((row) => row.graphId)).size,\n anchors: mapping.length,\n mappingTableName: mapTable,\n };\n });\n}\n\n/** Remaps one timestamp-only checkpoint after {@link migrateLegacyRecordedTime}. */\nexport async function migrateRecordedAnchor(\n options: MigrateRecordedAnchorOptions,\n): Promise<RecordedInstant> {\n try {\n return asRecordedInstant(options.anchor);\n } catch (error) {\n if (!(error instanceof ValidationError)) throw error;\n }\n const legacyRecordedAt = canonicalLegacyInstant(options.anchor);\n const tables = resolvedTableNames(options.backend, options.tableNames);\n const mapTable = mappingTableName(tables, options.mappingTableName);\n const rows = await options.backend.execute<RemapRow>(\n asCompiledRowsSql(sql`\n SELECT revision, recorded_at\n FROM ${sql.identifier(mapTable)}\n WHERE graph_id = ${options.graphId}\n AND legacy_recorded_at = ${legacyRecordedAt}\n `),\n );\n const row = rows[0];\n if (row === undefined) {\n throw new ConfigurationError(\n \"No migrated recorded anchor matches this graph and legacy timestamp.\",\n { anchor: options.anchor, graphId: options.graphId },\n {\n suggestion:\n \"Run migrateLegacyRecordedTime() before deleting its mapping rows, and pass the graph that produced the checkpoint.\",\n },\n );\n }\n return createRecordedInstant(\n safeRevision(row.revision),\n canonicalLegacyInstant(row.recorded_at),\n );\n}\n\n/**\n * Deletes one graph's legacy remap rows after downstream checkpoints migrate.\n * Set `dropWhenEmpty` to remove the migration table after the final graph.\n */\nexport async function deleteLegacyRecordedAnchorMap(\n options: DeleteLegacyRecordedAnchorMapOptions,\n): Promise<void> {\n if (options.backend.executeStatement === undefined) {\n throw new ConfigurationError(\n \"Deleting a recorded anchor migration map requires executeStatement support.\",\n { dialect: options.backend.dialect },\n );\n }\n const tables = resolvedTableNames(options.backend, options.tableNames);\n const mapTable = mappingTableName(tables, options.mappingTableName);\n await options.backend.transaction(async (target) => {\n await executeStatement(\n target,\n sql`\n DELETE FROM ${sql.identifier(mapTable)}\n WHERE graph_id = ${options.graphId}\n `,\n );\n if (options.dropWhenEmpty !== true) return;\n const rows = await target.execute<MappingCountRow>(\n asCompiledRowsSql(sql`\n SELECT COUNT(*) AS anchors, COUNT(DISTINCT graph_id) AS graphs\n FROM ${sql.identifier(mapTable)}\n `),\n );\n const remaining = missingMappingCount(rows[0]?.anchors, mapTable);\n if (remaining === 0) {\n await executeStatement(\n target,\n sql`DROP TABLE ${sql.identifier(mapTable)}`,\n );\n }\n });\n}\n","/**\n * Offline repair for validity windows that older library versions stored\n * inverted (`valid_from > valid_to`).\n *\n * Such a row is readable at no coordinate at all: `asOf(t)` needs\n * `valid_from <= t < valid_to`, and no `t` satisfies both when the bounds are\n * backwards. The library no longer mints them — a write that stamps a lower\n * bound the caller did not state stores no bound rather than an inverting one —\n * but deploying that fix rewrites nothing, so rows written by an older version\n * (or by direct SQL) stay invisible until an operator repairs them.\n *\n * The repair normalizes those rows to \"ended at T, start unknown\"\n * (`valid_from = NULL`), which is the shape the current write paths store. It\n * deliberately does **not** bump `version`, touch `updated_at`, or mint a\n * recorded revision: it normalizes a storage convention for rows that were\n * never observable at any coordinate, so it is not a logical write — and\n * minting a revision would make the pre-repair recorded state re-materialize\n * the inverted shape at `asOfRecorded` coordinates.\n *\n * Operator consequences, all of them stated in the docs as well:\n *\n * 1. **Run `\"apply\"` with writers stopped.** A concurrent window-bearing update\n * may fence its write on the validity lower bound it read, so a repair that\n * lands in between can make the peer's first `UPDATE` match no row. Store\n * node/edge updates re-read and re-judge against the repaired bound; an\n * interchange update records a per-row target-changed error instead of\n * claiming the row was written. `\"report\"` needs no quiescing — it scans in\n * a read-only transaction, so it cannot write.\n * 2. **Repaired rows become visible** at `asOf` coordinates before their end.\n * That is the point, and it is a read-visibility change to historical\n * queries.\n * 3. **Outstanding `base@V` merge tokens are invalidated** for repaired rows —\n * `valid_from` is part of the base content fingerprint. Quiesce merges,\n * repair, then re-baseline branches.\n * 4. **Prefer `relations: \"live-and-recorded\"`.** Repairing only the live axis\n * leaves the recorded twin carrying the inverted window, which\n * re-materializes the invisible row at any `asOfRecorded` coordinate.\n */\nimport { ConfigurationError } from \"../errors\";\nimport type {\n ResolvedSqlTableNames,\n SqlTableNames,\n} from \"../query/compiler/schema\";\nimport { sql, type SqlFragment } from \"../query/sql-fragment\";\nimport { asCompiledRowsSql, asCompiledStatementSql } from \"../query/sql-intent\";\nimport { resolvedTableNames } from \"./table-names\";\nimport {\n type GraphBackend,\n runOptionallyInTransaction,\n type RunOptionallyInTransactionOptions,\n type TransactionBackend,\n} from \"./types\";\n\n/** A relation whose rows carry a validity window this repair can normalize. */\nexport type RepairRelation =\n \"nodes\" | \"edges\" | \"recordedNodes\" | \"recordedEdges\";\n\n/**\n * Which relations one call scans.\n *\n * `\"live-and-recorded\"` is the recommended scope. `\"live\"` is correct in\n * exactly two cases: the store captures no history and the `recorded_*` tables\n * do not exist, or the operator is deliberately preserving the recorded axis as\n * an audit record of what was stored before the repair — and accepts that\n * historical `asOfRecorded` reads keep returning the invisible shape.\n */\nexport type RepairRelationScope = \"live\" | \"live-and-recorded\";\n\n/** Inputs for detecting or repairing legacy inverted validity windows. */\nexport type RepairInvertedWindowsOptions = Readonly<{\n backend: GraphBackend;\n /** Omit to sweep every graph in the database. */\n graphId?: string | undefined;\n /** Required: the scope is a decision, not a default. */\n relations: RepairRelationScope;\n /**\n * `\"report\"` counts and writes nothing; `\"apply\"` counts and then normalizes\n * the rows it counted.\n */\n mode: \"report\" | \"apply\";\n /**\n * Patch selected backend table names, exactly as migrate-recorded-time does.\n * Unstated names continue to come from `backend.tableNames`; see\n * {@link resolvedTableNames}.\n */\n tableNames?: Partial<SqlTableNames> | undefined;\n}>;\n\n/** Counts and execution guarantees observed by one repair/report call. */\nexport type RepairInvertedWindowsReport = Readonly<{\n /** Echoes the scope actually scanned — a count of 0 and \"not scanned\" are different facts. */\n relations: RepairRelationScope;\n /**\n * Rows whose stored window is inverted: found in `\"report\"` mode, repaired in\n * `\"apply\"` mode. `undefined` means NOT SCANNED, never \"clean\".\n */\n counts: Readonly<Record<RepairRelation, number | undefined>>;\n /**\n * Rows whose stored bounds are not canonical ISO and were therefore not\n * classified. SQLite only in substance: on PostgreSQL the columns are\n * `timestamptz`, so a scanned relation always reports `0` (never `undefined`\n * — that value is reserved for \"not scanned\", on both dialects).\n *\n * `\"apply\"` refuses while any scanned relation reports a non-zero count:\n * classifying those rows needs a timestamp semantics this repair does not\n * own, and skipping them silently would be an accepted option ignored.\n */\n nonCanonical: Readonly<Record<RepairRelation, number | undefined>>;\n /**\n * Whether every statement of this call ran in ONE transaction. `false` on a\n * backend that reports `capabilities.transactions === false`, where the call\n * degrades to per-relation statements.\n *\n * Reported by the seam, not inferred from backend object identity:\n * {@link runOptionallyInTransaction} explicitly tells its callback whether it\n * opened a transaction. \"One snapshot\" and \"four snapshots\" are different\n * facts about a report, and the report must state which occurred even when a\n * custom backend passes the same object into its transaction callback.\n *\n * When `false`, a `\"report\"`'s counts may come from different snapshots and a\n * crash mid-`\"apply\"` can leave the live axis repaired and the recorded axis\n * not. Both are survivable the same way: each relation's statement is\n * idempotent and convergent, so a re-run finishes the job and a later\n * `\"report\"` proves it.\n */\n atomic: boolean;\n}>;\n\nconst LIVE_RELATIONS = [\n \"nodes\",\n \"edges\",\n] as const satisfies readonly RepairRelation[];\n\nconst RECORDED_RELATIONS = [\n \"recordedNodes\",\n \"recordedEdges\",\n] as const satisfies readonly RepairRelation[];\n\n/**\n * Canonical fixed-width UTC ISO 8601, as a SQLite `GLOB` pattern.\n *\n * SQLite stores the bounds as `TEXT` and compares them lexicographically, which\n * equals chronological order only for canonical values. This repair exists to\n * clean up rows written by older paths and by direct SQL, so it cannot assume\n * canonicality — it establishes it per row instead.\n */\nconst CANONICAL_INSTANT_GLOB =\n \"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]Z\";\n\ntype RepairTarget = GraphBackend | TransactionBackend;\n\ntype CountRow = Readonly<{ matches: unknown }>;\n\nfunction scopedRelations(\n scope: RepairRelationScope,\n): readonly RepairRelation[] {\n return scope === \"live\" ? LIVE_RELATIONS : (\n [...LIVE_RELATIONS, ...RECORDED_RELATIONS]\n );\n}\n\nfunction relationTable(\n tables: ResolvedSqlTableNames,\n relation: RepairRelation,\n): string {\n switch (relation) {\n case \"nodes\": {\n return tables.nodes;\n }\n case \"edges\": {\n return tables.edges;\n }\n case \"recordedNodes\": {\n return tables.recordedNodes;\n }\n case \"recordedEdges\": {\n return tables.recordedEdges;\n }\n }\n}\n\nfunction graphScopeClauses(\n graphId: string | undefined,\n): readonly SqlFragment[] {\n return graphId === undefined ? [] : [sql`graph_id = ${graphId}`];\n}\n\nfunction canonicalBoundsClauses(\n dialect: GraphBackend[\"dialect\"],\n): readonly SqlFragment[] {\n if (dialect !== \"sqlite\") return [];\n return [\n sql`valid_from GLOB ${CANONICAL_INSTANT_GLOB}`,\n sql`valid_to GLOB ${CANONICAL_INSTANT_GLOB}`,\n ];\n}\n\n/**\n * The one spelling of \"this stored window is inverted\".\n *\n * Both modes compile it: `\"report\"` into `SELECT COUNT(*) … WHERE <this>` and\n * `\"apply\"` into `UPDATE … SET valid_from = NULL WHERE <this>`, so the count\n * and the repair cannot disagree about which rows are in scope.\n *\n * The comparison is strict (`>`). A stored zero-width window is a legal shape a\n * caller may have stated in full, and this repair does not second-guess it.\n */\nexport function invertedValidityWindowPredicate(\n options: Readonly<{\n dialect: GraphBackend[\"dialect\"];\n graphId?: string | undefined;\n }>,\n): SqlFragment {\n return sql.join(\n [\n sql`valid_from IS NOT NULL`,\n sql`valid_to IS NOT NULL`,\n ...canonicalBoundsClauses(options.dialect),\n sql`valid_from > valid_to`,\n ...graphScopeClauses(options.graphId),\n ],\n sql` AND `,\n );\n}\n\n/**\n * Rows carrying both bounds where either one is not canonical, and which the\n * inverted predicate therefore refuses to classify. SQLite only: PostgreSQL\n * stores `timestamptz`, where every stored value compares chronologically.\n */\nfunction nonCanonicalWindowPredicate(graphId: string | undefined): SqlFragment {\n return sql.join(\n [\n sql`valid_from IS NOT NULL`,\n sql`valid_to IS NOT NULL`,\n sql`(valid_from NOT GLOB ${CANONICAL_INSTANT_GLOB} OR valid_to NOT GLOB ${CANONICAL_INSTANT_GLOB})`,\n ...graphScopeClauses(graphId),\n ],\n sql` AND `,\n );\n}\n\nfunction safeCount(value: unknown, table: string): number {\n const count = Number(value);\n if (!Number.isSafeInteger(count) || count < 0) {\n throw new ConfigurationError(\n \"Validity-window repair returned an invalid row count.\",\n { table, value },\n );\n }\n return count;\n}\n\nasync function countMatching(\n target: RepairTarget,\n table: string,\n predicate: SqlFragment,\n): Promise<number> {\n const rows = await target.execute<CountRow>(\n asCompiledRowsSql(sql`\n SELECT COUNT(*) AS matches\n FROM ${sql.identifier(table)}\n WHERE ${predicate}\n `),\n );\n return safeCount(rows[0]?.matches, table);\n}\n\n/**\n * `\"apply\"` writes, so it needs the optional non-row-returning statement path.\n * `\"report\"` deliberately does not: `execute` is a required member, so\n * detection stays available on every backend even where repair is not.\n */\nfunction requireStatements(\n target: Pick<RepairTarget, \"dialect\" | \"executeStatement\">,\n): NonNullable<RepairTarget[\"executeStatement\"]> {\n if (target.executeStatement === undefined) {\n throw new ConfigurationError(\n \"Repairing inverted validity windows requires executeStatement support.\",\n { dialect: target.dialect, mode: \"apply\" },\n {\n suggestion:\n 'Use a built-in SQLite or PostgreSQL backend to apply the repair. Detection needs no such support: call this with mode: \"report\" to count the affected rows on any backend.',\n },\n );\n }\n return target.executeStatement;\n}\n\n/**\n * Translates the recorded-capture wrapper's refusal instead of swallowing it.\n *\n * A history-enabled store replaces `executeStatement` with a rejecting stub, so\n * `\"apply\"` against that backend fails with a message about raw SQL rather than\n * about this repair. The remedy is specific enough to be worth naming: hand the\n * repair the raw backend the history store was constructed from. Bypassing\n * capture is the intended behavior here, not a workaround — the repair mints no\n * revision by design.\n */\nfunction translatedCaptureRefusal(error: unknown): unknown {\n if (\n !(error instanceof ConfigurationError) ||\n error.details[\"code\"] !== \"RECORDED_CAPTURE_RAW_SQL_DISABLED\"\n ) {\n return error;\n }\n return new ConfigurationError(\n \"Repairing inverted validity windows cannot run against a history-capturing backend.\",\n { code: \"RECORDED_CAPTURE_RAW_SQL_DISABLED\", mode: \"apply\" },\n {\n cause: error,\n suggestion:\n 'Pass the raw backend you constructed the history store from. The repair deliberately mints no revision — it normalizes storage for rows that were never visible at any coordinate — so bypassing recorded-time capture is the intended behavior, not a workaround. mode: \"report\" needs no such care: it runs against the capture-wrapped backend.',\n },\n );\n}\n\nasync function repairRelation(\n target: RepairTarget,\n table: string,\n predicate: SqlFragment,\n): Promise<void> {\n try {\n await requireStatements(target)(\n asCompiledStatementSql(sql`\n UPDATE ${sql.identifier(table)}\n SET valid_from = NULL\n WHERE ${predicate}\n `),\n );\n } catch (error) {\n throw translatedCaptureRefusal(error);\n }\n}\n\nfunction assertClassifiableBounds(\n nonCanonical: ReadonlyMap<RepairRelation, number>,\n): void {\n const unclassified = [...nonCanonical].filter(([, count]) => count > 0);\n if (unclassified.length === 0) return;\n throw new ConfigurationError(\n \"Refusing to repair validity windows: some scanned rows store non-canonical bounds.\",\n { nonCanonical: Object.fromEntries(unclassified) },\n {\n suggestion:\n 'Normalize those bounds to canonical UTC ISO 8601 (YYYY-MM-DDTHH:MM:SS.mmmZ) and re-run, or narrow the call with graphId. Classifying them here would need a timestamp semantics this repair does not own, and skipping them silently would report a repair it did not make. mode: \"report\" still counts them.',\n },\n );\n}\n\n/**\n * Declares `\"report\"`'s read-only-ness to the ENGINE rather than only to the\n * reader of this file.\n *\n * The docs send an operator to diagnose against the live store's backend and\n * require quiescing only for `\"apply\"`, so the scan must not behave like a\n * writer: on SQLite a default transaction is `BEGIN IMMEDIATE`, which reserves\n * the single writer slot for the duration of up to four full-table `COUNT(*)`\n * scans and can fail `SQLITE_BUSY` against an active writer; `read_only` issues\n * a plain `BEGIN` instead. On PostgreSQL it issues `BEGIN … READ ONLY`, which\n * makes \"report writes nothing\" enforced by the engine and not merely asserted\n * by a test.\n *\n * `\"apply\"` writes, so it takes the default read-write transaction.\n */\nfunction transactionOptionsFor(\n mode: RepairInvertedWindowsOptions[\"mode\"],\n): RunOptionallyInTransactionOptions | undefined {\n return mode === \"report\" ?\n { transaction: { accessMode: \"read_only\" } }\n : undefined;\n}\n\nfunction relationRecord(\n counts: ReadonlyMap<RepairRelation, number>,\n): Readonly<Record<RepairRelation, number | undefined>> {\n return {\n nodes: counts.get(\"nodes\"),\n edges: counts.get(\"edges\"),\n recordedNodes: counts.get(\"recordedNodes\"),\n recordedEdges: counts.get(\"recordedEdges\"),\n };\n}\n\n/**\n * Counts — and, in `\"apply\"` mode, normalizes — rows whose stored validity\n * window is inverted.\n *\n * ```typescript\n * // Diagnose with the store's backend: `report` reads only, so it runs\n * // anywhere, including a capture-wrapped or statement-less backend.\n * const report = await repairInvertedValidityWindows({\n * backend: anyBackend,\n * relations: \"live-and-recorded\",\n * mode: \"report\",\n * });\n *\n * // Repair with the raw one, while writers are stopped.\n * await repairInvertedValidityWindows({\n * backend: rawBackend,\n * relations: \"live-and-recorded\",\n * mode: \"apply\",\n * });\n * ```\n *\n * Idempotent and convergent: a second `\"apply\"` reports zero, because the rows\n * the first one repaired no longer match the predicate.\n *\n * No batching, deliberately. Unlike the recorded-time migration, which rewrites\n * every row, this statement touches only rows the library mis-stored — an empty\n * set on a healthy graph. A deployment that reports a count large enough to\n * worry about should run it per `graphId`.\n *\n * @throws ConfigurationError in `\"apply\"` mode when the backend cannot execute\n * statements, when the backend is a recorded-capture wrapper, or when any\n * scanned relation stores non-canonical bounds.\n */\nexport async function repairInvertedValidityWindows(\n options: RepairInvertedWindowsOptions,\n): Promise<RepairInvertedWindowsReport> {\n const tables = resolvedTableNames(options.backend, options.tableNames);\n const relations = scopedRelations(options.relations);\n // Refuse before opening a transaction: a backend with no statement path can\n // never apply, whatever the scan finds.\n if (options.mode === \"apply\") requireStatements(options.backend);\n\n return runOptionallyInTransaction(\n options.backend,\n async (target, execution) => {\n const predicate = invertedValidityWindowPredicate({\n dialect: target.dialect,\n graphId: options.graphId,\n });\n const inverted = new Map<RepairRelation, number>();\n const nonCanonical = new Map<RepairRelation, number>();\n for (const relation of relations) {\n const table = relationTable(tables, relation);\n nonCanonical.set(\n relation,\n target.dialect === \"sqlite\" ?\n await countMatching(\n target,\n table,\n nonCanonicalWindowPredicate(options.graphId),\n )\n : 0,\n );\n inverted.set(relation, await countMatching(target, table, predicate));\n }\n\n if (options.mode === \"apply\") {\n assertClassifiableBounds(nonCanonical);\n for (const relation of relations) {\n await repairRelation(\n target,\n relationTable(tables, relation),\n predicate,\n );\n }\n }\n\n return {\n relations: options.relations,\n counts: relationRecord(inverted),\n nonCanonical: relationRecord(nonCanonical),\n atomic: execution.atomic,\n };\n },\n transactionOptionsFor(options.mode),\n );\n}\n"]}
|