@nicia-ai/typegraph 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/drizzle/indexes.cjs +11 -11
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/drizzle/indexes.js +7 -7
- package/dist/backend/index.cjs +53 -54
- package/dist/backend/index.d.cts +3 -3
- package/dist/backend/index.d.ts +3 -3
- package/dist/backend/index.js +13 -14
- package/dist/backend/postgres/index.cjs +29 -30
- package/dist/backend/postgres/index.d.cts +7 -7
- package/dist/backend/postgres/index.d.ts +7 -7
- package/dist/backend/postgres/index.js +16 -17
- package/dist/backend/postgres/pglite-store.cjs +48 -43
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +15 -9
- package/dist/backend/postgres/pglite-store.d.ts +15 -9
- package/dist/backend/postgres/pglite-store.js +44 -39
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +18 -19
- package/dist/backend/postgres/pglite.d.cts +4 -4
- package/dist/backend/postgres/pglite.d.ts +4 -4
- package/dist/backend/postgres/pglite.js +17 -18
- package/dist/backend/sqlite/index.cjs +26 -27
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +14 -15
- package/dist/backend/sqlite/libsql.cjs +21 -22
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +15 -8
- package/dist/backend/sqlite/libsql.d.ts +15 -8
- package/dist/backend/sqlite/libsql.js +17 -18
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +49 -44
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +15 -10
- package/dist/backend/sqlite/local-store.d.ts +15 -10
- package/dist/backend/sqlite/local-store.js +45 -40
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +19 -20
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +17 -18
- package/dist/{chunk-XMYJY7NI.js → chunk-2LG2XB2M.js} +3 -3
- package/dist/{chunk-XMYJY7NI.js.map → chunk-2LG2XB2M.js.map} +1 -1
- package/dist/{chunk-QGKILWGZ.cjs → chunk-2NA5DYLO.cjs} +4 -4
- package/dist/{chunk-QGKILWGZ.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
- package/dist/{chunk-5MUSU4ZP.cjs → chunk-3DHZCOT7.cjs} +20 -20
- package/dist/chunk-3DHZCOT7.cjs.map +1 -0
- package/dist/{chunk-OVUUTCPJ.cjs → chunk-4UGOKMI5.cjs} +268 -150
- package/dist/chunk-4UGOKMI5.cjs.map +1 -0
- package/dist/{chunk-FRHHDHKH.js → chunk-5262ZMTR.js} +26 -5
- package/dist/chunk-5262ZMTR.js.map +1 -0
- package/dist/{chunk-HOIFFY4M.js → chunk-5763DULU.js} +248 -76
- package/dist/chunk-5763DULU.js.map +1 -0
- package/dist/{chunk-7G32LIQM.js → chunk-5UVRGXD3.js} +277 -7
- package/dist/chunk-5UVRGXD3.js.map +1 -0
- package/dist/{chunk-IIT5K7SK.cjs → chunk-62ZP23AW.cjs} +15 -15
- package/dist/{chunk-IIT5K7SK.cjs.map → chunk-62ZP23AW.cjs.map} +1 -1
- package/dist/{chunk-S4KQ5LV4.js → chunk-775A4ZMN.js} +40 -6
- package/dist/chunk-775A4ZMN.js.map +1 -0
- package/dist/{chunk-QYWINYEA.cjs → chunk-7BQXPCGN.cjs} +830 -170
- package/dist/chunk-7BQXPCGN.cjs.map +1 -0
- package/dist/{chunk-FJMPR3OH.cjs → chunk-7EO3TCQB.cjs} +33 -7
- package/dist/chunk-7EO3TCQB.cjs.map +1 -0
- package/dist/chunk-7GT72YHH.cjs +1979 -0
- package/dist/chunk-7GT72YHH.cjs.map +1 -0
- package/dist/{chunk-SQRD2CYF.js → chunk-7VQXLT5O.js} +717 -76
- package/dist/chunk-7VQXLT5O.js.map +1 -0
- package/dist/{chunk-BCP7LLOY.js → chunk-7Z5OR7KO.js} +2706 -625
- package/dist/chunk-7Z5OR7KO.js.map +1 -0
- package/dist/chunk-A4OC4DVN.cjs +12 -0
- package/dist/{chunk-4SZ6XPTG.cjs.map → chunk-A4OC4DVN.cjs.map} +1 -1
- package/dist/{chunk-TDXIBCGY.cjs → chunk-A7J2YDDI.cjs} +5 -3
- package/dist/chunk-A7J2YDDI.cjs.map +1 -0
- package/dist/{chunk-FMMIX6N4.js → chunk-AKLS3BYZ.js} +56 -5
- package/dist/chunk-AKLS3BYZ.js.map +1 -0
- package/dist/{chunk-D7PG5D5K.js → chunk-AMKPPFUO.js} +32 -6
- package/dist/chunk-AMKPPFUO.js.map +1 -0
- package/dist/{chunk-PAW2XUZN.js → chunk-ASTI57H3.js} +3 -3
- package/dist/{chunk-PAW2XUZN.js.map → chunk-ASTI57H3.js.map} +1 -1
- package/dist/{chunk-FMGEZBAQ.js → chunk-BKCUOV7A.js} +27 -5
- package/dist/chunk-BKCUOV7A.js.map +1 -0
- package/dist/chunk-BSFJMMV3.cjs +268 -0
- package/dist/chunk-BSFJMMV3.cjs.map +1 -0
- package/dist/{chunk-63KCKSSH.js → chunk-C23WSN5E.js} +209 -24
- package/dist/chunk-C23WSN5E.js.map +1 -0
- package/dist/{chunk-JRP3VGHS.js → chunk-CBTIUB76.js} +3 -3
- package/dist/{chunk-JRP3VGHS.js.map → chunk-CBTIUB76.js.map} +1 -1
- package/dist/chunk-CNV4TXJG.js +58 -0
- package/dist/chunk-CNV4TXJG.js.map +1 -0
- package/dist/{chunk-QB6VMOJ2.cjs → chunk-CXBHOOIQ.cjs} +45 -10
- package/dist/chunk-CXBHOOIQ.cjs.map +1 -0
- package/dist/{chunk-46GDII45.js → chunk-DCQVHAYQ.js} +5 -5
- package/dist/{chunk-46GDII45.js.map → chunk-DCQVHAYQ.js.map} +1 -1
- package/dist/chunk-DLNROMQ7.js +306 -0
- package/dist/chunk-DLNROMQ7.js.map +1 -0
- package/dist/chunk-DYATYRY4.js +47 -0
- package/dist/chunk-DYATYRY4.js.map +1 -0
- package/dist/chunk-E4WNQBEF.cjs +217 -0
- package/dist/chunk-E4WNQBEF.cjs.map +1 -0
- package/dist/{chunk-G6Q5UM7U.js → chunk-FWJKWH6U.js} +5 -3
- package/dist/chunk-FWJKWH6U.js.map +1 -0
- package/dist/{chunk-BNUFUFAU.js → chunk-HFHTMECK.js} +7 -7
- package/dist/chunk-HFHTMECK.js.map +1 -0
- package/dist/{chunk-TFMVL4QH.js → chunk-I5MOXA4H.js} +20 -14
- package/dist/chunk-I5MOXA4H.js.map +1 -0
- package/dist/{chunk-4MB3AQAQ.js → chunk-J3WZ3FA2.js} +77 -3
- package/dist/chunk-J3WZ3FA2.js.map +1 -0
- package/dist/{chunk-UR7W5YQK.js → chunk-JBQQ7THH.js} +5 -3
- package/dist/chunk-JBQQ7THH.js.map +1 -0
- package/dist/chunk-JIVMTW7W.js +3393 -0
- package/dist/chunk-JIVMTW7W.js.map +1 -0
- package/dist/{chunk-2Y4IFKW7.js → chunk-JXA2ZP2Q.js} +6 -17
- package/dist/chunk-JXA2ZP2Q.js.map +1 -0
- package/dist/{chunk-GYA4JRP5.js → chunk-JXXDZTMN.js} +2 -2
- package/dist/chunk-JXXDZTMN.js.map +1 -0
- package/dist/chunk-JZUR7ZWE.js +254 -0
- package/dist/chunk-JZUR7ZWE.js.map +1 -0
- package/dist/chunk-K5ELX2GT.js +248 -0
- package/dist/chunk-K5ELX2GT.js.map +1 -0
- package/dist/chunk-LBJKZXDE.cjs +257 -0
- package/dist/chunk-LBJKZXDE.cjs.map +1 -0
- package/dist/{chunk-FGO5JFVJ.cjs → chunk-M4BDU5RX.cjs} +12 -12
- package/dist/{chunk-FGO5JFVJ.cjs.map → chunk-M4BDU5RX.cjs.map} +1 -1
- package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
- package/dist/chunk-MSY7FSX4.js.map +1 -0
- package/dist/{chunk-ST3LPB2V.cjs → chunk-MUK4BU7K.cjs} +788 -146
- package/dist/chunk-MUK4BU7K.cjs.map +1 -0
- package/dist/{chunk-MCHP7RHZ.cjs → chunk-MXJDTH5B.cjs} +64 -41
- package/dist/chunk-MXJDTH5B.cjs.map +1 -0
- package/dist/{chunk-2VLBGQBY.cjs → chunk-N3257XE6.cjs} +724 -577
- package/dist/chunk-N3257XE6.cjs.map +1 -0
- package/dist/chunk-N66HCGCY.cjs +57 -0
- package/dist/chunk-N66HCGCY.cjs.map +1 -0
- package/dist/{chunk-CPEL3YIR.cjs → chunk-NFCVHQ5P.cjs} +55 -22
- package/dist/chunk-NFCVHQ5P.cjs.map +1 -0
- package/dist/{chunk-C4F7VJ5D.cjs → chunk-NI72YOJB.cjs} +84 -2
- package/dist/chunk-NI72YOJB.cjs.map +1 -0
- package/dist/{chunk-EE7N5XXQ.cjs → chunk-NK5Q7UNE.cjs} +10 -21
- package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
- package/dist/{chunk-PHXITZE4.js → chunk-NMWDXFPH.js} +4 -4
- package/dist/{chunk-PHXITZE4.js.map → chunk-NMWDXFPH.js.map} +1 -1
- package/dist/{chunk-FSXTPBRN.js → chunk-NQ6BRJBE.js} +416 -850
- package/dist/chunk-NQ6BRJBE.js.map +1 -0
- package/dist/chunk-OH5E5KIO.js +2057 -0
- package/dist/chunk-OH5E5KIO.js.map +1 -0
- package/dist/chunk-ONU3HIED.cjs +2082 -0
- package/dist/chunk-ONU3HIED.cjs.map +1 -0
- package/dist/{chunk-STQ3BSED.cjs → chunk-PNN7RHVR.cjs} +66 -44
- package/dist/chunk-PNN7RHVR.cjs.map +1 -0
- package/dist/{chunk-6DCB664D.js → chunk-PQBQG7IM.js} +3 -3
- package/dist/{chunk-6DCB664D.js.map → chunk-PQBQG7IM.js.map} +1 -1
- package/dist/{chunk-ACSVZPK7.cjs → chunk-PWLJ77UV.cjs} +5 -3
- package/dist/chunk-PWLJ77UV.cjs.map +1 -0
- package/dist/chunk-Q7Q4WSLJ.cjs +328 -0
- package/dist/chunk-Q7Q4WSLJ.cjs.map +1 -0
- package/dist/{chunk-BEFM74L2.js → chunk-QLRESYPU.js} +637 -493
- package/dist/chunk-QLRESYPU.js.map +1 -0
- package/dist/{chunk-SBPC5IP3.js → chunk-QWX5YA3K.js} +784 -202
- package/dist/chunk-QWX5YA3K.js.map +1 -0
- package/dist/{chunk-TCRIQMBU.js → chunk-RJS7DECT.js} +8 -9
- package/dist/chunk-RJS7DECT.js.map +1 -0
- package/dist/{chunk-6JZUSDY2.cjs → chunk-RMQLSPA2.cjs} +297 -27
- package/dist/chunk-RMQLSPA2.cjs.map +1 -0
- package/dist/{chunk-SJDMVITW.cjs → chunk-RT5ZY4XA.cjs} +6 -5
- package/dist/chunk-RT5ZY4XA.cjs.map +1 -0
- package/dist/{chunk-IJTLXNGJ.js → chunk-T4XNKYXB.js} +780 -127
- package/dist/chunk-T4XNKYXB.js.map +1 -0
- package/dist/{chunk-PDGEXGS6.cjs → chunk-TQR4KBY2.cjs} +354 -182
- package/dist/chunk-TQR4KBY2.cjs.map +1 -0
- package/dist/chunk-TTAITEPJ.cjs +755 -0
- package/dist/chunk-TTAITEPJ.cjs.map +1 -0
- package/dist/{chunk-NN3QSOVS.cjs → chunk-U5SON7R2.cjs} +27 -27
- package/dist/{chunk-NN3QSOVS.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
- package/dist/{chunk-A2I2XO52.cjs → chunk-U63GDNRC.cjs} +32 -26
- package/dist/chunk-U63GDNRC.cjs.map +1 -0
- package/dist/{chunk-YNULOIR5.cjs → chunk-UDISNXDL.cjs} +64 -43
- package/dist/chunk-UDISNXDL.cjs.map +1 -0
- package/dist/{chunk-GWEDD3DH.js → chunk-UV3SN74I.js} +5 -5
- package/dist/{chunk-GWEDD3DH.js.map → chunk-UV3SN74I.js.map} +1 -1
- package/dist/{chunk-U5W4LKZV.cjs → chunk-VCRRKBLN.cjs} +9 -9
- package/dist/{chunk-U5W4LKZV.cjs.map → chunk-VCRRKBLN.cjs.map} +1 -1
- package/dist/{chunk-EFELJVLA.js → chunk-VGTJPTIC.js} +28 -5
- package/dist/chunk-VGTJPTIC.js.map +1 -0
- package/dist/chunk-VQH4VAWD.cjs +12 -0
- package/dist/{chunk-EPTSMFH7.cjs.map → chunk-VQH4VAWD.cjs.map} +1 -1
- package/dist/{chunk-SNXVDZAJ.js → chunk-W6OG3HDG.js} +5 -4
- package/dist/chunk-W6OG3HDG.js.map +1 -0
- package/dist/chunk-WDGA7IYB.js +207 -0
- package/dist/chunk-WDGA7IYB.js.map +1 -0
- package/dist/chunk-WEVQJ5LH.js +736 -0
- package/dist/chunk-WEVQJ5LH.js.map +1 -0
- package/dist/{chunk-3PRKZW6D.cjs → chunk-XBYVV3MP.cjs} +60 -5
- package/dist/chunk-XBYVV3MP.cjs.map +1 -0
- package/dist/{chunk-GFRGG2US.cjs → chunk-XCAGZAKP.cjs} +7 -7
- package/dist/{chunk-GFRGG2US.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
- package/dist/{chunk-XR4YZFKW.cjs → chunk-XDF2UPEQ.cjs} +3864 -1783
- package/dist/chunk-XDF2UPEQ.cjs.map +1 -0
- package/dist/{chunk-7V2FGGI2.cjs → chunk-XMQSEJCF.cjs} +632 -1080
- package/dist/chunk-XMQSEJCF.cjs.map +1 -0
- package/dist/chunk-XNLIZYRZ.cjs +3432 -0
- package/dist/chunk-XNLIZYRZ.cjs.map +1 -0
- package/dist/{chunk-66UVLHQA.cjs → chunk-XNSI2FJO.cjs} +99 -100
- package/dist/chunk-XNSI2FJO.cjs.map +1 -0
- package/dist/chunk-XQSCL77R.cjs +60 -0
- package/dist/chunk-XQSCL77R.cjs.map +1 -0
- package/dist/{chunk-SVJ5GEXW.cjs → chunk-XUO3KQFO.cjs} +2 -2
- package/dist/chunk-XUO3KQFO.cjs.map +1 -0
- package/dist/{chunk-HJH3RMXG.cjs → chunk-YAAM3M2S.cjs} +10 -10
- package/dist/{chunk-HJH3RMXG.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
- package/dist/{chunk-ATLN63JA.js → chunk-YBFHZUXX.js} +6 -6
- package/dist/{chunk-ATLN63JA.js.map → chunk-YBFHZUXX.js.map} +1 -1
- package/dist/{chunk-K3BUWSFR.js → chunk-YDFDBE6D.js} +119 -6
- package/dist/chunk-YDFDBE6D.js.map +1 -0
- package/dist/{chunk-OSZPLZIV.cjs → chunk-YVWGEQJE.cjs} +318 -132
- package/dist/chunk-YVWGEQJE.cjs.map +1 -0
- package/dist/{chunk-QT6V3YRH.js → chunk-YWGVVALJ.js} +3 -3
- package/dist/{chunk-QT6V3YRH.js.map → chunk-YWGVVALJ.js.map} +1 -1
- package/dist/core/index.cjs +40 -41
- package/dist/core/index.d.cts +4 -5
- package/dist/core/index.d.ts +4 -5
- package/dist/core/index.js +8 -9
- package/dist/{ddl-eWg7hx6R.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
- package/dist/{ddl-D5369kOY.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
- package/dist/graph-extension/index.cjs +26 -23
- package/dist/graph-extension/index.d.cts +16 -6
- package/dist/graph-extension/index.d.ts +16 -6
- package/dist/graph-extension/index.js +7 -8
- package/dist/graph-merge/index.cjs +2459 -655
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +170 -33
- package/dist/graph-merge/index.d.ts +170 -33
- package/dist/graph-merge/index.js +2269 -468
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-By89Sezh.d.ts → index-BSHvKfok.d.ts} +221 -10
- package/dist/{index-DcQ3Sxs-.d.cts → index-DxaYCv8Y.d.cts} +221 -10
- package/dist/index.cjs +330 -269
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +590 -576
- package/dist/index.d.ts +590 -576
- package/dist/index.js +73 -50
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +17 -17
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/indexes/index.js +10 -10
- package/dist/interchange/index.cjs +165 -50
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +261 -16
- package/dist/interchange/index.d.ts +261 -16
- package/dist/interchange/index.js +128 -24
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-B0KjKE93.d.ts → manager-CfZAimti.d.ts} +36 -5
- package/dist/{manager-Cn0NFIhN.d.cts → manager-HGk6E_HW.d.cts} +36 -5
- package/dist/{materialize-indexes-BD4V3svD.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
- package/dist/{materialize-indexes-DVRhd5h4.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
- package/dist/{postgres-DaEWvN4x.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
- package/dist/{postgres-u0a0HN2D.d.ts → postgres-e7a9TdvR.d.ts} +1961 -439
- package/dist/profiler/index.cjs +15 -15
- package/dist/profiler/index.d.cts +9 -10
- package/dist/profiler/index.d.ts +9 -10
- package/dist/profiler/index.js +4 -4
- package/dist/provenance/index.cjs +46 -48
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +7 -7
- package/dist/provenance/index.d.ts +7 -7
- package/dist/provenance/index.js +12 -14
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +50 -49
- package/dist/schema/index.d.cts +9 -16
- package/dist/schema/index.d.ts +9 -16
- package/dist/schema/index.js +23 -22
- package/dist/{searchable-CnYEancP.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
- package/dist/{searchable-BT7j9_IK.d.cts → searchable-CIje5XYD.d.cts} +1 -2
- package/dist/{sqlite-BrMoSsI7.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
- package/dist/{sqlite-CHhZUyO5.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
- package/dist/{store-view-Bvdku0Ht.d.ts → store-DawaWWjJ.d.ts} +3145 -2556
- package/dist/{store-view-w-md0nQ4.d.cts → store-RwTJx8LX.d.cts} +3145 -2556
- package/dist/{temporal-BCORwUau.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
- package/dist/{temporal--x9T8K4S.d.ts → temporal-BtM4UALv.d.ts} +1 -1
- package/dist/{types-6-WJmSD4.d.cts → types-CoIx8HX5.d.cts} +1 -1
- package/dist/{types-Cjvkj0jA.d.ts → types-HkveCCx0.d.cts} +866 -21
- package/dist/{types-Cjvkj0jA.d.cts → types-HkveCCx0.d.ts} +866 -21
- package/dist/{types-COODtTJU.d.ts → types-KFfk-8Ah.d.ts} +1 -1
- package/dist/{where-CUQmCR6d.d.cts → where--fk7_0kv.d.cts} +1 -1
- package/dist/{where-5xVawAwL.d.ts → where-ws5hf-Ov.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-2BIG7U6E.cjs +0 -83
- package/dist/chunk-2BIG7U6E.cjs.map +0 -1
- package/dist/chunk-2L54C2C2.js +0 -144
- package/dist/chunk-2L54C2C2.js.map +0 -1
- package/dist/chunk-2VLBGQBY.cjs.map +0 -1
- package/dist/chunk-2WDD2NO3.js +0 -59
- package/dist/chunk-2WDD2NO3.js.map +0 -1
- package/dist/chunk-2Y4IFKW7.js.map +0 -1
- package/dist/chunk-35S6P5ZU.js +0 -27
- package/dist/chunk-35S6P5ZU.js.map +0 -1
- package/dist/chunk-3PRKZW6D.cjs.map +0 -1
- package/dist/chunk-4MB3AQAQ.js.map +0 -1
- package/dist/chunk-4SZ6XPTG.cjs +0 -12
- package/dist/chunk-5MUSU4ZP.cjs.map +0 -1
- package/dist/chunk-63KCKSSH.js.map +0 -1
- package/dist/chunk-66UVLHQA.cjs.map +0 -1
- package/dist/chunk-6JZUSDY2.cjs.map +0 -1
- package/dist/chunk-764JHTLT.cjs +0 -15
- package/dist/chunk-764JHTLT.cjs.map +0 -1
- package/dist/chunk-7G32LIQM.js.map +0 -1
- package/dist/chunk-7V2FGGI2.cjs.map +0 -1
- package/dist/chunk-A2I2XO52.cjs.map +0 -1
- package/dist/chunk-A4PBRX4C.cjs +0 -100
- package/dist/chunk-A4PBRX4C.cjs.map +0 -1
- package/dist/chunk-ACSVZPK7.cjs.map +0 -1
- package/dist/chunk-ALFUGRYB.cjs +0 -1282
- package/dist/chunk-ALFUGRYB.cjs.map +0 -1
- package/dist/chunk-B75XRV3O.js +0 -125
- package/dist/chunk-B75XRV3O.js.map +0 -1
- package/dist/chunk-BCP7LLOY.js.map +0 -1
- package/dist/chunk-BEFM74L2.js.map +0 -1
- package/dist/chunk-BNUFUFAU.js.map +0 -1
- package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
- package/dist/chunk-CPEL3YIR.cjs.map +0 -1
- package/dist/chunk-D7PG5D5K.js.map +0 -1
- package/dist/chunk-DI74SMXS.cjs +0 -29
- package/dist/chunk-DI74SMXS.cjs.map +0 -1
- package/dist/chunk-DK2S42XB.js +0 -77
- package/dist/chunk-DK2S42XB.js.map +0 -1
- package/dist/chunk-DRACN6XG.js +0 -27
- package/dist/chunk-DRACN6XG.js.map +0 -1
- package/dist/chunk-EE7N5XXQ.cjs.map +0 -1
- package/dist/chunk-EFELJVLA.js.map +0 -1
- package/dist/chunk-EPTSMFH7.cjs +0 -12
- package/dist/chunk-EQ7JKLZO.cjs +0 -157
- package/dist/chunk-EQ7JKLZO.cjs.map +0 -1
- package/dist/chunk-FJMPR3OH.cjs.map +0 -1
- package/dist/chunk-FMGEZBAQ.js.map +0 -1
- package/dist/chunk-FMMIX6N4.js.map +0 -1
- package/dist/chunk-FRHHDHKH.js.map +0 -1
- package/dist/chunk-FSXTPBRN.js.map +0 -1
- package/dist/chunk-G6Q5UM7U.js.map +0 -1
- package/dist/chunk-GYA4JRP5.js.map +0 -1
- package/dist/chunk-HOHAJ2NR.cjs +0 -61
- package/dist/chunk-HOHAJ2NR.cjs.map +0 -1
- package/dist/chunk-HOIFFY4M.js.map +0 -1
- package/dist/chunk-IIMQJYAM.js +0 -81
- package/dist/chunk-IIMQJYAM.js.map +0 -1
- package/dist/chunk-IJTLXNGJ.js.map +0 -1
- package/dist/chunk-ITE4IXAK.js +0 -25
- package/dist/chunk-ITE4IXAK.js.map +0 -1
- package/dist/chunk-K3BUWSFR.js.map +0 -1
- package/dist/chunk-KCO5EFJU.js +0 -79
- package/dist/chunk-KCO5EFJU.js.map +0 -1
- package/dist/chunk-KKYELPZ2.cjs +0 -83
- package/dist/chunk-KKYELPZ2.cjs.map +0 -1
- package/dist/chunk-MCHP7RHZ.cjs.map +0 -1
- package/dist/chunk-MIJKEVV7.js.map +0 -1
- package/dist/chunk-NCX65HBY.cjs +0 -1396
- package/dist/chunk-NCX65HBY.cjs.map +0 -1
- package/dist/chunk-OSZPLZIV.cjs.map +0 -1
- package/dist/chunk-OVUUTCPJ.cjs.map +0 -1
- package/dist/chunk-PDGEXGS6.cjs.map +0 -1
- package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
- package/dist/chunk-QMQLUA66.js +0 -12
- package/dist/chunk-QMQLUA66.js.map +0 -1
- package/dist/chunk-QYWINYEA.cjs.map +0 -1
- package/dist/chunk-S4KQ5LV4.js.map +0 -1
- package/dist/chunk-SBPC5IP3.js.map +0 -1
- package/dist/chunk-SJDMVITW.cjs.map +0 -1
- package/dist/chunk-SNXVDZAJ.js.map +0 -1
- package/dist/chunk-SQRD2CYF.js.map +0 -1
- package/dist/chunk-ST3LPB2V.cjs.map +0 -1
- package/dist/chunk-STQ3BSED.cjs.map +0 -1
- package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
- package/dist/chunk-TCRIQMBU.js.map +0 -1
- package/dist/chunk-TDXIBCGY.cjs.map +0 -1
- package/dist/chunk-TFMVL4QH.js.map +0 -1
- package/dist/chunk-TRF4EBJT.cjs +0 -30
- package/dist/chunk-TRF4EBJT.cjs.map +0 -1
- package/dist/chunk-TVLKA4AY.js +0 -94
- package/dist/chunk-TVLKA4AY.js.map +0 -1
- package/dist/chunk-UR7W5YQK.js.map +0 -1
- package/dist/chunk-VITTKBWF.js +0 -1263
- package/dist/chunk-VITTKBWF.js.map +0 -1
- package/dist/chunk-WBUFJ7BS.cjs +0 -131
- package/dist/chunk-WBUFJ7BS.cjs.map +0 -1
- package/dist/chunk-XR4YZFKW.cjs.map +0 -1
- package/dist/chunk-YNULOIR5.cjs.map +0 -1
- package/dist/chunk-ZDH3DX3C.cjs +0 -30
- package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
- package/dist/chunk-ZTAJL4DT.cjs +0 -85
- package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
- package/dist/define-graph-DVF-oN1i.d.cts +0 -173
- package/dist/define-graph-SvYXOl78.d.ts +0 -173
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var chunkC4F7VJ5D_cjs = require('./chunk-C4F7VJ5D.cjs');
|
|
3
|
+
var chunkRMQLSPA2_cjs = require('./chunk-RMQLSPA2.cjs');
|
|
4
|
+
var chunkNFCVHQ5P_cjs = require('./chunk-NFCVHQ5P.cjs');
|
|
5
|
+
var chunkQ7Q4WSLJ_cjs = require('./chunk-Q7Q4WSLJ.cjs');
|
|
6
|
+
var chunk4UGOKMI5_cjs = require('./chunk-4UGOKMI5.cjs');
|
|
7
|
+
var chunkVCRRKBLN_cjs = require('./chunk-VCRRKBLN.cjs');
|
|
8
|
+
var chunkNI72YOJB_cjs = require('./chunk-NI72YOJB.cjs');
|
|
10
9
|
|
|
11
10
|
// src/backend/migrate-recorded-time.ts
|
|
12
11
|
var LEGACY_RECORDED_MAX = "9999-12-31T23:59:59.999Z";
|
|
@@ -53,24 +52,24 @@ var RECORDED_EDGE_COLUMNS = [
|
|
|
53
52
|
"meta"
|
|
54
53
|
];
|
|
55
54
|
function resolvedTableNames(backend, override) {
|
|
56
|
-
return
|
|
55
|
+
return chunkNFCVHQ5P_cjs.createSqlSchema(override ?? backend.tableNames ?? {}).tables;
|
|
57
56
|
}
|
|
58
57
|
function shortenedIdentifier(value) {
|
|
59
58
|
if (value.length <= 63) return value;
|
|
60
|
-
return `${value.slice(0, 50)}_${
|
|
59
|
+
return `${value.slice(0, 50)}_${chunk4UGOKMI5_cjs.shortHash(value)}`;
|
|
61
60
|
}
|
|
62
61
|
function mappingTableName(tables, override) {
|
|
63
62
|
const candidate = override ?? `${tables.recordedClock}_${MIGRATION_SUFFIX}`;
|
|
64
|
-
return
|
|
63
|
+
return chunkNFCVHQ5P_cjs.createSqlSchema({
|
|
65
64
|
recordedClock: shortenedIdentifier(candidate)
|
|
66
65
|
}).tables.recordedClock;
|
|
67
66
|
}
|
|
68
67
|
function temporaryTableName(tableName, role) {
|
|
69
|
-
return shortenedIdentifier(`__tg_${role}_${
|
|
68
|
+
return shortenedIdentifier(`__tg_${role}_${chunk4UGOKMI5_cjs.shortHash(tableName)}`);
|
|
70
69
|
}
|
|
71
70
|
function requireStatements(target) {
|
|
72
71
|
if (target.executeStatement === void 0) {
|
|
73
|
-
throw new
|
|
72
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
74
73
|
"Recorded-time migration requires executeStatement support.",
|
|
75
74
|
{ dialect: target.dialect },
|
|
76
75
|
{ suggestion: "Use a built-in SQLite or PostgreSQL backend." }
|
|
@@ -79,15 +78,15 @@ function requireStatements(target) {
|
|
|
79
78
|
return target.executeStatement;
|
|
80
79
|
}
|
|
81
80
|
async function executeStatement(target, statement) {
|
|
82
|
-
await requireStatements(target)(
|
|
81
|
+
await requireStatements(target)(chunkVCRRKBLN_cjs.asCompiledStatementSql(statement));
|
|
83
82
|
}
|
|
84
83
|
async function executeDdl(target, ddl) {
|
|
85
|
-
await executeStatement(target,
|
|
84
|
+
await executeStatement(target, chunkVCRRKBLN_cjs.sql.raw(ddl));
|
|
86
85
|
}
|
|
87
86
|
function canonicalLegacyInstant(value) {
|
|
88
|
-
const canonical =
|
|
87
|
+
const canonical = chunkQ7Q4WSLJ_cjs.canonicalizeDatabaseTimestamp(value);
|
|
89
88
|
if (canonical === void 0) {
|
|
90
|
-
throw new
|
|
89
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
91
90
|
"Legacy recorded-time relation contained an invalid timestamp.",
|
|
92
91
|
{ value }
|
|
93
92
|
);
|
|
@@ -96,8 +95,8 @@ function canonicalLegacyInstant(value) {
|
|
|
96
95
|
}
|
|
97
96
|
function safeRevision(value) {
|
|
98
97
|
const revision = typeof value === "bigint" ? Number(value) : typeof value === "string" && /^\d+$/.test(value) ? Number(value) : value;
|
|
99
|
-
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < 1 || revision >=
|
|
100
|
-
throw new
|
|
98
|
+
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < 1 || revision >= chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION) {
|
|
99
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
101
100
|
"Recorded anchor mapping contained an invalid revision.",
|
|
102
101
|
{ value }
|
|
103
102
|
);
|
|
@@ -106,9 +105,9 @@ function safeRevision(value) {
|
|
|
106
105
|
}
|
|
107
106
|
async function columnNames(target, tableName) {
|
|
108
107
|
const rows = target.dialect === "sqlite" ? await target.execute(
|
|
109
|
-
|
|
108
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`PRAGMA table_info(${chunkVCRRKBLN_cjs.sql.identifier(tableName)})`)
|
|
110
109
|
) : await target.execute(
|
|
111
|
-
|
|
110
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
112
111
|
SELECT column_name AS name
|
|
113
112
|
FROM information_schema.columns
|
|
114
113
|
WHERE table_schema = current_schema()
|
|
@@ -121,28 +120,28 @@ async function columnNames(target, tableName) {
|
|
|
121
120
|
}
|
|
122
121
|
async function readLegacyInstants(target, tables) {
|
|
123
122
|
const rows = await target.execute(
|
|
124
|
-
|
|
123
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
125
124
|
SELECT graph_id, recorded_from AS recorded_at
|
|
126
|
-
FROM ${
|
|
125
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedNodes)}
|
|
127
126
|
UNION
|
|
128
127
|
SELECT graph_id, recorded_to AS recorded_at
|
|
129
|
-
FROM ${
|
|
128
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedNodes)}
|
|
130
129
|
WHERE recorded_to <> ${LEGACY_RECORDED_MAX}
|
|
131
130
|
UNION
|
|
132
131
|
SELECT graph_id, recorded_from AS recorded_at
|
|
133
|
-
FROM ${
|
|
132
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedEdges)}
|
|
134
133
|
UNION
|
|
135
134
|
SELECT graph_id, recorded_to AS recorded_at
|
|
136
|
-
FROM ${
|
|
135
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedEdges)}
|
|
137
136
|
WHERE recorded_to <> ${LEGACY_RECORDED_MAX}
|
|
138
137
|
UNION
|
|
139
138
|
SELECT graph_id, recorded_at
|
|
140
|
-
FROM ${
|
|
139
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedClock)}
|
|
141
140
|
`)
|
|
142
141
|
);
|
|
143
142
|
const instants = rows.map((row) => {
|
|
144
143
|
if (typeof row.graph_id !== "string") {
|
|
145
|
-
throw new
|
|
144
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
146
145
|
"Legacy recorded-time relation contained an invalid graph id.",
|
|
147
146
|
{ graphId: row.graph_id }
|
|
148
147
|
);
|
|
@@ -193,38 +192,38 @@ function migrationMapDdl(dialect, table) {
|
|
|
193
192
|
);`;
|
|
194
193
|
}
|
|
195
194
|
async function writeMappingRows(target, tableName, rows) {
|
|
196
|
-
await executeStatement(target,
|
|
195
|
+
await executeStatement(target, chunkVCRRKBLN_cjs.sql`DELETE FROM ${chunkVCRRKBLN_cjs.sql.identifier(tableName)}`);
|
|
197
196
|
const rowsPerStatement = Math.max(
|
|
198
197
|
1,
|
|
199
198
|
Math.floor((target.capabilities.maxBindParameters ?? 900) / 4)
|
|
200
199
|
);
|
|
201
200
|
for (let start = 0; start < rows.length; start += rowsPerStatement) {
|
|
202
201
|
const values = rows.slice(start, start + rowsPerStatement).map(
|
|
203
|
-
(row) =>
|
|
202
|
+
(row) => chunkVCRRKBLN_cjs.sql`(${row.graphId}, ${row.legacyRecordedAt}, ${row.revision}, ${row.recordedAt})`
|
|
204
203
|
);
|
|
205
204
|
await executeStatement(
|
|
206
205
|
target,
|
|
207
|
-
|
|
208
|
-
INSERT INTO ${
|
|
206
|
+
chunkVCRRKBLN_cjs.sql`
|
|
207
|
+
INSERT INTO ${chunkVCRRKBLN_cjs.sql.identifier(tableName)}
|
|
209
208
|
(graph_id, legacy_recorded_at, revision, recorded_at)
|
|
210
|
-
VALUES ${
|
|
209
|
+
VALUES ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
|
|
211
210
|
`
|
|
212
211
|
);
|
|
213
212
|
}
|
|
214
213
|
}
|
|
215
214
|
function tableDdl(dialect, tables, temporary) {
|
|
216
215
|
if (dialect === "sqlite") {
|
|
217
|
-
const temporaryTables2 =
|
|
218
|
-
const finalTables2 =
|
|
219
|
-
const temporaryContributions =
|
|
220
|
-
const finalContributions =
|
|
216
|
+
const temporaryTables2 = chunkRMQLSPA2_cjs.createSqliteTables(temporary);
|
|
217
|
+
const finalTables2 = chunkRMQLSPA2_cjs.createSqliteTables(tables);
|
|
218
|
+
const temporaryContributions = chunkRMQLSPA2_cjs.sqliteContributions(temporaryTables2);
|
|
219
|
+
const finalContributions = chunkRMQLSPA2_cjs.sqliteContributions(finalTables2);
|
|
221
220
|
return ddlForRecordedTables(temporaryContributions, finalContributions);
|
|
222
221
|
}
|
|
223
|
-
const temporaryTables =
|
|
224
|
-
const finalTables =
|
|
222
|
+
const temporaryTables = chunkRMQLSPA2_cjs.createPostgresTables(temporary);
|
|
223
|
+
const finalTables = chunkRMQLSPA2_cjs.createPostgresTables(tables);
|
|
225
224
|
return ddlForRecordedTables(
|
|
226
|
-
|
|
227
|
-
|
|
225
|
+
chunkRMQLSPA2_cjs.postgresContributions(temporaryTables),
|
|
226
|
+
chunkRMQLSPA2_cjs.postgresContributions(finalTables)
|
|
228
227
|
);
|
|
229
228
|
}
|
|
230
229
|
function ddlForRecordedTables(temporary, final) {
|
|
@@ -236,13 +235,13 @@ function ddlForRecordedTables(temporary, final) {
|
|
|
236
235
|
(entry) => entry.logicalName === logicalName
|
|
237
236
|
)?.createDdl;
|
|
238
237
|
if (temporaryDdl === void 0 || finalDdl === void 0) {
|
|
239
|
-
throw new
|
|
238
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
240
239
|
`Could not generate migration DDL for ${logicalName}.`
|
|
241
240
|
);
|
|
242
241
|
}
|
|
243
242
|
const createTable = temporaryDdl[0];
|
|
244
243
|
if (createTable === void 0) {
|
|
245
|
-
throw new
|
|
244
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
246
245
|
`Could not generate migration table DDL for ${logicalName}.`
|
|
247
246
|
);
|
|
248
247
|
}
|
|
@@ -255,27 +254,27 @@ function ddlForRecordedTables(temporary, final) {
|
|
|
255
254
|
};
|
|
256
255
|
}
|
|
257
256
|
function migratedColumn(column, legacyAlias) {
|
|
258
|
-
if (column === "recorded_from") return
|
|
257
|
+
if (column === "recorded_from") return chunkVCRRKBLN_cjs.sql`from_map.revision`;
|
|
259
258
|
if (column === "recorded_to") {
|
|
260
|
-
return
|
|
259
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
261
260
|
CASE
|
|
262
|
-
WHEN ${
|
|
263
|
-
THEN ${
|
|
261
|
+
WHEN ${chunkVCRRKBLN_cjs.sql.raw(legacyAlias)}.recorded_to = ${LEGACY_RECORDED_MAX}
|
|
262
|
+
THEN ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
|
|
264
263
|
ELSE to_map.revision
|
|
265
264
|
END
|
|
266
265
|
`;
|
|
267
266
|
}
|
|
268
|
-
return
|
|
267
|
+
return chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.raw(legacyAlias)}.${chunkVCRRKBLN_cjs.sql.identifier(column)}`;
|
|
269
268
|
}
|
|
270
269
|
function mappingMatch(dialect, mappingAlias, legacyColumn) {
|
|
271
|
-
const mapping =
|
|
272
|
-
const legacy =
|
|
273
|
-
return dialect === "postgres" ?
|
|
270
|
+
const mapping = chunkVCRRKBLN_cjs.sql.raw(mappingAlias);
|
|
271
|
+
const legacy = chunkVCRRKBLN_cjs.sql.raw(`legacy.${legacyColumn}`);
|
|
272
|
+
return dialect === "postgres" ? chunkVCRRKBLN_cjs.sql`${mapping}.recorded_at = ${legacy}` : chunkVCRRKBLN_cjs.sql`${mapping}.legacy_recorded_at = ${legacy}`;
|
|
274
273
|
}
|
|
275
274
|
function missingMappingCount(value, legacyTable) {
|
|
276
275
|
const count = Number(value);
|
|
277
276
|
if (!Number.isSafeInteger(count) || count < 0) {
|
|
278
|
-
throw new
|
|
277
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
279
278
|
"Recorded-time migration returned an invalid integrity-check count.",
|
|
280
279
|
{ legacyTable, value }
|
|
281
280
|
);
|
|
@@ -286,12 +285,12 @@ async function assertRecordedRelationMappings(target, options) {
|
|
|
286
285
|
const fromMatch = mappingMatch(target.dialect, "from_map", "recorded_from");
|
|
287
286
|
const toMatch = mappingMatch(target.dialect, "to_map", "recorded_to");
|
|
288
287
|
const rows = await target.execute(
|
|
289
|
-
|
|
288
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
290
289
|
SELECT COUNT(*) AS missing
|
|
291
|
-
FROM ${
|
|
292
|
-
LEFT JOIN ${
|
|
290
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(options.legacyTable)} AS legacy
|
|
291
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS from_map
|
|
293
292
|
ON from_map.graph_id = legacy.graph_id AND ${fromMatch}
|
|
294
|
-
LEFT JOIN ${
|
|
293
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS to_map
|
|
295
294
|
ON to_map.graph_id = legacy.graph_id AND ${toMatch}
|
|
296
295
|
WHERE from_map.revision IS NULL
|
|
297
296
|
OR (
|
|
@@ -302,7 +301,7 @@ async function assertRecordedRelationMappings(target, options) {
|
|
|
302
301
|
);
|
|
303
302
|
const missing = missingMappingCount(rows[0]?.missing, options.legacyTable);
|
|
304
303
|
if (missing === 0) return;
|
|
305
|
-
throw new
|
|
304
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
306
305
|
"Legacy recorded-time boundaries could not be mapped exactly.",
|
|
307
306
|
{ legacyTable: options.legacyTable, missingRows: missing },
|
|
308
307
|
{
|
|
@@ -313,17 +312,17 @@ async function assertRecordedRelationMappings(target, options) {
|
|
|
313
312
|
async function assertRecordedClockMappings(target, options) {
|
|
314
313
|
const match = mappingMatch(target.dialect, "anchor_map", "recorded_at");
|
|
315
314
|
const rows = await target.execute(
|
|
316
|
-
|
|
315
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
317
316
|
SELECT COUNT(*) AS missing
|
|
318
|
-
FROM ${
|
|
319
|
-
LEFT JOIN ${
|
|
317
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(options.legacyTable)} AS legacy
|
|
318
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS anchor_map
|
|
320
319
|
ON anchor_map.graph_id = legacy.graph_id AND ${match}
|
|
321
320
|
WHERE anchor_map.revision IS NULL
|
|
322
321
|
`)
|
|
323
322
|
);
|
|
324
323
|
const missing = missingMappingCount(rows[0]?.missing, options.legacyTable);
|
|
325
324
|
if (missing === 0) return;
|
|
326
|
-
throw new
|
|
325
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
327
326
|
"Legacy recorded clock values could not be mapped exactly.",
|
|
328
327
|
{ legacyTable: options.legacyTable, missingRows: missing },
|
|
329
328
|
{
|
|
@@ -332,7 +331,7 @@ async function assertRecordedClockMappings(target, options) {
|
|
|
332
331
|
);
|
|
333
332
|
}
|
|
334
333
|
async function copyRecordedRelation(target, options) {
|
|
335
|
-
const columnList = options.columns.map((column) =>
|
|
334
|
+
const columnList = options.columns.map((column) => chunkVCRRKBLN_cjs.sql.identifier(column));
|
|
336
335
|
const values = options.columns.map(
|
|
337
336
|
(column) => migratedColumn(column, "legacy")
|
|
338
337
|
);
|
|
@@ -341,16 +340,16 @@ async function copyRecordedRelation(target, options) {
|
|
|
341
340
|
const toMatch = mappingMatch(target.dialect, "to_map", "recorded_to");
|
|
342
341
|
await executeStatement(
|
|
343
342
|
target,
|
|
344
|
-
|
|
345
|
-
INSERT INTO ${
|
|
346
|
-
(${
|
|
347
|
-
SELECT ${
|
|
348
|
-
FROM ${
|
|
343
|
+
chunkVCRRKBLN_cjs.sql`
|
|
344
|
+
INSERT INTO ${chunkVCRRKBLN_cjs.sql.identifier(options.temporaryTable)}
|
|
345
|
+
(${chunkVCRRKBLN_cjs.sql.join(columnList, chunkVCRRKBLN_cjs.sql`, `)})
|
|
346
|
+
SELECT ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
|
|
347
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(options.legacyTable)} AS legacy
|
|
349
348
|
-- LEFT JOIN is deliberate: a missing mapping reaches the NOT NULL
|
|
350
349
|
-- revision columns and fails loud instead of silently dropping history.
|
|
351
|
-
LEFT JOIN ${
|
|
350
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS from_map
|
|
352
351
|
ON from_map.graph_id = legacy.graph_id AND ${fromMatch}
|
|
353
|
-
LEFT JOIN ${
|
|
352
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS to_map
|
|
354
353
|
ON to_map.graph_id = legacy.graph_id AND ${toMatch}
|
|
355
354
|
`
|
|
356
355
|
);
|
|
@@ -360,13 +359,13 @@ async function copyRecordedClock(target, options) {
|
|
|
360
359
|
const match = mappingMatch(target.dialect, "anchor_map", "recorded_at");
|
|
361
360
|
await executeStatement(
|
|
362
361
|
target,
|
|
363
|
-
|
|
364
|
-
INSERT INTO ${
|
|
362
|
+
chunkVCRRKBLN_cjs.sql`
|
|
363
|
+
INSERT INTO ${chunkVCRRKBLN_cjs.sql.identifier(options.temporaryTable)}
|
|
365
364
|
(graph_id, revision, recorded_at)
|
|
366
365
|
SELECT legacy.graph_id, anchor_map.revision, legacy.recorded_at
|
|
367
|
-
FROM ${
|
|
366
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(options.legacyTable)} AS legacy
|
|
368
367
|
-- Preserve fail-loud behavior if the preflight invariant changes later.
|
|
369
|
-
LEFT JOIN ${
|
|
368
|
+
LEFT JOIN ${chunkVCRRKBLN_cjs.sql.identifier(options.mappingTable)} AS anchor_map
|
|
370
369
|
ON anchor_map.graph_id = legacy.graph_id AND ${match}
|
|
371
370
|
`
|
|
372
371
|
);
|
|
@@ -381,7 +380,7 @@ async function replaceLegacyTables(target, tables, mappingTable) {
|
|
|
381
380
|
for (const table of Object.values(temporary)) {
|
|
382
381
|
await executeStatement(
|
|
383
382
|
target,
|
|
384
|
-
|
|
383
|
+
chunkVCRRKBLN_cjs.sql`DROP TABLE IF EXISTS ${chunkVCRRKBLN_cjs.sql.identifier(table)}`
|
|
385
384
|
);
|
|
386
385
|
}
|
|
387
386
|
await executeDdl(target, requireCreateTable(ddl.nodes));
|
|
@@ -406,15 +405,15 @@ async function replaceLegacyTables(target, tables, mappingTable) {
|
|
|
406
405
|
});
|
|
407
406
|
await executeStatement(
|
|
408
407
|
target,
|
|
409
|
-
|
|
408
|
+
chunkVCRRKBLN_cjs.sql`DROP TABLE ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedNodes)}`
|
|
410
409
|
);
|
|
411
410
|
await executeStatement(
|
|
412
411
|
target,
|
|
413
|
-
|
|
412
|
+
chunkVCRRKBLN_cjs.sql`DROP TABLE ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedEdges)}`
|
|
414
413
|
);
|
|
415
414
|
await executeStatement(
|
|
416
415
|
target,
|
|
417
|
-
|
|
416
|
+
chunkVCRRKBLN_cjs.sql`DROP TABLE ${chunkVCRRKBLN_cjs.sql.identifier(tables.recordedClock)}`
|
|
418
417
|
);
|
|
419
418
|
await renameTable(target, temporary.recordedNodes, tables.recordedNodes);
|
|
420
419
|
await renameTable(target, temporary.recordedEdges, tables.recordedEdges);
|
|
@@ -446,17 +445,17 @@ async function renamePrimaryKeyConstraint(target, temporaryTable, finalTable) {
|
|
|
446
445
|
if (target.dialect !== "postgres") return;
|
|
447
446
|
await executeStatement(
|
|
448
447
|
target,
|
|
449
|
-
|
|
450
|
-
ALTER TABLE ${
|
|
451
|
-
RENAME CONSTRAINT ${
|
|
452
|
-
TO ${
|
|
448
|
+
chunkVCRRKBLN_cjs.sql`
|
|
449
|
+
ALTER TABLE ${chunkVCRRKBLN_cjs.sql.identifier(finalTable)}
|
|
450
|
+
RENAME CONSTRAINT ${chunkVCRRKBLN_cjs.sql.identifier(`${temporaryTable}_pkey`)}
|
|
451
|
+
TO ${chunkVCRRKBLN_cjs.sql.identifier(shortenedIdentifier(`${finalTable}_pkey`))}
|
|
453
452
|
`
|
|
454
453
|
);
|
|
455
454
|
}
|
|
456
455
|
function requireCreateTable(statements) {
|
|
457
456
|
const statement = statements[0];
|
|
458
457
|
if (statement === void 0) {
|
|
459
|
-
throw new
|
|
458
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError("Recorded migration table DDL was empty.");
|
|
460
459
|
}
|
|
461
460
|
return statement;
|
|
462
461
|
}
|
|
@@ -464,10 +463,10 @@ async function renameTable(target, from, to) {
|
|
|
464
463
|
try {
|
|
465
464
|
await executeStatement(
|
|
466
465
|
target,
|
|
467
|
-
|
|
466
|
+
chunkVCRRKBLN_cjs.sql`ALTER TABLE ${chunkVCRRKBLN_cjs.sql.identifier(from)} RENAME TO ${chunkVCRRKBLN_cjs.sql.identifier(to)}`
|
|
468
467
|
);
|
|
469
468
|
} catch (error) {
|
|
470
|
-
throw new
|
|
469
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
471
470
|
"Could not rename a migrated recorded-time table.",
|
|
472
471
|
{ from, to },
|
|
473
472
|
{ cause: error }
|
|
@@ -498,9 +497,9 @@ async function migrateLegacyRecordedTime(options) {
|
|
|
498
497
|
};
|
|
499
498
|
}
|
|
500
499
|
const rows = await target.execute(
|
|
501
|
-
|
|
500
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
502
501
|
SELECT COUNT(*) AS anchors, COUNT(DISTINCT graph_id) AS graphs
|
|
503
|
-
FROM ${
|
|
502
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(mapTable)}
|
|
504
503
|
`)
|
|
505
504
|
);
|
|
506
505
|
const anchors = Number(rows[0]?.anchors ?? 0);
|
|
@@ -515,7 +514,7 @@ async function migrateLegacyRecordedTime(options) {
|
|
|
515
514
|
const nodeColumns = await columnNames(target, tables.recordedNodes);
|
|
516
515
|
const edgeColumns = await columnNames(target, tables.recordedEdges);
|
|
517
516
|
if (!nodeColumns.has("recorded_from") || !edgeColumns.has("recorded_from")) {
|
|
518
|
-
throw new
|
|
517
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
519
518
|
"Legacy recorded-time schema is incomplete.",
|
|
520
519
|
{ tables }
|
|
521
520
|
);
|
|
@@ -534,24 +533,24 @@ async function migrateLegacyRecordedTime(options) {
|
|
|
534
533
|
}
|
|
535
534
|
async function migrateRecordedAnchor(options) {
|
|
536
535
|
try {
|
|
537
|
-
return
|
|
536
|
+
return chunkQ7Q4WSLJ_cjs.asRecordedInstant(options.anchor);
|
|
538
537
|
} catch (error) {
|
|
539
|
-
if (!(error instanceof
|
|
538
|
+
if (!(error instanceof chunkNI72YOJB_cjs.ValidationError)) throw error;
|
|
540
539
|
}
|
|
541
540
|
const legacyRecordedAt = canonicalLegacyInstant(options.anchor);
|
|
542
541
|
const tables = resolvedTableNames(options.backend, options.tableNames);
|
|
543
542
|
const mapTable = mappingTableName(tables, options.mappingTableName);
|
|
544
543
|
const rows = await options.backend.execute(
|
|
545
|
-
|
|
544
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
546
545
|
SELECT revision, recorded_at
|
|
547
|
-
FROM ${
|
|
546
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(mapTable)}
|
|
548
547
|
WHERE graph_id = ${options.graphId}
|
|
549
548
|
AND legacy_recorded_at = ${legacyRecordedAt}
|
|
550
549
|
`)
|
|
551
550
|
);
|
|
552
551
|
const row = rows[0];
|
|
553
552
|
if (row === void 0) {
|
|
554
|
-
throw new
|
|
553
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
555
554
|
"No migrated recorded anchor matches this graph and legacy timestamp.",
|
|
556
555
|
{ anchor: options.anchor, graphId: options.graphId },
|
|
557
556
|
{
|
|
@@ -559,14 +558,14 @@ async function migrateRecordedAnchor(options) {
|
|
|
559
558
|
}
|
|
560
559
|
);
|
|
561
560
|
}
|
|
562
|
-
return
|
|
561
|
+
return chunkQ7Q4WSLJ_cjs.createRecordedInstant(
|
|
563
562
|
safeRevision(row.revision),
|
|
564
563
|
canonicalLegacyInstant(row.recorded_at)
|
|
565
564
|
);
|
|
566
565
|
}
|
|
567
566
|
async function deleteLegacyRecordedAnchorMap(options) {
|
|
568
567
|
if (options.backend.executeStatement === void 0) {
|
|
569
|
-
throw new
|
|
568
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
570
569
|
"Deleting a recorded anchor migration map requires executeStatement support.",
|
|
571
570
|
{ dialect: options.backend.dialect }
|
|
572
571
|
);
|
|
@@ -576,23 +575,23 @@ async function deleteLegacyRecordedAnchorMap(options) {
|
|
|
576
575
|
await options.backend.transaction(async (target) => {
|
|
577
576
|
await executeStatement(
|
|
578
577
|
target,
|
|
579
|
-
|
|
580
|
-
DELETE FROM ${
|
|
578
|
+
chunkVCRRKBLN_cjs.sql`
|
|
579
|
+
DELETE FROM ${chunkVCRRKBLN_cjs.sql.identifier(mapTable)}
|
|
581
580
|
WHERE graph_id = ${options.graphId}
|
|
582
581
|
`
|
|
583
582
|
);
|
|
584
583
|
if (options.dropWhenEmpty !== true) return;
|
|
585
584
|
const rows = await target.execute(
|
|
586
|
-
|
|
585
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
587
586
|
SELECT COUNT(*) AS anchors, COUNT(DISTINCT graph_id) AS graphs
|
|
588
|
-
FROM ${
|
|
587
|
+
FROM ${chunkVCRRKBLN_cjs.sql.identifier(mapTable)}
|
|
589
588
|
`)
|
|
590
589
|
);
|
|
591
590
|
const remaining = missingMappingCount(rows[0]?.anchors, mapTable);
|
|
592
591
|
if (remaining === 0) {
|
|
593
592
|
await executeStatement(
|
|
594
593
|
target,
|
|
595
|
-
|
|
594
|
+
chunkVCRRKBLN_cjs.sql`DROP TABLE ${chunkVCRRKBLN_cjs.sql.identifier(mapTable)}`
|
|
596
595
|
);
|
|
597
596
|
}
|
|
598
597
|
});
|
|
@@ -601,5 +600,5 @@ async function deleteLegacyRecordedAnchorMap(options) {
|
|
|
601
600
|
exports.deleteLegacyRecordedAnchorMap = deleteLegacyRecordedAnchorMap;
|
|
602
601
|
exports.migrateLegacyRecordedTime = migrateLegacyRecordedTime;
|
|
603
602
|
exports.migrateRecordedAnchor = migrateRecordedAnchor;
|
|
604
|
-
//# sourceMappingURL=chunk-
|
|
605
|
-
//# sourceMappingURL=chunk-
|
|
603
|
+
//# sourceMappingURL=chunk-XNSI2FJO.cjs.map
|
|
604
|
+
//# sourceMappingURL=chunk-XNSI2FJO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/migrate-recorded-time.ts"],"names":["createSqlSchema","shortHash","ConfigurationError","asCompiledStatementSql","sql","canonicalizeDatabaseTimestamp","RECORDED_MAX_REVISION","asCompiledRowsSql","temporaryTables","createSqliteTables","finalTables","sqliteContributions","createPostgresTables","postgresContributions","asRecordedInstant","ValidationError","createRecordedInstant"],"mappings":"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","file":"chunk-XNSI2FJO.cjs","sourcesContent":["/**\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 { 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 /** Override the backend's recorded table names. */\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 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 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 resolvedTableNames(\n backend: Pick<GraphBackend, \"tableNames\">,\n override: Partial<SqlTableNames> | undefined,\n): ResolvedSqlTableNames {\n return createSqlSchema(override ?? backend.tableNames ?? {}).tables;\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"]}
|