@nicia-ai/typegraph 0.38.0 → 0.40.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 +8 -10
- package/dist/backend/drizzle/indexes.d.cts +2 -2
- package/dist/backend/drizzle/indexes.d.ts +2 -2
- package/dist/backend/drizzle/indexes.js +4 -6
- package/dist/backend/index.cjs +60 -39
- package/dist/backend/index.d.cts +60 -1
- package/dist/backend/index.d.ts +60 -1
- package/dist/backend/index.js +12 -3
- package/dist/backend/postgres/index.cjs +25 -27
- package/dist/backend/postgres/index.d.cts +6 -6
- package/dist/backend/postgres/index.d.ts +6 -6
- package/dist/backend/postgres/index.js +12 -14
- package/dist/backend/postgres/pglite-store.cjs +26 -27
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +6 -5
- package/dist/backend/postgres/pglite-store.d.ts +6 -5
- package/dist/backend/postgres/pglite-store.js +22 -23
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +14 -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 +13 -15
- package/dist/backend/sqlite/index.cjs +26 -28
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +10 -12
- package/dist/backend/sqlite/libsql.cjs +16 -18
- 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 +15 -17
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +27 -28
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +6 -5
- package/dist/backend/sqlite/local-store.d.ts +6 -5
- package/dist/backend/sqlite/local-store.js +23 -24
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +15 -17
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +13 -15
- package/dist/{chunk-U4JDJKPD.js → chunk-2I3DNNBU.js} +4 -4
- package/dist/{chunk-U4JDJKPD.js.map → chunk-2I3DNNBU.js.map} +1 -1
- package/dist/{chunk-NPWACFQJ.cjs → chunk-2J5NMMVR.cjs} +43 -43
- package/dist/{chunk-NPWACFQJ.cjs.map → chunk-2J5NMMVR.cjs.map} +1 -1
- package/dist/{chunk-NU23DUSJ.cjs → chunk-2X73QTIC.cjs} +12 -13
- package/dist/chunk-2X73QTIC.cjs.map +1 -0
- package/dist/{chunk-A2FGSWMQ.js → chunk-3BL3JFHL.js} +202 -52
- package/dist/chunk-3BL3JFHL.js.map +1 -0
- package/dist/chunk-3SHAUJRB.js +79 -0
- package/dist/chunk-3SHAUJRB.js.map +1 -0
- package/dist/{chunk-UPXDVI3T.js → chunk-53BSOG3O.js} +8 -7
- package/dist/chunk-53BSOG3O.js.map +1 -0
- package/dist/chunk-5J4VNCUD.js +856 -0
- package/dist/chunk-5J4VNCUD.js.map +1 -0
- package/dist/chunk-5YBDB7UG.cjs +12 -0
- package/dist/{chunk-FMNUSGZ4.cjs.map → chunk-5YBDB7UG.cjs.map} +1 -1
- package/dist/{chunk-6XDBRDZE.js → chunk-6N7QBIWN.js} +7 -3
- package/dist/chunk-6N7QBIWN.js.map +1 -0
- package/dist/{chunk-EZH7FNUS.js → chunk-6QP4QXBR.js} +3 -3
- package/dist/{chunk-EZH7FNUS.js.map → chunk-6QP4QXBR.js.map} +1 -1
- package/dist/{chunk-E6TXEISH.cjs → chunk-7UTUKH4E.cjs} +4 -4
- package/dist/{chunk-E6TXEISH.cjs.map → chunk-7UTUKH4E.cjs.map} +1 -1
- package/dist/chunk-7WLEQIHA.cjs +605 -0
- package/dist/chunk-7WLEQIHA.cjs.map +1 -0
- package/dist/{chunk-BQITNFQJ.js → chunk-AQVDAKXH.js} +3 -3
- package/dist/{chunk-BQITNFQJ.js.map → chunk-AQVDAKXH.js.map} +1 -1
- package/dist/{chunk-X6CNEA32.js → chunk-BUZWMDNL.js} +5 -5
- package/dist/{chunk-X6CNEA32.js.map → chunk-BUZWMDNL.js.map} +1 -1
- package/dist/{chunk-7M3NACL3.cjs → chunk-CKFBZ4LV.cjs} +4 -4
- package/dist/{chunk-7M3NACL3.cjs.map → chunk-CKFBZ4LV.cjs.map} +1 -1
- package/dist/{chunk-VBH7ZXSZ.js → chunk-CU3LPYNB.js} +5 -5
- package/dist/{chunk-VBH7ZXSZ.js.map → chunk-CU3LPYNB.js.map} +1 -1
- package/dist/{chunk-YJDSPA5E.js → chunk-EFZ4S22A.js} +11 -10
- package/dist/chunk-EFZ4S22A.js.map +1 -0
- package/dist/chunk-ELA3V6UN.js +601 -0
- package/dist/chunk-ELA3V6UN.js.map +1 -0
- package/dist/{chunk-2SL7OGPR.cjs → chunk-H6I36MGT.cjs} +1037 -887
- package/dist/chunk-H6I36MGT.cjs.map +1 -0
- package/dist/chunk-HAQVISUF.cjs +1098 -0
- package/dist/chunk-HAQVISUF.cjs.map +1 -0
- package/dist/{chunk-O5H62ZWJ.cjs → chunk-HP6LWBLB.cjs} +14 -2
- package/dist/chunk-HP6LWBLB.cjs.map +1 -0
- package/dist/{chunk-BKAKAVRW.cjs → chunk-HQRZEYYB.cjs} +44 -44
- package/dist/{chunk-BKAKAVRW.cjs.map → chunk-HQRZEYYB.cjs.map} +1 -1
- package/dist/{chunk-XD6X7O5R.js → chunk-I5CRUPKO.js} +9 -10
- package/dist/{chunk-XD6X7O5R.js.map → chunk-I5CRUPKO.js.map} +1 -1
- package/dist/{chunk-RQPRCEIO.js → chunk-JHK6NPFV.js} +218 -306
- package/dist/chunk-JHK6NPFV.js.map +1 -0
- package/dist/chunk-JZYMOHHM.cjs +226 -0
- package/dist/chunk-JZYMOHHM.cjs.map +1 -0
- package/dist/{chunk-CQC6VBAF.cjs → chunk-K4FB2RMO.cjs} +10 -10
- package/dist/{chunk-CQC6VBAF.cjs.map → chunk-K4FB2RMO.cjs.map} +1 -1
- package/dist/{chunk-ERZ4QPQX.js → chunk-K6CD6W5J.js} +5 -5
- package/dist/{chunk-ERZ4QPQX.js.map → chunk-K6CD6W5J.js.map} +1 -1
- package/dist/{chunk-LZ3TVJY4.cjs → chunk-KHNKYSGP.cjs} +34 -34
- package/dist/{chunk-LZ3TVJY4.cjs.map → chunk-KHNKYSGP.cjs.map} +1 -1
- package/dist/{chunk-CWX77JB4.cjs → chunk-KLR77R5A.cjs} +13 -13
- package/dist/{chunk-CWX77JB4.cjs.map → chunk-KLR77R5A.cjs.map} +1 -1
- package/dist/{chunk-AOL64O4Z.js → chunk-L3DDZUZP.js} +3 -3
- package/dist/{chunk-AOL64O4Z.js.map → chunk-L3DDZUZP.js.map} +1 -1
- package/dist/{chunk-PZHC5GCD.js → chunk-L5ET7FYQ.js} +3 -3
- package/dist/{chunk-PZHC5GCD.js.map → chunk-L5ET7FYQ.js.map} +1 -1
- package/dist/{chunk-B63IFHXR.cjs → chunk-LFFVD5ZR.cjs} +41 -41
- package/dist/{chunk-B63IFHXR.cjs.map → chunk-LFFVD5ZR.cjs.map} +1 -1
- package/dist/chunk-LL5D5T5W.cjs +157 -0
- package/dist/chunk-LL5D5T5W.cjs.map +1 -0
- package/dist/{chunk-GUUWKPTK.cjs → chunk-LLE25NRD.cjs} +7 -7
- package/dist/{chunk-GUUWKPTK.cjs.map → chunk-LLE25NRD.cjs.map} +1 -1
- package/dist/chunk-LLHMAHG4.cjs +886 -0
- package/dist/chunk-LLHMAHG4.cjs.map +1 -0
- package/dist/{chunk-ZHX4KEM7.cjs → chunk-M2RPZS7J.cjs} +10 -10
- package/dist/{chunk-ZHX4KEM7.cjs.map → chunk-M2RPZS7J.cjs.map} +1 -1
- package/dist/chunk-MNURF4RF.cjs +85 -0
- package/dist/chunk-MNURF4RF.cjs.map +1 -0
- package/dist/chunk-QOHTVDHU.js +144 -0
- package/dist/chunk-QOHTVDHU.js.map +1 -0
- package/dist/{chunk-7VLCN3JB.cjs → chunk-QXKVUJLI.cjs} +113 -112
- package/dist/chunk-QXKVUJLI.cjs.map +1 -0
- package/dist/{chunk-GNPGGLAE.cjs → chunk-QYDUCWD2.cjs} +4 -4
- package/dist/{chunk-GNPGGLAE.cjs.map → chunk-QYDUCWD2.cjs.map} +1 -1
- package/dist/{chunk-TE5ZA4VX.js → chunk-QZYGZVUI.js} +45 -41
- package/dist/chunk-QZYGZVUI.js.map +1 -0
- package/dist/{chunk-YLINFV7Z.cjs → chunk-SAMJLDGG.cjs} +114 -110
- package/dist/chunk-SAMJLDGG.cjs.map +1 -0
- package/dist/{chunk-DOVMTPKE.cjs → chunk-SE422RES.cjs} +27 -27
- package/dist/{chunk-DOVMTPKE.cjs.map → chunk-SE422RES.cjs.map} +1 -1
- package/dist/{chunk-NWYCOFEZ.cjs → chunk-UCHW2MGP.cjs} +332 -433
- package/dist/chunk-UCHW2MGP.cjs.map +1 -0
- package/dist/{chunk-XFY73JWD.cjs → chunk-UDS5DZNY.cjs} +498 -1098
- package/dist/chunk-UDS5DZNY.cjs.map +1 -0
- package/dist/{chunk-KFLXWVUJ.js → chunk-UUIBACKJ.js} +14 -3
- package/dist/chunk-UUIBACKJ.js.map +1 -0
- package/dist/{chunk-VDYA2HMS.js → chunk-VWEFXG73.js} +3 -3
- package/dist/{chunk-VDYA2HMS.js.map → chunk-VWEFXG73.js.map} +1 -1
- package/dist/{chunk-G32AO634.js → chunk-W66YCXWT.js} +464 -1048
- package/dist/chunk-W66YCXWT.js.map +1 -0
- package/dist/{chunk-E6YZRKMM.js → chunk-XMEYZYGE.js} +6 -6
- package/dist/{chunk-E6YZRKMM.js.map → chunk-XMEYZYGE.js.map} +1 -1
- package/dist/{chunk-G3CSQLLT.js → chunk-Y5UC3IXF.js} +461 -6
- package/dist/chunk-Y5UC3IXF.js.map +1 -0
- package/dist/{chunk-SDHV2MWU.js → chunk-YGX4PMG6.js} +5 -5
- package/dist/{chunk-SDHV2MWU.js.map → chunk-YGX4PMG6.js.map} +1 -1
- package/dist/{chunk-KCLZHYPU.cjs → chunk-YIX3BEBR.cjs} +86 -85
- package/dist/chunk-YIX3BEBR.cjs.map +1 -0
- package/dist/{chunk-X6RDQ5NB.cjs → chunk-YX3H63VV.cjs} +8 -2
- package/dist/chunk-YX3H63VV.cjs.map +1 -0
- package/dist/chunk-YYLMXERH.js +211 -0
- package/dist/chunk-YYLMXERH.js.map +1 -0
- package/dist/{chunk-6G5CQ6JX.js → chunk-ZE7E46IZ.js} +5 -5
- package/dist/{chunk-6G5CQ6JX.js.map → chunk-ZE7E46IZ.js.map} +1 -1
- package/dist/{chunk-Z2PPIVOO.js → chunk-ZVME6OSV.js} +5 -5
- package/dist/{chunk-Z2PPIVOO.js.map → chunk-ZVME6OSV.js.map} +1 -1
- package/dist/core/index.cjs +15 -3
- package/dist/core/index.d.cts +4 -3
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.js +2 -2
- package/dist/{ddl-Dx3Z0_WC.d.ts → ddl-BLEzHw6j.d.ts} +3 -3
- package/dist/{ddl-J6sDyABg.d.cts → ddl-KnCdF_le.d.cts} +3 -3
- package/dist/{define-graph-CzEvA_8F.d.cts → define-graph-Cv3CFwKm.d.cts} +1 -1
- package/dist/{define-graph-DRo9xpYN.d.ts → define-graph-DQnj3fNH.d.ts} +1 -1
- package/dist/graph-merge/index.cjs +40 -43
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +15 -9
- package/dist/graph-merge/index.d.ts +15 -9
- package/dist/graph-merge/index.js +19 -22
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/index.cjs +143 -119
- package/dist/index.d.cts +12 -10
- package/dist/index.d.ts +12 -10
- package/dist/index.js +23 -23
- package/dist/indexes/index.cjs +12 -14
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/indexes/index.js +5 -7
- package/dist/interchange/index.cjs +29 -30
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +6 -5
- package/dist/interchange/index.d.ts +6 -5
- package/dist/interchange/index.js +10 -11
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-CASfhmzV.d.ts → manager-DjE6Mhag.d.ts} +2 -2
- package/dist/{manager-nCEJiYBb.d.cts → manager-mqee5MVB.d.cts} +2 -2
- package/dist/{postgres-DMgIKQU-.d.cts → postgres-Bm4DyFQU.d.cts} +100 -49
- package/dist/{postgres-Cl1ZAN1G.d.ts → postgres-DtaVALOZ.d.ts} +100 -49
- package/dist/profiler/index.d.cts +8 -7
- package/dist/profiler/index.d.ts +8 -7
- package/dist/provenance/index.cjs +20 -20
- package/dist/provenance/index.d.cts +6 -5
- package/dist/provenance/index.d.ts +6 -5
- package/dist/provenance/index.js +7 -7
- package/dist/schema/index.cjs +26 -28
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +5 -5
- package/dist/schema/index.d.ts +5 -5
- package/dist/schema/index.js +7 -9
- package/dist/schema/index.js.map +1 -1
- package/dist/{temporal-DqtOEo_B.d.ts → searchable-BxlJQVFw.d.cts} +3 -58
- package/dist/{temporal-BC_NQV5Y.d.cts → searchable-ChJ29MCd.d.ts} +3 -58
- package/dist/{sqlite-BDkW39aa.d.cts → sqlite-DT6tTHOG.d.cts} +124 -97
- package/dist/{sqlite-CYfhvESj.d.ts → sqlite-m9Izphk_.d.ts} +124 -97
- package/dist/{store-view-BoHqdHjB.d.cts → store-view-C-buB8Q8.d.cts} +46 -31
- package/dist/{store-view-Ctq-3OHy.d.ts → store-view-CagdeyNn.d.ts} +46 -31
- package/dist/temporal-CyFsSPe8.d.ts +73 -0
- package/dist/temporal-Dn_JADWY.d.cts +73 -0
- package/dist/{types-CUevi_D1.d.ts → types-CYdXzZef.d.ts} +1 -1
- package/dist/{types-COq3-vMC.d.cts → types-CqSfMRW3.d.cts} +1 -1
- package/dist/{where-C92TXCzT.d.cts → where-C3-HRgUq.d.cts} +1 -1
- package/dist/{where-BdE_cYtx.d.ts → where-sQL4u5h-.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-2SL7OGPR.cjs.map +0 -1
- package/dist/chunk-6XDBRDZE.js.map +0 -1
- package/dist/chunk-7VLCN3JB.cjs.map +0 -1
- package/dist/chunk-A2FGSWMQ.js.map +0 -1
- package/dist/chunk-DDCIXXOO.js +0 -9
- package/dist/chunk-DDCIXXOO.js.map +0 -1
- package/dist/chunk-DDCYVIVV.cjs +0 -44
- package/dist/chunk-DDCYVIVV.cjs.map +0 -1
- package/dist/chunk-EOJFGECD.cjs +0 -284
- package/dist/chunk-EOJFGECD.cjs.map +0 -1
- package/dist/chunk-FMNUSGZ4.cjs +0 -12
- package/dist/chunk-G32AO634.js.map +0 -1
- package/dist/chunk-G3CSQLLT.js.map +0 -1
- package/dist/chunk-I6FX7AAG.js +0 -39
- package/dist/chunk-I6FX7AAG.js.map +0 -1
- package/dist/chunk-J6IJARLG.js +0 -94
- package/dist/chunk-J6IJARLG.js.map +0 -1
- package/dist/chunk-KCLZHYPU.cjs.map +0 -1
- package/dist/chunk-KFLXWVUJ.js.map +0 -1
- package/dist/chunk-MTNEGGM2.js +0 -273
- package/dist/chunk-MTNEGGM2.js.map +0 -1
- package/dist/chunk-NU23DUSJ.cjs.map +0 -1
- package/dist/chunk-NWYCOFEZ.cjs.map +0 -1
- package/dist/chunk-O5H62ZWJ.cjs.map +0 -1
- package/dist/chunk-RQPRCEIO.js.map +0 -1
- package/dist/chunk-SVUKGWSN.cjs +0 -102
- package/dist/chunk-SVUKGWSN.cjs.map +0 -1
- package/dist/chunk-TE5ZA4VX.js.map +0 -1
- package/dist/chunk-UH2USOMG.cjs +0 -627
- package/dist/chunk-UH2USOMG.cjs.map +0 -1
- package/dist/chunk-UPXDVI3T.js.map +0 -1
- package/dist/chunk-X6RDQ5NB.cjs.map +0 -1
- package/dist/chunk-XFY73JWD.cjs.map +0 -1
- package/dist/chunk-Y7M44XEK.js +0 -462
- package/dist/chunk-Y7M44XEK.js.map +0 -1
- package/dist/chunk-YJDSPA5E.js.map +0 -1
- package/dist/chunk-YLINFV7Z.cjs.map +0 -1
- package/dist/chunk-Z5QHVL5U.cjs +0 -12
- package/dist/chunk-Z5QHVL5U.cjs.map +0 -1
- package/dist/chunk-ZKZAIX42.cjs +0 -479
- package/dist/chunk-ZKZAIX42.cjs.map +0 -1
- package/dist/{index-CrFL_ENI.d.cts → types-C5pZeKTl.d.cts} +1 -1
- package/dist/{index-Bq7vSPHy.d.ts → types-D8szWDUo.d.ts} +1 -1
|
@@ -0,0 +1 @@
|
|
|
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":["nodes","edges","recordedNodes","recordedEdges","recordedClock","uniques","schemaVersions","fulltext","DEFAULT_TABLE_NAMES","text","integer","primaryKey","index","uniqueIndex","sql","tables","getSqliteTableConfig","getPgTableConfig"],"mappings":"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","file":"chunk-5J4VNCUD.js","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 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 uniques: 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 uniques: \"typegraph_node_uniques\",\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 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 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 uniques,\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 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 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 uniques: 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 uniques: \"typegraph_node_uniques\",\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 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 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 uniques,\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 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 return `CREATE TABLE IF NOT EXISTS \"${config.name}\" (\\n ${columnDefs.join(\",\\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 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"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYX3H63VV_cjs = require('./chunk-YX3H63VV.cjs');
|
|
4
|
+
|
|
5
|
+
// src/query/dialect/vector/pagination.ts
|
|
6
|
+
function vectorPageClause(limit, offset) {
|
|
7
|
+
return offset === void 0 || offset === 0 ? chunkYX3H63VV_cjs.sql`LIMIT ${limit}` : chunkYX3H63VV_cjs.sql`LIMIT ${limit} OFFSET ${offset}`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
exports.vectorPageClause = vectorPageClause;
|
|
11
|
+
//# sourceMappingURL=chunk-5YBDB7UG.cjs.map
|
|
12
|
+
//# sourceMappingURL=chunk-5YBDB7UG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query/dialect/vector/pagination.ts"],"names":["sql"],"mappings":";;;;;AAcO,SAAS,gBAAA,CAAiB,OAAe,MAAA,EAA8B;AAC5E,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,CAAA,GACtCA,qBAAA,CAAA,MAAA,EAAY,KAAK,CAAA,CAAA,GACjBA,qBAAA,CAAA,MAAA,EAAY,KAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA;AACxC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/query/dialect/vector/pagination.ts"],"names":["sql"],"mappings":";;;;;AAcO,SAAS,gBAAA,CAAiB,OAAe,MAAA,EAA8B;AAC5E,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,CAAA,GACtCA,qBAAA,CAAA,MAAA,EAAY,KAAK,CAAA,CAAA,GACjBA,qBAAA,CAAA,MAAA,EAAY,KAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA;AACxC","file":"chunk-5YBDB7UG.cjs","sourcesContent":["/**\n * Shared vector-search pagination clause.\n *\n * Every vector strategy pages its ordered relevance scan the same way: emit a\n * bare `LIMIT` for the first page (`offset` unset or `0`), and `LIMIT … OFFSET`\n * only when a non-zero offset must discard the leading rows. The three engines'\n * `buildSearch` methods each repeated this ternary verbatim; it lives here once\n * so the emitted clause can never drift between dialects.\n *\n * `limit` and `offset` ride as bound parameters (never interpolated), so the\n * clause — string and bound values alike — is identical across engines.\n */\nimport { sql, type SqlFragment } from \"../../sql-fragment\";\n\nexport function vectorPageClause(limit: number, offset?: number): SqlFragment {\n return offset === undefined || offset === 0 ?\n sql`LIMIT ${limit}`\n : sql`LIMIT ${limit} OFFSET ${offset}`;\n}\n"]}
|
|
@@ -307,6 +307,10 @@ function renderSqlInline(fragment, dialect) {
|
|
|
307
307
|
return parts.join("");
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
310
|
+
// src/query/dialect/like-escape.ts
|
|
311
|
+
var LIKE_ESCAPE_CHARACTER = "\\";
|
|
312
|
+
var likeEscapeClause = sql`ESCAPE '\\'`;
|
|
313
|
+
|
|
314
|
+
export { LIKE_ESCAPE_CHARACTER, Placeholder, annIndexScanTypes, asCompiledRowsSql, asCompiledSelectSql, asCompiledStatementSql, asCompiledTemporaryStatementSql, bindSqlValue, getSqlDialectProfile, inlineSqlStringLiteral, isRawExecutable, isSqlFragment, isSqlPlaceholder, likeEscapeClause, markAnnIndexScan, markForceCustomPlan, renderPostgres, renderSql, renderSqlInline, renderSqlite, shouldForceCustomPlan, sql, throwUnsupportedSqlChunk, typeGraphGlobalSymbol };
|
|
315
|
+
//# sourceMappingURL=chunk-6N7QBIWN.js.map
|
|
316
|
+
//# sourceMappingURL=chunk-6N7QBIWN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/global-symbol.ts","../src/query/dialect/profile.ts","../src/query/sql-intent.ts","../src/query/sql-fragment.ts","../src/query/dialect/like-escape.ts"],"names":[],"mappings":"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","file":"chunk-6N7QBIWN.js","sourcesContent":["type TypeGraphGlobalSymbolName =\n | \"sql-fragment\"\n | \"sql-placeholder\"\n | \"sql-intent-registry\"\n | \"internal-temporary-writes-v1\"\n | \"external-recorded-read-source-v1\"\n | \"sql-schema-v1\"\n | \"store-runtime-v1\"\n | \"typegraph-recorded-read-source-v1\"\n | \"transaction-runtime-v1\";\n\n/** Returns a process-wide symbol shared across ESM/CJS package instances. */\nexport function typeGraphGlobalSymbol<TSymbol extends symbol>(\n name: TypeGraphGlobalSymbolName,\n): TSymbol {\n return Symbol.for(`@nicia-ai/typegraph/${name}`) as TSymbol;\n}\n","import { type SqlDialect } from \"./types\";\n\nexport type SqlDialectProfile = Readonly<{\n bindValue: (value: unknown) => unknown;\n booleanLiteralString: (value: boolean) => string;\n placeholder: (index: number) => string;\n}>;\n\nconst SQL_DIALECT_PROFILES = {\n postgres: {\n bindValue: (value: unknown) => value,\n booleanLiteralString: (value: boolean) => (value ? \"TRUE\" : \"FALSE\"),\n placeholder: (index: number) => `$${index}`,\n },\n sqlite: {\n bindValue: (value: unknown) =>\n typeof value === \"boolean\" ?\n value ? 1\n : 0\n : value,\n booleanLiteralString: (value: boolean) => (value ? \"1\" : \"0\"),\n placeholder: () => \"?\",\n },\n} satisfies Record<SqlDialect, SqlDialectProfile>;\n\nconst SQL_STRING_LITERAL_RENDERERS = {\n postgres: (value: string) => {\n if (value.includes(\"\\\\\")) {\n return `E'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n }\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n sqlite: (value: string) => `'${value.replaceAll(\"'\", \"''\")}'`,\n} satisfies Record<SqlDialect, (value: string) => string>;\n\n/** Returns the primitive rendering and binding rules for a SQL dialect. */\nexport function getSqlDialectProfile(dialect: SqlDialect): SqlDialectProfile {\n return SQL_DIALECT_PROFILES[dialect];\n}\n\n/** Maps a JavaScript value to the representation expected by a SQL driver. */\nexport function bindSqlValue(value: unknown, dialect: SqlDialect): unknown {\n if (value instanceof Date) return value.toISOString();\n return getSqlDialectProfile(dialect).bindValue(value);\n}\n\n/** Renders one SQL string literal using the dialect's escaping rules. */\nexport function inlineSqlStringLiteral(\n value: string,\n dialect: SqlDialect,\n): string {\n return SQL_STRING_LITERAL_RENDERERS[dialect](value);\n}\n","import { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport { type SqlFragment } from \"./sql-fragment\";\n\ndeclare const SqlIntentBrand: unique symbol;\n\nexport type SqlIntent = \"rows\" | \"statement\" | \"temporary-statement\";\n\nexport type IntentSql<I extends SqlIntent> = SqlFragment &\n Readonly<{ [SqlIntentBrand]: I }>;\n\nexport type CompiledRowsSql = IntentSql<\"rows\">;\nexport type CompiledSelectSql = CompiledRowsSql;\nexport type CompiledStatementSql = IntentSql<\"statement\">;\nexport type CompiledTemporaryStatementSql = IntentSql<\"temporary-statement\">;\n\nexport function asCompiledRowsSql(query: SqlFragment): CompiledRowsSql {\n return query as CompiledRowsSql;\n}\n\nexport function asCompiledSelectSql(query: SqlFragment): CompiledSelectSql {\n return asCompiledRowsSql(query);\n}\n\nexport function asCompiledStatementSql(\n query: SqlFragment,\n): CompiledStatementSql {\n return query as CompiledStatementSql;\n}\n\n/**\n * Marks an internal statement that may write only connection-local temporary\n * state. This is intentionally separate from the public raw-statement intent:\n * history-enabled stores block arbitrary raw writes but iterative graph\n * operations still need to manage ephemeral working tables.\n */\nexport function asCompiledTemporaryStatementSql(\n query: SqlFragment,\n): CompiledTemporaryStatementSql {\n return query as CompiledTemporaryStatementSql;\n}\n\n/**\n * Statements whose good plan depends on the bound parameter values —\n * e.g. an id-array membership filter where the array cardinality varies\n * per call. PostgreSQL's prepared-statement machinery switches to a\n * generic (parameter-blind) plan after five executions, which for these\n * statements is catastrophically wrong (measured 21ms -> 310ms on the\n * subgraph edge fetch). Marked statements are executed unnamed so every\n * call is planned against the actual parameters; the re-parse cost is\n * ~1ms, the generic-plan cliff it avoids is 10-300ms.\n */\ntype SqlIntentRegistry = Readonly<{\n annIndexScanQueries: WeakMap<SqlFragment, readonly string[]>;\n forceCustomPlanQueries: WeakSet<SqlFragment>;\n}>;\n\nconst SQL_INTENT_REGISTRY: unique symbol = typeGraphGlobalSymbol(\n \"sql-intent-registry\",\n);\nconst globalWithSqlIntentRegistry = globalThis as typeof globalThis &\n Readonly<{\n [SQL_INTENT_REGISTRY]?: SqlIntentRegistry;\n }>;\nconst sqlIntentRegistry =\n globalWithSqlIntentRegistry[SQL_INTENT_REGISTRY] ??\n (() => {\n const registry: SqlIntentRegistry = {\n annIndexScanQueries: new WeakMap(),\n forceCustomPlanQueries: new WeakSet(),\n };\n Object.defineProperty(globalWithSqlIntentRegistry, SQL_INTENT_REGISTRY, {\n configurable: false,\n enumerable: false,\n value: registry,\n writable: false,\n });\n return registry;\n })();\n\nexport function markForceCustomPlan(query: SqlFragment): void {\n sqlIntentRegistry.forceCustomPlanQueries.add(query);\n}\n\nexport function shouldForceCustomPlan(query: SqlFragment): boolean {\n return sqlIntentRegistry.forceCustomPlanQueries.has(query);\n}\n\n/**\n * Statements whose plan includes an engine ANN index scan (the inline\n * `.similarTo(..., { approximate: true })` branch). The PostgreSQL\n * backend wraps their execution with the same pgvector GUC overrides\n * the search facade applies (`hnsw.iterative_scan = strict_order` /\n * `ivfflat.iterative_scan = relaxed_order` on pgvector >= 0.8), so a\n * filtered approximate query keeps scanning past the default ef_search\n * frontier instead of starving. Carries the slot index types so the\n * backend knows which GUCs apply. Backends without GUC semantics\n * ignore the brand.\n */\nexport function markAnnIndexScan(\n query: SqlFragment,\n indexTypes: readonly string[],\n): void {\n sqlIntentRegistry.annIndexScanQueries.set(query, indexTypes);\n}\n\nexport function annIndexScanTypes(\n query: SqlFragment,\n): readonly string[] | undefined {\n return sqlIntentRegistry.annIndexScanQueries.get(query);\n}\n\n/** @internal Copies execution semantics when immutable fragments are composed. */\nexport function copySqlIntents(\n target: SqlFragment,\n sources: readonly SqlFragment[],\n): void {\n if (sources.some((source) => shouldForceCustomPlan(source))) {\n markForceCustomPlan(target);\n }\n\n const indexTypes = new Set<string>();\n for (const source of sources) {\n for (const indexType of annIndexScanTypes(source) ?? []) {\n indexTypes.add(indexType);\n }\n }\n if (indexTypes.size > 0) markAnnIndexScan(target, [...indexTypes]);\n}\n\n/**\n * Whether a compiled statement can be run as raw text (`executeRaw`) without\n * losing execution semantics. Both brands above ride on the SQL *object* and\n * are honored only by `backend.execute`: the force-custom-plan flag makes\n * PostgreSQL re-plan against the actual parameters (opposed to reusing a\n * cached statement), and the ANN-scan brand drives the pgvector iterative-scan\n * GUC wrapper. A statement carrying either must not be flattened to text and\n * cached — callers fall back to `backend.execute`. Keeping this predicate\n * beside the brands means a future brand updates one place, not every caller.\n */\nexport function isRawExecutable(query: SqlFragment): boolean {\n return (\n !shouldForceCustomPlan(query) && annIndexScanTypes(query) === undefined\n );\n}\n","import { ConfigurationError } from \"../errors\";\nimport { typeGraphGlobalSymbol } from \"../utils/global-symbol\";\nimport {\n bindSqlValue,\n getSqlDialectProfile,\n inlineSqlStringLiteral,\n} from \"./dialect/profile\";\nimport { type SqlDialect } from \"./dialect/types\";\nimport { copySqlIntents } from \"./sql-intent\";\n\n/** Nominal identity shared by every package entrypoint. */\nconst SQL_FRAGMENT_BRAND: unique symbol = typeGraphGlobalSymbol(\"sql-fragment\");\nconst SQL_PLACEHOLDER_BRAND: unique symbol =\n typeGraphGlobalSymbol(\"sql-placeholder\");\n\nexport type SqlTextChunk = Readonly<{\n kind: \"text\";\n value: string;\n}>;\n\nexport type SqlParameterChunk = Readonly<{\n kind: \"parameter\";\n value: unknown;\n}>;\n\nexport type SqlIdentifierChunk = Readonly<{\n kind: \"identifier\";\n value: string;\n}>;\n\nexport type SqlPlaceholderChunk = Readonly<{\n kind: \"placeholder\";\n value: Placeholder;\n}>;\n\n/** One immutable unit in a database-independent SQL fragment. */\nexport type SqlChunk =\n SqlTextChunk | SqlParameterChunk | SqlIdentifierChunk | SqlPlaceholderChunk;\n\n/**\n * An immutable, database-independent SQL expression.\n *\n * Fragments contain syntax and bound values as separate nodes. A database\n * adapter renders the same fragment with its native placeholder convention at\n * the final execution boundary.\n */\nexport type SqlFragment = Readonly<{\n [SQL_FRAGMENT_BRAND]: true;\n append: (fragment: SqlFragment) => SqlFragment;\n chunks: readonly SqlChunk[];\n}>;\n\n/** A named value resolved when a prepared statement is executed. */\nexport class Placeholder {\n readonly [SQL_PLACEHOLDER_BRAND] = true as const;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\n Object.freeze(this);\n }\n}\n\nclass SqlFragmentValue implements SqlFragment {\n readonly [SQL_FRAGMENT_BRAND] = true as const;\n\n readonly chunks: readonly SqlChunk[];\n\n constructor(chunks: readonly SqlChunk[]) {\n this.chunks = Object.freeze([...chunks]);\n Object.freeze(this);\n }\n\n append(fragment: SqlFragment): SqlFragment {\n return createFragment(\n [...this.chunks, ...getChunks(fragment)],\n [this, fragment],\n );\n }\n}\n\nfunction createFragment(\n chunks: readonly SqlChunk[],\n intentSources: readonly SqlFragment[] = [],\n): SqlFragment {\n const fragment = new SqlFragmentValue(chunks);\n copySqlIntents(fragment, intentSources);\n return fragment;\n}\n\nfunction getChunks(fragment: SqlFragment): readonly SqlChunk[] {\n if (!isSqlFragment(fragment)) {\n throw new ConfigurationError(\n \"Expected a SQL fragment created by TypeGraph's sql helper\",\n );\n }\n return fragment.chunks;\n}\n\n/** Returns whether a value is a TypeGraph-owned SQL fragment. */\nexport function isSqlFragment(value: unknown): value is SqlFragment {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_FRAGMENT_BRAND in value &&\n value[SQL_FRAGMENT_BRAND] === true &&\n \"chunks\" in value &&\n Array.isArray(value.chunks) &&\n \"append\" in value &&\n typeof value.append === \"function\"\n );\n}\n\n/** Returns whether a value is a TypeGraph named SQL placeholder. */\nexport function isSqlPlaceholder(value: unknown): value is Placeholder {\n return (\n typeof value === \"object\" &&\n value !== null &&\n SQL_PLACEHOLDER_BRAND in value &&\n value[SQL_PLACEHOLDER_BRAND] === true &&\n \"name\" in value &&\n typeof value.name === \"string\"\n );\n}\n\n/** @internal Enforces exhaustive handling at every fragment boundary. */\nexport function throwUnsupportedSqlChunk(chunk: never): never {\n throw new ConfigurationError(\"Unsupported SQL fragment chunk\", { chunk });\n}\n\nfunction textNode(value: string): SqlTextChunk {\n return Object.freeze({ kind: \"text\", value });\n}\n\nfunction parameterNode(value: unknown): SqlParameterChunk {\n return Object.freeze({ kind: \"parameter\", value });\n}\n\nfunction identifierNode(value: string): SqlIdentifierChunk {\n return Object.freeze({ kind: \"identifier\", value });\n}\n\nfunction placeholderNode(value: Placeholder): SqlPlaceholderChunk {\n return Object.freeze({ kind: \"placeholder\", value });\n}\n\nfunction templateSql(\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [];\n\n for (const [index, text] of strings.entries()) {\n if (text.length > 0) chunks.push(textNode(text));\n\n if (index >= values.length) continue;\n const value = values[index];\n if (isSqlFragment(value)) {\n chunks.push(...getChunks(value));\n intentSources.push(value);\n } else if (isSqlPlaceholder(value)) {\n chunks.push(placeholderNode(value));\n } else {\n chunks.push(parameterNode(value));\n }\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction rawSql(value: string): SqlFragment {\n return createFragment(value.length === 0 ? [] : [textNode(value)]);\n}\n\nfunction identifierSql(value: string): SqlFragment {\n return createFragment([identifierNode(value)]);\n}\n\nfunction joinSql(\n fragments: readonly SqlFragment[],\n separator: SqlFragment = EMPTY_SQL,\n): SqlFragment {\n const chunks: SqlChunk[] = [];\n const intentSources: SqlFragment[] = [separator];\n\n for (const [index, fragment] of fragments.entries()) {\n if (index > 0) chunks.push(...getChunks(separator));\n chunks.push(...getChunks(fragment));\n intentSources.push(fragment);\n }\n\n return createFragment(chunks, intentSources);\n}\n\nfunction placeholderSql(name: string): SqlFragment {\n return createFragment([placeholderNode(new Placeholder(name))]);\n}\n\nconst EMPTY_SQL = createFragment([]);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport type SqlTag = Readonly<{\n empty: () => SqlFragment;\n identifier: (value: string) => SqlFragment;\n join: (\n fragments: readonly SqlFragment[],\n separator?: SqlFragment,\n ) => SqlFragment;\n placeholder: (name: string) => SqlFragment;\n raw: (value: string) => SqlFragment;\n}> &\n ((\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ) => SqlFragment);\n\n/** TypeGraph's database-independent SQL template and composition helpers. */\nexport const sql: SqlTag = Object.assign(templateSql, {\n empty: function empty(): SqlFragment {\n return EMPTY_SQL;\n },\n identifier: identifierSql,\n join: joinSql,\n placeholder: placeholderSql,\n raw: rawSql,\n});\n\n/** A rendered statement and its ordered bound parameters. */\nexport type RenderedSql = Readonly<{\n sql: string;\n params: readonly unknown[];\n}>;\n\nfunction quotedIdentifier(identifier: string): string {\n return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction resolvedPlaceholder(\n placeholder: Placeholder,\n bindings: Readonly<Record<string, unknown>> | undefined,\n dialect: SqlDialect,\n): unknown {\n if (bindings === undefined) return placeholder;\n\n if (!Object.hasOwn(bindings, placeholder.name)) {\n throw new ConfigurationError(\n `Missing binding for parameter \"${placeholder.name}\"`,\n { parameterName: placeholder.name },\n );\n }\n return bindSqlValue(bindings[placeholder.name], dialect);\n}\n\n/**\n * Renders a fragment for a database adapter.\n *\n * Named placeholders remain in `params` when `bindings` is omitted, allowing\n * a prepared template to resolve them later. Passing `bindings` resolves every\n * placeholder eagerly.\n */\nexport function renderSql(\n fragment: SqlFragment,\n dialect: SqlDialect,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n const parts: string[] = [];\n const params: unknown[] = [];\n const profile = getSqlDialectProfile(dialect);\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n params.push(bindSqlValue(node.value, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n case \"placeholder\": {\n params.push(resolvedPlaceholder(node.value, bindings, dialect));\n parts.push(profile.placeholder(params.length));\n break;\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return Object.freeze({\n sql: parts.join(\"\"),\n params: Object.freeze(params),\n });\n}\n\n/** Renders a fragment using SQLite's `?` placeholders. */\nexport function renderSqlite(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"sqlite\", bindings);\n}\n\n/** Renders a fragment using PostgreSQL's numbered placeholders. */\nexport function renderPostgres(\n fragment: SqlFragment,\n bindings?: Readonly<Record<string, unknown>>,\n): RenderedSql {\n return renderSql(fragment, \"postgres\", bindings);\n}\n\nfunction inlineLiteral(value: unknown, dialect: SqlDialect): string {\n if (value === undefined || value === null) return \"NULL\";\n if (typeof value === \"string\") return inlineSqlStringLiteral(value, dialect);\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new ConfigurationError(\"Cannot inline a non-finite SQL number\", {\n value,\n });\n }\n return String(value);\n }\n if (typeof value === \"bigint\") return String(value);\n if (typeof value === \"boolean\") {\n return getSqlDialectProfile(dialect).booleanLiteralString(value);\n }\n if (value instanceof Date) {\n return inlineSqlStringLiteral(value.toISOString(), dialect);\n }\n\n throw new ConfigurationError(\"Cannot inline this SQL parameter value\", {\n value,\n });\n}\n\n/**\n * Renders a fragment with safe scalar literals instead of bound parameters.\n *\n * This is intentionally limited to DDL paths whose drivers cannot bind values.\n * Application queries should always use {@link renderSql}.\n */\nexport function renderSqlInline(\n fragment: SqlFragment,\n dialect: SqlDialect,\n): string {\n const parts: string[] = [];\n\n for (const node of getChunks(fragment)) {\n switch (node.kind) {\n case \"text\": {\n parts.push(node.value);\n break;\n }\n case \"identifier\": {\n parts.push(quotedIdentifier(node.value));\n break;\n }\n case \"parameter\": {\n parts.push(inlineLiteral(node.value, dialect));\n break;\n }\n case \"placeholder\": {\n throw new ConfigurationError(\n `Cannot inline unresolved SQL placeholder \"${node.value.name}\"`,\n { parameterName: node.value.name },\n );\n }\n default: {\n throwUnsupportedSqlChunk(node);\n }\n }\n }\n\n return parts.join(\"\");\n}\n","/**\n * Shared LIKE-escape clause for the query compiler.\n *\n * The compiler builds `contains` / `startsWith` / `endsWith` patterns by\n * escaping the literal `%`, `_`, and `\\` in user input with a backslash (see\n * the pattern builders in `compiler/predicates.ts`). For that escaping to take\n * effect the emitted `LIKE` / `ILIKE` must declare backslash as its escape\n * character. PostgreSQL's default LIKE escape is already backslash, so this\n * clause is a no-op there; SQLite has *no* default escape character, so without\n * it an escaped `\\%` matches a literal backslash followed by any character —\n * silently diverging from Postgres. Emitting it on every compiled predicate\n * makes the two backends match by construction.\n */\nimport { sql, type SqlFragment } from \"../sql-fragment\";\n\n/**\n * The backslash escape character used by the JS pattern builder\n * (`compileStringPattern` in `compiler/predicates.ts`) to prefix the literal\n * `%`, `_`, and `\\` in user input. It must match the character declared by\n * {@link likeEscapeClause}: the builder prefixes wildcards with this character,\n * and the clause tells SQL to treat it as the escape. Both are backslash.\n */\nexport const LIKE_ESCAPE_CHARACTER = \"\\\\\";\n\n/**\n * `ESCAPE '\\'` clause appended to every compiled `LIKE` / `ILIKE` predicate,\n * declaring {@link LIKE_ESCAPE_CHARACTER} as the escape character. The single\n * backslash inside the quotes is a literal in both PostgreSQL (with\n * `standard_conforming_strings`, the default) and SQLite.\n */\nexport const likeEscapeClause: SqlFragment = sql`ESCAPE '\\\\'`;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sql } from './chunk-
|
|
1
|
+
import { sql } from './chunk-6N7QBIWN.js';
|
|
2
2
|
|
|
3
3
|
// src/query/dialect/vector/pagination.ts
|
|
4
4
|
function vectorPageClause(limit, offset) {
|
|
@@ -6,5 +6,5 @@ function vectorPageClause(limit, offset) {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export { vectorPageClause };
|
|
9
|
-
//# sourceMappingURL=chunk-
|
|
10
|
-
//# sourceMappingURL=chunk-
|
|
9
|
+
//# sourceMappingURL=chunk-6QP4QXBR.js.map
|
|
10
|
+
//# sourceMappingURL=chunk-6QP4QXBR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query/dialect/vector/pagination.ts"],"names":[],"mappings":";;;AAcO,SAAS,gBAAA,CAAiB,OAAe,MAAA,EAA8B;AAC5E,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,CAAA,GACtC,GAAA,CAAA,MAAA,EAAY,KAAK,CAAA,CAAA,GACjB,GAAA,CAAA,MAAA,EAAY,KAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA;AACxC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/query/dialect/vector/pagination.ts"],"names":[],"mappings":";;;AAcO,SAAS,gBAAA,CAAiB,OAAe,MAAA,EAA8B;AAC5E,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,CAAA,GACtC,GAAA,CAAA,MAAA,EAAY,KAAK,CAAA,CAAA,GACjB,GAAA,CAAA,MAAA,EAAY,KAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA;AACxC","file":"chunk-6QP4QXBR.js","sourcesContent":["/**\n * Shared vector-search pagination clause.\n *\n * Every vector strategy pages its ordered relevance scan the same way: emit a\n * bare `LIMIT` for the first page (`offset` unset or `0`), and `LIMIT … OFFSET`\n * only when a non-zero offset must discard the leading rows. The three engines'\n * `buildSearch` methods each repeated this ternary verbatim; it lives here once\n * so the emitted clause can never drift between dialects.\n *\n * `limit` and `offset` ride as bound parameters (never interpolated), so the\n * clause — string and bound values alike — is identical across engines.\n */\nimport { sql, type SqlFragment } from \"../../sql-fragment\";\n\nexport function vectorPageClause(limit: number, offset?: number): SqlFragment {\n return offset === undefined || offset === 0 ?\n sql`LIMIT ${limit}`\n : sql`LIMIT ${limit} OFFSET ${offset}`;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkQYDUCWD2_cjs = require('./chunk-QYDUCWD2.cjs');
|
|
4
4
|
var chunkSAFZ6JTI_cjs = require('./chunk-SAFZ6JTI.cjs');
|
|
5
5
|
|
|
6
6
|
// src/backend/row-mappers.ts
|
|
@@ -152,7 +152,7 @@ function createSchemaVersionRowMapper(config) {
|
|
|
152
152
|
graph_id: asString(row["graph_id"], "graph_id"),
|
|
153
153
|
version: asNumber(row["version"], "version"),
|
|
154
154
|
schema_hash: asString(row["schema_hash"], "schema_hash"),
|
|
155
|
-
schema_doc:
|
|
155
|
+
schema_doc: chunkQYDUCWD2_cjs.rowPropsToJsonText(config.normalizeJson(row["schema_doc"])),
|
|
156
156
|
created_at: requireTimestamp(
|
|
157
157
|
config.formatTimestamp(row["created_at"]),
|
|
158
158
|
"created_at"
|
|
@@ -171,5 +171,5 @@ exports.createSchemaVersionRowMapper = createSchemaVersionRowMapper;
|
|
|
171
171
|
exports.createUniqueRowMapper = createUniqueRowMapper;
|
|
172
172
|
exports.formatPostgresTimestamp = formatPostgresTimestamp;
|
|
173
173
|
exports.nowIso = nowIso;
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
175
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-7UTUKH4E.cjs.map
|
|
175
|
+
//# sourceMappingURL=chunk-7UTUKH4E.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/row-mappers.ts"],"names":["DatabaseOperationError","rowPropsToJsonText"],"mappings":"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","file":"chunk-E6TXEISH.cjs","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction requireTimestamp(value: string | undefined, field: string): string {\n if (value === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return value;\n}\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Formats a PostgreSQL timestamp value to ISO string.\n * PostgreSQL returns Date objects or timestamp strings that need normalization.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. The `formatTimestamp` and `normalizeJson` functions handle\n * the differences between how SQLite and PostgreSQL return timestamps\n * and JSON columns.\n */\ntype DialectRowMapperConfig = Readonly<{\n formatTimestamp: (value: unknown) => string | undefined;\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config.\n * Timestamps are stored as ISO strings; JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n formatTimestamp: (value) => {\n if (value === null || value === undefined) return;\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected timestamp to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config.\n * Timestamps may be Date objects or PG-format strings; JSONB is parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n formatTimestamp: formatPostgresTimestamp,\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: nullToUndefined(config.formatTimestamp(row[\"valid_from\"])),\n valid_to: nullToUndefined(config.formatTimestamp(row[\"valid_to\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n updated_at: requireTimestamp(\n config.formatTimestamp(row[\"updated_at\"]),\n \"updated_at\",\n ),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n valid_from: nullToUndefined(config.formatTimestamp(row[\"valid_from\"])),\n valid_to: nullToUndefined(config.formatTimestamp(row[\"valid_to\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n updated_at: requireTimestamp(\n config.formatTimestamp(row[\"updated_at\"]),\n \"updated_at\",\n ),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createUniqueRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/row-mappers.ts"],"names":["DatabaseOperationError","rowPropsToJsonText"],"mappings":"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","file":"chunk-7UTUKH4E.cjs","sourcesContent":["/**\n * Shared database row-mapping utilities.\n */\n\nimport { DatabaseOperationError } from \"../errors\";\nimport {\n type EdgeRow,\n type NodeRow,\n rowPropsToJsonText,\n type SchemaVersionRow,\n type UniqueRow,\n} from \"./types\";\n\nfunction requireTimestamp(value: string | undefined, field: string): string {\n if (value === undefined) {\n throw new DatabaseOperationError(`Expected non-null ${field} timestamp`, {\n operation: \"select\",\n entity: \"row\",\n });\n }\n return value;\n}\n\nfunction asString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nfunction asNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\") {\n throw new DatabaseOperationError(\n `Expected ${field} to be number, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Formats a PostgreSQL timestamp value to ISO string.\n * PostgreSQL returns Date objects or timestamp strings that need normalization.\n */\nexport function formatPostgresTimestamp(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"string\") {\n if (value.includes(\"T\")) return value;\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) return date.toISOString();\n return value;\n }\n return undefined;\n}\n\n/**\n * Coerce a fulltext relevance score to `number` at the backend\n * boundary. Postgres returns `numeric` as a string to preserve\n * precision; a custom `FulltextStrategy` on either dialect could\n * likewise yield a string. Shared so both backends enforce the same\n * `FulltextSearchResult.score: number` contract and reject garbage\n * loudly instead of propagating `NaN`.\n */\nexport function coerceNumericScore(value: number | string): number {\n if (typeof value === \"number\") return value;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) {\n throw new TypeError(\n `Backend returned non-numeric fulltext score: ${JSON.stringify(value)}`,\n );\n }\n return parsed;\n}\n\n/**\n * Normalizes a JSON column that may be returned as a parsed object (JSONB)\n * or string. PostgreSQL drivers hand jsonb back already parsed — keep the\n * object instead of re-stringifying it, so the read path pays zero JSON\n * work per row (consumers normalize via rowPropsToObject /\n * rowPropsToJsonText at the point of use). SQLite text passes through.\n */\nfunction normalizeJsonColumn(value: unknown): string | Record<string, unknown> {\n if (typeof value === \"string\") return value;\n if (value !== null && typeof value === \"object\") {\n return value as Record<string, unknown>;\n }\n return JSON.stringify(value ?? {});\n}\n\n/**\n * Dialect-specific configuration for row mappers.\n *\n * Row mapper factories accept this config to produce dialect-appropriate\n * mappers. The `formatTimestamp` and `normalizeJson` functions handle\n * the differences between how SQLite and PostgreSQL return timestamps\n * and JSON columns.\n */\ntype DialectRowMapperConfig = Readonly<{\n formatTimestamp: (value: unknown) => string | undefined;\n normalizeJson: (value: unknown) => string | Record<string, unknown>;\n}>;\n\n/**\n * SQLite row mapper config.\n * Timestamps are stored as ISO strings; JSON is stored as TEXT.\n */\nexport const SQLITE_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n formatTimestamp: (value) => {\n if (value === null || value === undefined) return;\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected timestamp to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n normalizeJson: (value) => {\n if (typeof value !== \"string\") {\n throw new DatabaseOperationError(\n `Expected JSON column to be string, got ${typeof value}`,\n { operation: \"select\", entity: \"row\" },\n );\n }\n return value;\n },\n};\n\n/**\n * PostgreSQL row mapper config.\n * Timestamps may be Date objects or PG-format strings; JSONB is parsed objects.\n */\nexport const POSTGRES_ROW_MAPPER_CONFIG: DialectRowMapperConfig = {\n formatTimestamp: formatPostgresTimestamp,\n normalizeJson: normalizeJsonColumn,\n};\n\n// Trust boundary: Drizzle raw SQL returns Record<string, unknown> rows.\n// The field access patterns below are intentional unsafe casts at the\n// database driver boundary where we know the column shapes.\n\nexport function createNodeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => NodeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n id: asString(row[\"id\"], \"id\"),\n props: config.normalizeJson(row[\"props\"]),\n version: asNumber(row[\"version\"], \"version\"),\n valid_from: nullToUndefined(config.formatTimestamp(row[\"valid_from\"])),\n valid_to: nullToUndefined(config.formatTimestamp(row[\"valid_to\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n updated_at: requireTimestamp(\n config.formatTimestamp(row[\"updated_at\"]),\n \"updated_at\",\n ),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createEdgeRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => EdgeRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n id: asString(row[\"id\"], \"id\"),\n kind: asString(row[\"kind\"], \"kind\"),\n from_kind: asString(row[\"from_kind\"], \"from_kind\"),\n from_id: asString(row[\"from_id\"], \"from_id\"),\n to_kind: asString(row[\"to_kind\"], \"to_kind\"),\n to_id: asString(row[\"to_id\"], \"to_id\"),\n props: config.normalizeJson(row[\"props\"]),\n valid_from: nullToUndefined(config.formatTimestamp(row[\"valid_from\"])),\n valid_to: nullToUndefined(config.formatTimestamp(row[\"valid_to\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n updated_at: requireTimestamp(\n config.formatTimestamp(row[\"updated_at\"]),\n \"updated_at\",\n ),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createUniqueRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => UniqueRow {\n return (row) => ({\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n node_kind: asString(row[\"node_kind\"], \"node_kind\"),\n constraint_name: asString(row[\"constraint_name\"], \"constraint_name\"),\n key: asString(row[\"key\"], \"key\"),\n node_id: asString(row[\"node_id\"], \"node_id\"),\n concrete_kind: asString(row[\"concrete_kind\"], \"concrete_kind\"),\n deleted_at: nullToUndefined(config.formatTimestamp(row[\"deleted_at\"])),\n });\n}\n\nexport function createSchemaVersionRowMapper(\n config: DialectRowMapperConfig,\n): (row: Record<string, unknown>) => SchemaVersionRow {\n return (row) => {\n const isActiveValue = row[\"is_active\"];\n const isActive =\n isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: asString(row[\"graph_id\"], \"graph_id\"),\n version: asNumber(row[\"version\"], \"version\"),\n schema_hash: asString(row[\"schema_hash\"], \"schema_hash\"),\n schema_doc: rowPropsToJsonText(config.normalizeJson(row[\"schema_doc\"])),\n created_at: requireTimestamp(\n config.formatTimestamp(row[\"created_at\"]),\n \"created_at\",\n ),\n is_active: isActive,\n };\n };\n}\n"]}
|