@nicia-ai/typegraph 0.14.0 → 0.15.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.
Files changed (63) hide show
  1. package/dist/backend/postgres/index.cjs +32 -26
  2. package/dist/backend/postgres/index.cjs.map +1 -1
  3. package/dist/backend/postgres/index.d.cts +5 -5
  4. package/dist/backend/postgres/index.d.ts +5 -5
  5. package/dist/backend/postgres/index.js +14 -8
  6. package/dist/backend/postgres/index.js.map +1 -1
  7. package/dist/backend/sqlite/index.cjs +12 -12
  8. package/dist/backend/sqlite/index.d.cts +5 -5
  9. package/dist/backend/sqlite/index.d.ts +5 -5
  10. package/dist/backend/sqlite/index.js +2 -2
  11. package/dist/backend/sqlite/local.cjs +5 -5
  12. package/dist/backend/sqlite/local.cjs.map +1 -1
  13. package/dist/backend/sqlite/local.d.cts +3 -3
  14. package/dist/backend/sqlite/local.d.ts +3 -3
  15. package/dist/backend/sqlite/local.js +5 -5
  16. package/dist/backend/sqlite/local.js.map +1 -1
  17. package/dist/{chunk-QFZ5QB2J.cjs → chunk-3HQLOKS5.cjs} +25 -3
  18. package/dist/chunk-3HQLOKS5.cjs.map +1 -0
  19. package/dist/{chunk-OEKH5PWL.cjs → chunk-56RQFK7U.cjs} +22 -15
  20. package/dist/chunk-56RQFK7U.cjs.map +1 -0
  21. package/dist/{chunk-KE2BL3JZ.cjs → chunk-CRMN2NOM.cjs} +179 -179
  22. package/dist/chunk-CRMN2NOM.cjs.map +1 -0
  23. package/dist/{chunk-BNIBR5U2.js → chunk-HWWF3FOP.js} +91 -91
  24. package/dist/chunk-HWWF3FOP.js.map +1 -0
  25. package/dist/{chunk-KLOSTZDQ.js → chunk-L4ON6RJF.js} +25 -3
  26. package/dist/chunk-L4ON6RJF.js.map +1 -0
  27. package/dist/{chunk-RVUEBUBH.js → chunk-XZBAGJJH.js} +15 -8
  28. package/dist/chunk-XZBAGJJH.js.map +1 -0
  29. package/dist/{ddl-BJg93HDN.d.cts → ddl-BBo2EcFc.d.cts} +2 -2
  30. package/dist/{ddl-CsfWcl_B.d.ts → ddl-D4jlcOH_.d.ts} +2 -2
  31. package/dist/index.cjs +67 -73
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +6 -6
  34. package/dist/index.d.ts +6 -6
  35. package/dist/index.js +36 -42
  36. package/dist/index.js.map +1 -1
  37. package/dist/indexes/index.d.cts +2 -2
  38. package/dist/indexes/index.d.ts +2 -2
  39. package/dist/interchange/index.d.cts +3 -3
  40. package/dist/interchange/index.d.ts +3 -3
  41. package/dist/{manager-oh2mTMvy.d.cts → manager-Bj1UEnhE.d.cts} +2 -2
  42. package/dist/{manager-qRSdnKEO.d.ts → manager-Chhrq1vl.d.ts} +2 -2
  43. package/dist/profiler/index.d.cts +3 -3
  44. package/dist/profiler/index.d.ts +3 -3
  45. package/dist/schema/index.cjs +20 -20
  46. package/dist/schema/index.d.cts +4 -4
  47. package/dist/schema/index.d.ts +4 -4
  48. package/dist/schema/index.js +2 -2
  49. package/dist/{sqlite-DVca_IIy.d.cts → sqlite-Blq-AhmK.d.ts} +1 -1
  50. package/dist/{sqlite-H01wIXvB.d.ts → sqlite-DE-6NWtC.d.cts} +1 -1
  51. package/dist/{store-BJPIoe8u.d.cts → store-BNercm8P.d.cts} +51 -16
  52. package/dist/{store-B9ItxA-Q.d.ts → store-CD_0yf2s.d.ts} +51 -16
  53. package/dist/{types-Ckfwgv9l.d.cts → types-B3mmOMJV.d.cts} +8 -0
  54. package/dist/{types-C8Ra3ROE.d.cts → types-CZd2PEOc.d.cts} +8 -2
  55. package/dist/{types-CC8eB0PB.d.ts → types-Ceb01czq.d.ts} +8 -2
  56. package/dist/{types-5t_MIcvv.d.ts → types-ThB4cFLp.d.ts} +8 -0
  57. package/package.json +1 -1
  58. package/dist/chunk-BNIBR5U2.js.map +0 -1
  59. package/dist/chunk-KE2BL3JZ.cjs.map +0 -1
  60. package/dist/chunk-KLOSTZDQ.js.map +0 -1
  61. package/dist/chunk-OEKH5PWL.cjs.map +0 -1
  62. package/dist/chunk-QFZ5QB2J.cjs.map +0 -1
  63. package/dist/chunk-RVUEBUBH.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkKE2BL3JZ_cjs = require('../../chunk-KE2BL3JZ.cjs');
3
+ var chunkCRMN2NOM_cjs = require('../../chunk-CRMN2NOM.cjs');
4
4
  require('../../chunk-44SXEVF4.cjs');
5
5
  require('../../chunk-LELLOHJK.cjs');
6
6
  require('../../chunk-MME3H4ZF.cjs');
@@ -31,7 +31,7 @@ function createPgPreparedStatement(pgClient, sqlText) {
31
31
  function createPostgresExecutionAdapter(db) {
32
32
  const pgClient = resolvePgClient(db);
33
33
  function compile(query) {
34
- return chunkKE2BL3JZ_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
34
+ return chunkCRMN2NOM_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
35
35
  }
36
36
  if (pgClient === void 0) {
37
37
  return {
@@ -86,10 +86,10 @@ var POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(
86
86
  1,
87
87
  POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT
88
88
  );
89
- var toNodeRow = chunkKE2BL3JZ_cjs.createNodeRowMapper(chunkKE2BL3JZ_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
- var toEdgeRow = chunkKE2BL3JZ_cjs.createEdgeRowMapper(chunkKE2BL3JZ_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
- var toUniqueRow = chunkKE2BL3JZ_cjs.createUniqueRowMapper(chunkKE2BL3JZ_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
- var toSchemaVersionRow = chunkKE2BL3JZ_cjs.createSchemaVersionRowMapper(chunkKE2BL3JZ_cjs.POSTGRES_ROW_MAPPER_CONFIG);
89
+ var toNodeRow = chunkCRMN2NOM_cjs.createNodeRowMapper(chunkCRMN2NOM_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
+ var toEdgeRow = chunkCRMN2NOM_cjs.createEdgeRowMapper(chunkCRMN2NOM_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
+ var toUniqueRow = chunkCRMN2NOM_cjs.createUniqueRowMapper(chunkCRMN2NOM_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
+ var toSchemaVersionRow = chunkCRMN2NOM_cjs.createSchemaVersionRowMapper(chunkCRMN2NOM_cjs.POSTGRES_ROW_MAPPER_CONFIG);
93
93
  function toEmbeddingRow(row) {
94
94
  let embedding;
95
95
  if (typeof row.embedding === "string") {
@@ -107,12 +107,12 @@ function toEmbeddingRow(row) {
107
107
  field_path: row.field_path,
108
108
  embedding,
109
109
  dimensions: row.dimensions,
110
- created_at: chunkKE2BL3JZ_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
- updated_at: chunkKE2BL3JZ_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
110
+ created_at: chunkCRMN2NOM_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
+ updated_at: chunkCRMN2NOM_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
112
112
  };
113
113
  }
114
114
  var POSTGRES_VECTOR_CAPABILITIES = {
115
- ...chunkKE2BL3JZ_cjs.POSTGRES_CAPABILITIES,
115
+ ...chunkCRMN2NOM_cjs.POSTGRES_CAPABILITIES,
116
116
  vector: {
117
117
  supported: true,
118
118
  metrics: ["cosine", "l2", "inner_product"],
@@ -122,14 +122,14 @@ var POSTGRES_VECTOR_CAPABILITIES = {
122
122
  }
123
123
  };
124
124
  function createPostgresBackend(db, options = {}) {
125
- const tables2 = options.tables ?? chunkKE2BL3JZ_cjs.tables2;
125
+ const tables2 = options.tables ?? chunkCRMN2NOM_cjs.tables;
126
126
  const executionAdapter = createPostgresExecutionAdapter(db);
127
127
  const tableNames = {
128
128
  nodes: drizzleOrm.getTableName(tables2.nodes),
129
129
  edges: drizzleOrm.getTableName(tables2.edges),
130
130
  embeddings: drizzleOrm.getTableName(tables2.embeddings)
131
131
  };
132
- const operationStrategy = chunkKE2BL3JZ_cjs.createPostgresOperationStrategy(tables2);
132
+ const operationStrategy = chunkCRMN2NOM_cjs.createPostgresOperationStrategy(tables2);
133
133
  const operations = createPostgresOperationBackend({
134
134
  db,
135
135
  executionAdapter,
@@ -138,6 +138,12 @@ function createPostgresBackend(db, options = {}) {
138
138
  });
139
139
  const backend = {
140
140
  ...operations,
141
+ async bootstrapTables() {
142
+ const statements = chunkCRMN2NOM_cjs.generatePostgresDDL(tables2);
143
+ for (const statement of statements) {
144
+ await db.execute(drizzleOrm.sql.raw(statement));
145
+ }
146
+ },
141
147
  async setActiveSchema(graphId, version) {
142
148
  await backend.transaction(async (txBackend) => {
143
149
  await txBackend.setActiveSchema(graphId, version);
@@ -174,7 +180,7 @@ function createPostgresOperationBackend(options) {
174
180
  async function execRun(query) {
175
181
  await db.execute(query);
176
182
  }
177
- const commonBackend = chunkKE2BL3JZ_cjs.createCommonOperationBackend({
183
+ const commonBackend = chunkCRMN2NOM_cjs.createCommonOperationBackend({
178
184
  batchConfig: {
179
185
  checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,
180
186
  edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,
@@ -187,7 +193,7 @@ function createPostgresOperationBackend(options) {
187
193
  execGet,
188
194
  execRun
189
195
  },
190
- nowIso: chunkKE2BL3JZ_cjs.nowIso,
196
+ nowIso: chunkCRMN2NOM_cjs.nowIso,
191
197
  operationStrategy,
192
198
  rowMappers: {
193
199
  toEdgeRow,
@@ -210,7 +216,7 @@ function createPostgresOperationBackend(options) {
210
216
  tableNames,
211
217
  // === Embedding Operations ===
212
218
  async upsertEmbedding(params) {
213
- const timestamp = chunkKE2BL3JZ_cjs.nowIso();
219
+ const timestamp = chunkCRMN2NOM_cjs.nowIso();
214
220
  const query = operationStrategy.buildUpsertEmbedding(params, timestamp);
215
221
  await execRun(query);
216
222
  },
@@ -249,7 +255,7 @@ function createPostgresOperationBackend(options) {
249
255
  ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
250
256
  ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
251
257
  };
252
- const result = await chunkKE2BL3JZ_cjs.createPostgresVectorIndex(db, indexOptions);
258
+ const result = await chunkCRMN2NOM_cjs.createPostgresVectorIndex(db, indexOptions);
253
259
  if (!result.success) {
254
260
  throw new Error(
255
261
  result.message ?? "Failed to create PostgreSQL vector index"
@@ -259,13 +265,13 @@ function createPostgresOperationBackend(options) {
259
265
  async dropVectorIndex(params) {
260
266
  const metrics = POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ["cosine"];
261
267
  for (const metric of metrics) {
262
- const indexName = chunkKE2BL3JZ_cjs.generateVectorIndexName(
268
+ const indexName = chunkCRMN2NOM_cjs.generateVectorIndexName(
263
269
  params.graphId,
264
270
  params.nodeKind,
265
271
  params.fieldPath,
266
272
  metric
267
273
  );
268
- const result = await chunkKE2BL3JZ_cjs.dropPostgresVectorIndex(db, indexName);
274
+ const result = await chunkCRMN2NOM_cjs.dropPostgresVectorIndex(db, indexName);
269
275
  if (!result.success) {
270
276
  throw new Error(
271
277
  result.message ?? "Failed to drop PostgreSQL vector index"
@@ -295,39 +301,39 @@ function createTransactionBackend(options) {
295
301
 
296
302
  Object.defineProperty(exports, "createPostgresTables", {
297
303
  enumerable: true,
298
- get: function () { return chunkKE2BL3JZ_cjs.createPostgresTables; }
304
+ get: function () { return chunkCRMN2NOM_cjs.createPostgresTables; }
299
305
  });
300
306
  Object.defineProperty(exports, "edges", {
301
307
  enumerable: true,
302
- get: function () { return chunkKE2BL3JZ_cjs.edges2; }
308
+ get: function () { return chunkCRMN2NOM_cjs.edges; }
303
309
  });
304
310
  Object.defineProperty(exports, "embeddings", {
305
311
  enumerable: true,
306
- get: function () { return chunkKE2BL3JZ_cjs.embeddings2; }
312
+ get: function () { return chunkCRMN2NOM_cjs.embeddings; }
307
313
  });
308
314
  Object.defineProperty(exports, "generatePostgresDDL", {
309
315
  enumerable: true,
310
- get: function () { return chunkKE2BL3JZ_cjs.generatePostgresDDL; }
316
+ get: function () { return chunkCRMN2NOM_cjs.generatePostgresDDL; }
311
317
  });
312
318
  Object.defineProperty(exports, "generatePostgresMigrationSQL", {
313
319
  enumerable: true,
314
- get: function () { return chunkKE2BL3JZ_cjs.generatePostgresMigrationSQL; }
320
+ get: function () { return chunkCRMN2NOM_cjs.generatePostgresMigrationSQL; }
315
321
  });
316
322
  Object.defineProperty(exports, "nodes", {
317
323
  enumerable: true,
318
- get: function () { return chunkKE2BL3JZ_cjs.nodes2; }
324
+ get: function () { return chunkCRMN2NOM_cjs.nodes; }
319
325
  });
320
326
  Object.defineProperty(exports, "schemaVersions", {
321
327
  enumerable: true,
322
- get: function () { return chunkKE2BL3JZ_cjs.schemaVersions2; }
328
+ get: function () { return chunkCRMN2NOM_cjs.schemaVersions; }
323
329
  });
324
330
  Object.defineProperty(exports, "tables", {
325
331
  enumerable: true,
326
- get: function () { return chunkKE2BL3JZ_cjs.tables2; }
332
+ get: function () { return chunkCRMN2NOM_cjs.tables; }
327
333
  });
328
334
  Object.defineProperty(exports, "uniques", {
329
335
  enumerable: true,
330
- get: function () { return chunkKE2BL3JZ_cjs.uniques2; }
336
+ get: function () { return chunkCRMN2NOM_cjs.uniques; }
331
337
  });
332
338
  exports.createPostgresBackend = createPostgresBackend;
333
339
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/drizzle/execution/postgres-execution.ts","../../../src/backend/drizzle/postgres.ts"],"names":["compileQueryWithDialect","createNodeRowMapper","POSTGRES_ROW_MAPPER_CONFIG","createEdgeRowMapper","createUniqueRowMapper","createSchemaVersionRowMapper","formatPostgresTimestamp","POSTGRES_CAPABILITIES","tables","getTableName","createPostgresOperationStrategy","options","createCommonOperationBackend","nowIso","createPostgresVectorIndex","generateVectorIndexName","dropPostgresVectorIndex"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type SQL } from \"drizzle-orm\";\nimport { type PgDatabase, type PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\ntype PgQueryResult = Readonly<{\n rows: readonly unknown[];\n}>;\n\ntype PgQueryClient = Readonly<{\n query: (sqlText: string, params: readonly unknown[]) => Promise<PgQueryResult>;\n}>;\n\ntype PgClientCarrier = Readonly<{\n $client?: PgQueryClient;\n}>;\n\nexport type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;\n\nexport type PostgresExecutionAdapter = SqlExecutionAdapter;\n\nfunction resolvePgClient(db: AnyPgDatabase): PgQueryClient | undefined {\n const databaseWithClient = db as PgClientCarrier;\n const pgClient = databaseWithClient.$client;\n if (pgClient?.query === undefined) {\n return undefined;\n }\n return pgClient;\n}\n\nasync function executeDrizzleQuery<TRow>(\n db: AnyPgDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: readonly TRow[];\n }>;\n return result.rows;\n}\n\nfunction createPgPreparedStatement(\n pgClient: PgQueryClient,\n sqlText: string,\n): PreparedSqlStatement {\n return {\n async execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const result = await pgClient.query(sqlText, params);\n return result.rows as readonly TRow[];\n },\n };\n}\n\nexport function createPostgresExecutionAdapter(\n db: AnyPgDatabase,\n): PostgresExecutionAdapter {\n const pgClient = resolvePgClient(db);\n\n function compile(query: SQL): CompiledSqlQuery {\n return compileQueryWithDialect(db, query, \"PostgreSQL\");\n }\n\n if (pgClient === undefined) {\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n };\n }\n\n const pgQueryClient = pgClient;\n\n async function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const result = await pgQueryClient.query(\n compiledQuery.sql,\n compiledQuery.params,\n );\n return result.rows as readonly TRow[];\n }\n\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPgPreparedStatement(pgQueryClient, sqlText);\n },\n };\n}\n","/**\n * PostgreSQL backend adapter for TypeGraph.\n *\n * Works with any Drizzle PostgreSQL database instance:\n * - node-postgres (pg)\n * - PGlite\n * - Neon\n * - Vercel Postgres\n * - Supabase\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend, tables } from \"@nicia-ai/typegraph/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL } from \"drizzle-orm\";\n\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DropVectorIndexParams,\n type EmbeddingRow,\n type GraphBackend,\n POSTGRES_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport {\n type AnyPgDatabase,\n createPostgresExecutionAdapter,\n type PostgresExecutionAdapter,\n} from \"./execution/postgres-execution\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createPostgresOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n formatPostgresTimestamp,\n nowIso,\n POSTGRES_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\nimport {\n createPostgresVectorIndex,\n dropPostgresVectorIndex,\n generateVectorIndexName,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createPostgresTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n}>;\n\nconst POSTGRES_MAX_BIND_PARAMETERS = 65_535;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst POSTGRES_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 2,\n);\nconst POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\n\n/**\n * Converts a database row to EmbeddingRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEmbeddingRow(row: Record<string, unknown>): EmbeddingRow {\n // pgvector returns embedding as a string '[1,2,3]' or as parsed array\n let embedding: readonly number[];\n if (typeof row.embedding === \"string\") {\n const content = row.embedding.slice(1, -1);\n embedding = content === \"\" ? [] : content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n } else if (Array.isArray(row.embedding)) {\n embedding = row.embedding as number[];\n } else {\n embedding = [];\n }\n\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n node_id: row.node_id as string,\n field_path: row.field_path as string,\n embedding,\n dimensions: row.dimensions as number,\n created_at: formatPostgresTimestamp(row.created_at) ?? \"\",\n updated_at: formatPostgresTimestamp(row.updated_at) ?? \"\",\n };\n}\n\n/**\n * PostgreSQL capabilities with vector search support.\n * Extends base POSTGRES_CAPABILITIES with vector operations.\n */\nconst POSTGRES_VECTOR_CAPABILITIES: BackendCapabilities = {\n ...POSTGRES_CAPABILITIES,\n vector: {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"] as const,\n maxDimensions: 16_000, // pgvector limit\n },\n};\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n db: AnyPgDatabase,\n options: PostgresBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const executionAdapter = createPostgresExecutionAdapter(db);\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n const operationStrategy = createPostgresOperationStrategy(tables);\n const operations = createPostgresOperationBackend({\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await backend.transaction(async (txBackend) => {\n await txBackend.setActiveSchema(graphId, version);\n });\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n const txConfig = options?.isolationLevel\n ? {\n isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n | \"read uncommitted\"\n | \"read committed\"\n | \"repeatable read\"\n | \"serializable\",\n }\n : undefined;\n\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n db: tx as AnyPgDatabase,\n operationStrategy,\n tableNames,\n });\n return fn(txBackend);\n }, txConfig);\n },\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\ntype CreatePostgresOperationBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\ntype CreatePostgresTransactionBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter?: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\nfunction createPostgresOperationBackend(\n options: CreatePostgresOperationBackendOptions,\n): TransactionBackend {\n const { db, executionAdapter, operationStrategy, tableNames } = options;\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows;\n }\n\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows[0];\n }\n\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: POSTGRES_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: POSTGRES_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n async executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return executeCompiled<T>({ params, sql: sqlText });\n },\n };\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n dialect: \"postgres\",\n tableNames,\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = operationStrategy.buildUpsertEmbedding(params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n\n async getEmbedding(\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ): Promise<EmbeddingRow | undefined> {\n const query = operationStrategy.buildGetEmbedding(\n graphId,\n nodeKind,\n nodeId,\n fieldPath,\n );\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEmbeddingRow(row) : undefined;\n },\n\n async vectorSearch(\n params: VectorSearchParams,\n ): Promise<readonly VectorSearchResult[]> {\n const query = operationStrategy.buildVectorSearch(params);\n const rows = await execAll<{ node_id: string; score: number }>(query);\n return rows.map((row) => ({\n nodeId: row.node_id,\n score: row.score,\n }));\n },\n\n async createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n embeddingsTableName: tableNames.embeddings,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = await createPostgresVectorIndex(db, indexOptions);\n\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to create PostgreSQL vector index\",\n );\n }\n },\n\n async dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const metrics =\n POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ([\"cosine\"] as const);\n\n for (const metric of metrics) {\n const indexName = generateVectorIndexName(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n metric,\n );\n const result = await dropPostgresVectorIndex(db, indexName);\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to drop PostgreSQL vector index\",\n );\n }\n }\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return executionAdapter.execute<T>(query);\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nfunction createTransactionBackend(\n options: CreatePostgresTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ?? createPostgresExecutionAdapter(options.db);\n\n return createPostgresOperationBackend({\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n });\n}\n\n// Re-export schema utilities\nexport type { PostgresTableNames,PostgresTables } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
1
+ {"version":3,"sources":["../../../src/backend/drizzle/execution/postgres-execution.ts","../../../src/backend/drizzle/postgres.ts"],"names":["compileQueryWithDialect","createNodeRowMapper","POSTGRES_ROW_MAPPER_CONFIG","createEdgeRowMapper","createUniqueRowMapper","createSchemaVersionRowMapper","formatPostgresTimestamp","POSTGRES_CAPABILITIES","tables","getTableName","createPostgresOperationStrategy","generatePostgresDDL","sql","options","createCommonOperationBackend","nowIso","createPostgresVectorIndex","generateVectorIndexName","dropPostgresVectorIndex"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type SQL } from \"drizzle-orm\";\nimport { type PgDatabase, type PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\ntype PgQueryResult = Readonly<{\n rows: readonly unknown[];\n}>;\n\ntype PgQueryClient = Readonly<{\n query: (sqlText: string, params: readonly unknown[]) => Promise<PgQueryResult>;\n}>;\n\ntype PgClientCarrier = Readonly<{\n $client?: PgQueryClient;\n}>;\n\nexport type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;\n\nexport type PostgresExecutionAdapter = SqlExecutionAdapter;\n\nfunction resolvePgClient(db: AnyPgDatabase): PgQueryClient | undefined {\n const databaseWithClient = db as PgClientCarrier;\n const pgClient = databaseWithClient.$client;\n if (pgClient?.query === undefined) {\n return undefined;\n }\n return pgClient;\n}\n\nasync function executeDrizzleQuery<TRow>(\n db: AnyPgDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: readonly TRow[];\n }>;\n return result.rows;\n}\n\nfunction createPgPreparedStatement(\n pgClient: PgQueryClient,\n sqlText: string,\n): PreparedSqlStatement {\n return {\n async execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const result = await pgClient.query(sqlText, params);\n return result.rows as readonly TRow[];\n },\n };\n}\n\nexport function createPostgresExecutionAdapter(\n db: AnyPgDatabase,\n): PostgresExecutionAdapter {\n const pgClient = resolvePgClient(db);\n\n function compile(query: SQL): CompiledSqlQuery {\n return compileQueryWithDialect(db, query, \"PostgreSQL\");\n }\n\n if (pgClient === undefined) {\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n };\n }\n\n const pgQueryClient = pgClient;\n\n async function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const result = await pgQueryClient.query(\n compiledQuery.sql,\n compiledQuery.params,\n );\n return result.rows as readonly TRow[];\n }\n\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPgPreparedStatement(pgQueryClient, sqlText);\n },\n };\n}\n","/**\n * PostgreSQL backend adapter for TypeGraph.\n *\n * Works with any Drizzle PostgreSQL database instance:\n * - node-postgres (pg)\n * - PGlite\n * - Neon\n * - Vercel Postgres\n * - Supabase\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend, tables } from \"@nicia-ai/typegraph/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DropVectorIndexParams,\n type EmbeddingRow,\n type GraphBackend,\n POSTGRES_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport { generatePostgresDDL } from \"./ddl\";\nimport {\n type AnyPgDatabase,\n createPostgresExecutionAdapter,\n type PostgresExecutionAdapter,\n} from \"./execution/postgres-execution\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createPostgresOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n formatPostgresTimestamp,\n nowIso,\n POSTGRES_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\nimport {\n createPostgresVectorIndex,\n dropPostgresVectorIndex,\n generateVectorIndexName,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createPostgresTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n}>;\n\nconst POSTGRES_MAX_BIND_PARAMETERS = 65_535;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst POSTGRES_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 2,\n);\nconst POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\n\n/**\n * Converts a database row to EmbeddingRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEmbeddingRow(row: Record<string, unknown>): EmbeddingRow {\n // pgvector returns embedding as a string '[1,2,3]' or as parsed array\n let embedding: readonly number[];\n if (typeof row.embedding === \"string\") {\n const content = row.embedding.slice(1, -1);\n embedding = content === \"\" ? [] : content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n } else if (Array.isArray(row.embedding)) {\n embedding = row.embedding as number[];\n } else {\n embedding = [];\n }\n\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n node_id: row.node_id as string,\n field_path: row.field_path as string,\n embedding,\n dimensions: row.dimensions as number,\n created_at: formatPostgresTimestamp(row.created_at) ?? \"\",\n updated_at: formatPostgresTimestamp(row.updated_at) ?? \"\",\n };\n}\n\n/**\n * PostgreSQL capabilities with vector search support.\n * Extends base POSTGRES_CAPABILITIES with vector operations.\n */\nconst POSTGRES_VECTOR_CAPABILITIES: BackendCapabilities = {\n ...POSTGRES_CAPABILITIES,\n vector: {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"] as const,\n maxDimensions: 16_000, // pgvector limit\n },\n};\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n db: AnyPgDatabase,\n options: PostgresBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const executionAdapter = createPostgresExecutionAdapter(db);\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n const operationStrategy = createPostgresOperationStrategy(tables);\n const operations = createPostgresOperationBackend({\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async bootstrapTables(): Promise<void> {\n const statements = generatePostgresDDL(tables);\n for (const statement of statements) {\n await db.execute(sql.raw(statement));\n }\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await backend.transaction(async (txBackend) => {\n await txBackend.setActiveSchema(graphId, version);\n });\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n const txConfig = options?.isolationLevel\n ? {\n isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n | \"read uncommitted\"\n | \"read committed\"\n | \"repeatable read\"\n | \"serializable\",\n }\n : undefined;\n\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n db: tx as AnyPgDatabase,\n operationStrategy,\n tableNames,\n });\n return fn(txBackend);\n }, txConfig);\n },\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\ntype CreatePostgresOperationBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\ntype CreatePostgresTransactionBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter?: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\nfunction createPostgresOperationBackend(\n options: CreatePostgresOperationBackendOptions,\n): TransactionBackend {\n const { db, executionAdapter, operationStrategy, tableNames } = options;\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows;\n }\n\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows[0];\n }\n\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: POSTGRES_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: POSTGRES_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n async executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return executeCompiled<T>({ params, sql: sqlText });\n },\n };\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n dialect: \"postgres\",\n tableNames,\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = operationStrategy.buildUpsertEmbedding(params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n\n async getEmbedding(\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ): Promise<EmbeddingRow | undefined> {\n const query = operationStrategy.buildGetEmbedding(\n graphId,\n nodeKind,\n nodeId,\n fieldPath,\n );\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEmbeddingRow(row) : undefined;\n },\n\n async vectorSearch(\n params: VectorSearchParams,\n ): Promise<readonly VectorSearchResult[]> {\n const query = operationStrategy.buildVectorSearch(params);\n const rows = await execAll<{ node_id: string; score: number }>(query);\n return rows.map((row) => ({\n nodeId: row.node_id,\n score: row.score,\n }));\n },\n\n async createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n embeddingsTableName: tableNames.embeddings,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = await createPostgresVectorIndex(db, indexOptions);\n\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to create PostgreSQL vector index\",\n );\n }\n },\n\n async dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const metrics =\n POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ([\"cosine\"] as const);\n\n for (const metric of metrics) {\n const indexName = generateVectorIndexName(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n metric,\n );\n const result = await dropPostgresVectorIndex(db, indexName);\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to drop PostgreSQL vector index\",\n );\n }\n }\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return executionAdapter.execute<T>(query);\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nfunction createTransactionBackend(\n options: CreatePostgresTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ?? createPostgresExecutionAdapter(options.db);\n\n return createPostgresOperationBackend({\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n });\n}\n\n// Re-export schema utilities\nexport type { PostgresTableNames,PostgresTables } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
@@ -1,13 +1,13 @@
1
- import { G as GraphBackend } from '../../types-Ckfwgv9l.cjs';
1
+ import { G as GraphBackend } from '../../types-B3mmOMJV.cjs';
2
2
  import { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
3
- import { P as PostgresTables } from '../../ddl-BJg93HDN.cjs';
4
- export { C as CreatePostgresTablesOptions, b as PostgresTableNames, c as createPostgresTables, e as edges, d as embeddings, f as generatePostgresDDL, h as generatePostgresMigrationSQL, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../ddl-BJg93HDN.cjs';
3
+ import { P as PostgresTables } from '../../ddl-BBo2EcFc.cjs';
4
+ export { C as CreatePostgresTablesOptions, b as PostgresTableNames, c as createPostgresTables, e as edges, d as embeddings, f as generatePostgresDDL, h as generatePostgresMigrationSQL, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../ddl-BBo2EcFc.cjs';
5
5
  import 'drizzle-orm';
6
6
  import '../../types-DMzKq0d5.cjs';
7
7
  import 'zod';
8
- import '../../types-C8Ra3ROE.cjs';
8
+ import '../../types-CZd2PEOc.cjs';
9
9
  import '../../ast-Bh2NDeaK.cjs';
10
- import '../../sqlite-DVca_IIy.cjs';
10
+ import '../../sqlite-DE-6NWtC.cjs';
11
11
  import 'drizzle-orm/sqlite-core';
12
12
 
13
13
  type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;
@@ -1,13 +1,13 @@
1
- import { G as GraphBackend } from '../../types-5t_MIcvv.js';
1
+ import { G as GraphBackend } from '../../types-ThB4cFLp.js';
2
2
  import { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
3
- import { P as PostgresTables } from '../../ddl-CsfWcl_B.js';
4
- export { C as CreatePostgresTablesOptions, b as PostgresTableNames, c as createPostgresTables, e as edges, d as embeddings, f as generatePostgresDDL, h as generatePostgresMigrationSQL, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../ddl-CsfWcl_B.js';
3
+ import { P as PostgresTables } from '../../ddl-D4jlcOH_.js';
4
+ export { C as CreatePostgresTablesOptions, b as PostgresTableNames, c as createPostgresTables, e as edges, d as embeddings, f as generatePostgresDDL, h as generatePostgresMigrationSQL, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../ddl-D4jlcOH_.js';
5
5
  import 'drizzle-orm';
6
6
  import '../../types-DMzKq0d5.js';
7
7
  import 'zod';
8
- import '../../types-CC8eB0PB.js';
8
+ import '../../types-Ceb01czq.js';
9
9
  import '../../ast-COMyNeMn.js';
10
- import '../../sqlite-H01wIXvB.js';
10
+ import '../../sqlite-Blq-AhmK.js';
11
11
  import 'drizzle-orm/sqlite-core';
12
12
 
13
13
  type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;
@@ -1,10 +1,10 @@
1
- import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables2, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-BNIBR5U2.js';
2
- export { createPostgresTables, edges2 as edges, embeddings2 as embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes2 as nodes, schemaVersions2 as schemaVersions, tables2 as tables, uniques2 as uniques } from '../../chunk-BNIBR5U2.js';
1
+ import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generatePostgresDDL, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-HWWF3FOP.js';
2
+ export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-HWWF3FOP.js';
3
3
  import '../../chunk-SJ2QMDXY.js';
4
4
  import '../../chunk-6GWJH6AR.js';
5
5
  import '../../chunk-GNIYZKBI.js';
6
6
  import '../../chunk-K7SQ3SWP.js';
7
- import { getTableName } from 'drizzle-orm';
7
+ import { getTableName, sql } from 'drizzle-orm';
8
8
 
9
9
  // src/backend/drizzle/execution/postgres-execution.ts
10
10
  function resolvePgClient(db) {
@@ -121,14 +121,14 @@ var POSTGRES_VECTOR_CAPABILITIES = {
121
121
  }
122
122
  };
123
123
  function createPostgresBackend(db, options = {}) {
124
- const tables2$1 = options.tables ?? tables2;
124
+ const tables2 = options.tables ?? tables;
125
125
  const executionAdapter = createPostgresExecutionAdapter(db);
126
126
  const tableNames = {
127
- nodes: getTableName(tables2$1.nodes),
128
- edges: getTableName(tables2$1.edges),
129
- embeddings: getTableName(tables2$1.embeddings)
127
+ nodes: getTableName(tables2.nodes),
128
+ edges: getTableName(tables2.edges),
129
+ embeddings: getTableName(tables2.embeddings)
130
130
  };
131
- const operationStrategy = createPostgresOperationStrategy(tables2$1);
131
+ const operationStrategy = createPostgresOperationStrategy(tables2);
132
132
  const operations = createPostgresOperationBackend({
133
133
  db,
134
134
  executionAdapter,
@@ -137,6 +137,12 @@ function createPostgresBackend(db, options = {}) {
137
137
  });
138
138
  const backend = {
139
139
  ...operations,
140
+ async bootstrapTables() {
141
+ const statements = generatePostgresDDL(tables2);
142
+ for (const statement of statements) {
143
+ await db.execute(sql.raw(statement));
144
+ }
145
+ },
140
146
  async setActiveSchema(graphId, version) {
141
147
  await backend.transaction(async (txBackend) => {
142
148
  await txBackend.setActiveSchema(graphId, version);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/drizzle/execution/postgres-execution.ts","../../../src/backend/drizzle/postgres.ts"],"names":["tables","options"],"mappings":"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","file":"index.js","sourcesContent":["import { type SQL } from \"drizzle-orm\";\nimport { type PgDatabase, type PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\ntype PgQueryResult = Readonly<{\n rows: readonly unknown[];\n}>;\n\ntype PgQueryClient = Readonly<{\n query: (sqlText: string, params: readonly unknown[]) => Promise<PgQueryResult>;\n}>;\n\ntype PgClientCarrier = Readonly<{\n $client?: PgQueryClient;\n}>;\n\nexport type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;\n\nexport type PostgresExecutionAdapter = SqlExecutionAdapter;\n\nfunction resolvePgClient(db: AnyPgDatabase): PgQueryClient | undefined {\n const databaseWithClient = db as PgClientCarrier;\n const pgClient = databaseWithClient.$client;\n if (pgClient?.query === undefined) {\n return undefined;\n }\n return pgClient;\n}\n\nasync function executeDrizzleQuery<TRow>(\n db: AnyPgDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: readonly TRow[];\n }>;\n return result.rows;\n}\n\nfunction createPgPreparedStatement(\n pgClient: PgQueryClient,\n sqlText: string,\n): PreparedSqlStatement {\n return {\n async execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const result = await pgClient.query(sqlText, params);\n return result.rows as readonly TRow[];\n },\n };\n}\n\nexport function createPostgresExecutionAdapter(\n db: AnyPgDatabase,\n): PostgresExecutionAdapter {\n const pgClient = resolvePgClient(db);\n\n function compile(query: SQL): CompiledSqlQuery {\n return compileQueryWithDialect(db, query, \"PostgreSQL\");\n }\n\n if (pgClient === undefined) {\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n };\n }\n\n const pgQueryClient = pgClient;\n\n async function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const result = await pgQueryClient.query(\n compiledQuery.sql,\n compiledQuery.params,\n );\n return result.rows as readonly TRow[];\n }\n\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPgPreparedStatement(pgQueryClient, sqlText);\n },\n };\n}\n","/**\n * PostgreSQL backend adapter for TypeGraph.\n *\n * Works with any Drizzle PostgreSQL database instance:\n * - node-postgres (pg)\n * - PGlite\n * - Neon\n * - Vercel Postgres\n * - Supabase\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend, tables } from \"@nicia-ai/typegraph/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL } from \"drizzle-orm\";\n\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DropVectorIndexParams,\n type EmbeddingRow,\n type GraphBackend,\n POSTGRES_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport {\n type AnyPgDatabase,\n createPostgresExecutionAdapter,\n type PostgresExecutionAdapter,\n} from \"./execution/postgres-execution\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createPostgresOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n formatPostgresTimestamp,\n nowIso,\n POSTGRES_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\nimport {\n createPostgresVectorIndex,\n dropPostgresVectorIndex,\n generateVectorIndexName,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createPostgresTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n}>;\n\nconst POSTGRES_MAX_BIND_PARAMETERS = 65_535;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst POSTGRES_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 2,\n);\nconst POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\n\n/**\n * Converts a database row to EmbeddingRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEmbeddingRow(row: Record<string, unknown>): EmbeddingRow {\n // pgvector returns embedding as a string '[1,2,3]' or as parsed array\n let embedding: readonly number[];\n if (typeof row.embedding === \"string\") {\n const content = row.embedding.slice(1, -1);\n embedding = content === \"\" ? [] : content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n } else if (Array.isArray(row.embedding)) {\n embedding = row.embedding as number[];\n } else {\n embedding = [];\n }\n\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n node_id: row.node_id as string,\n field_path: row.field_path as string,\n embedding,\n dimensions: row.dimensions as number,\n created_at: formatPostgresTimestamp(row.created_at) ?? \"\",\n updated_at: formatPostgresTimestamp(row.updated_at) ?? \"\",\n };\n}\n\n/**\n * PostgreSQL capabilities with vector search support.\n * Extends base POSTGRES_CAPABILITIES with vector operations.\n */\nconst POSTGRES_VECTOR_CAPABILITIES: BackendCapabilities = {\n ...POSTGRES_CAPABILITIES,\n vector: {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"] as const,\n maxDimensions: 16_000, // pgvector limit\n },\n};\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n db: AnyPgDatabase,\n options: PostgresBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const executionAdapter = createPostgresExecutionAdapter(db);\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n const operationStrategy = createPostgresOperationStrategy(tables);\n const operations = createPostgresOperationBackend({\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await backend.transaction(async (txBackend) => {\n await txBackend.setActiveSchema(graphId, version);\n });\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n const txConfig = options?.isolationLevel\n ? {\n isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n | \"read uncommitted\"\n | \"read committed\"\n | \"repeatable read\"\n | \"serializable\",\n }\n : undefined;\n\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n db: tx as AnyPgDatabase,\n operationStrategy,\n tableNames,\n });\n return fn(txBackend);\n }, txConfig);\n },\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\ntype CreatePostgresOperationBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\ntype CreatePostgresTransactionBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter?: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\nfunction createPostgresOperationBackend(\n options: CreatePostgresOperationBackendOptions,\n): TransactionBackend {\n const { db, executionAdapter, operationStrategy, tableNames } = options;\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows;\n }\n\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows[0];\n }\n\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: POSTGRES_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: POSTGRES_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n async executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return executeCompiled<T>({ params, sql: sqlText });\n },\n };\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n dialect: \"postgres\",\n tableNames,\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = operationStrategy.buildUpsertEmbedding(params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n\n async getEmbedding(\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ): Promise<EmbeddingRow | undefined> {\n const query = operationStrategy.buildGetEmbedding(\n graphId,\n nodeKind,\n nodeId,\n fieldPath,\n );\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEmbeddingRow(row) : undefined;\n },\n\n async vectorSearch(\n params: VectorSearchParams,\n ): Promise<readonly VectorSearchResult[]> {\n const query = operationStrategy.buildVectorSearch(params);\n const rows = await execAll<{ node_id: string; score: number }>(query);\n return rows.map((row) => ({\n nodeId: row.node_id,\n score: row.score,\n }));\n },\n\n async createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n embeddingsTableName: tableNames.embeddings,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = await createPostgresVectorIndex(db, indexOptions);\n\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to create PostgreSQL vector index\",\n );\n }\n },\n\n async dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const metrics =\n POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ([\"cosine\"] as const);\n\n for (const metric of metrics) {\n const indexName = generateVectorIndexName(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n metric,\n );\n const result = await dropPostgresVectorIndex(db, indexName);\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to drop PostgreSQL vector index\",\n );\n }\n }\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return executionAdapter.execute<T>(query);\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nfunction createTransactionBackend(\n options: CreatePostgresTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ?? createPostgresExecutionAdapter(options.db);\n\n return createPostgresOperationBackend({\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n });\n}\n\n// Re-export schema utilities\nexport type { PostgresTableNames,PostgresTables } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
1
+ {"version":3,"sources":["../../../src/backend/drizzle/execution/postgres-execution.ts","../../../src/backend/drizzle/postgres.ts"],"names":["tables","options"],"mappings":"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","file":"index.js","sourcesContent":["import { type SQL } from \"drizzle-orm\";\nimport { type PgDatabase, type PgQueryResultHKT } from \"drizzle-orm/pg-core\";\n\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\ntype PgQueryResult = Readonly<{\n rows: readonly unknown[];\n}>;\n\ntype PgQueryClient = Readonly<{\n query: (sqlText: string, params: readonly unknown[]) => Promise<PgQueryResult>;\n}>;\n\ntype PgClientCarrier = Readonly<{\n $client?: PgQueryClient;\n}>;\n\nexport type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;\n\nexport type PostgresExecutionAdapter = SqlExecutionAdapter;\n\nfunction resolvePgClient(db: AnyPgDatabase): PgQueryClient | undefined {\n const databaseWithClient = db as PgClientCarrier;\n const pgClient = databaseWithClient.$client;\n if (pgClient?.query === undefined) {\n return undefined;\n }\n return pgClient;\n}\n\nasync function executeDrizzleQuery<TRow>(\n db: AnyPgDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: readonly TRow[];\n }>;\n return result.rows;\n}\n\nfunction createPgPreparedStatement(\n pgClient: PgQueryClient,\n sqlText: string,\n): PreparedSqlStatement {\n return {\n async execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const result = await pgClient.query(sqlText, params);\n return result.rows as readonly TRow[];\n },\n };\n}\n\nexport function createPostgresExecutionAdapter(\n db: AnyPgDatabase,\n): PostgresExecutionAdapter {\n const pgClient = resolvePgClient(db);\n\n function compile(query: SQL): CompiledSqlQuery {\n return compileQueryWithDialect(db, query, \"PostgreSQL\");\n }\n\n if (pgClient === undefined) {\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n };\n }\n\n const pgQueryClient = pgClient;\n\n async function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const result = await pgQueryClient.query(\n compiledQuery.sql,\n compiledQuery.params,\n );\n return result.rows as readonly TRow[];\n }\n\n return {\n compile,\n async execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPgPreparedStatement(pgQueryClient, sqlText);\n },\n };\n}\n","/**\n * PostgreSQL backend adapter for TypeGraph.\n *\n * Works with any Drizzle PostgreSQL database instance:\n * - node-postgres (pg)\n * - PGlite\n * - Neon\n * - Vercel Postgres\n * - Supabase\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/node-postgres\";\n * import { Pool } from \"pg\";\n * import { createPostgresBackend, tables } from \"@nicia-ai/typegraph/postgres\";\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const db = drizzle(pool);\n * const backend = createPostgresBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DropVectorIndexParams,\n type EmbeddingRow,\n type GraphBackend,\n POSTGRES_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport { generatePostgresDDL } from \"./ddl\";\nimport {\n type AnyPgDatabase,\n createPostgresExecutionAdapter,\n type PostgresExecutionAdapter,\n} from \"./execution/postgres-execution\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createPostgresOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n formatPostgresTimestamp,\n nowIso,\n POSTGRES_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\nimport {\n createPostgresVectorIndex,\n dropPostgresVectorIndex,\n generateVectorIndexName,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a PostgreSQL backend.\n */\nexport type PostgresBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createPostgresTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: PostgresTables;\n}>;\n\nconst POSTGRES_MAX_BIND_PARAMETERS = 65_535;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst POSTGRES_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(POSTGRES_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst POSTGRES_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 2,\n);\nconst POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(POSTGRES_ROW_MAPPER_CONFIG);\n\n/**\n * Converts a database row to EmbeddingRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEmbeddingRow(row: Record<string, unknown>): EmbeddingRow {\n // pgvector returns embedding as a string '[1,2,3]' or as parsed array\n let embedding: readonly number[];\n if (typeof row.embedding === \"string\") {\n const content = row.embedding.slice(1, -1);\n embedding = content === \"\" ? [] : content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n } else if (Array.isArray(row.embedding)) {\n embedding = row.embedding as number[];\n } else {\n embedding = [];\n }\n\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n node_id: row.node_id as string,\n field_path: row.field_path as string,\n embedding,\n dimensions: row.dimensions as number,\n created_at: formatPostgresTimestamp(row.created_at) ?? \"\",\n updated_at: formatPostgresTimestamp(row.updated_at) ?? \"\",\n };\n}\n\n/**\n * PostgreSQL capabilities with vector search support.\n * Extends base POSTGRES_CAPABILITIES with vector operations.\n */\nconst POSTGRES_VECTOR_CAPABILITIES: BackendCapabilities = {\n ...POSTGRES_CAPABILITIES,\n vector: {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"] as const,\n maxDimensions: 16_000, // pgvector limit\n },\n};\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for PostgreSQL databases.\n *\n * Works with any Drizzle PostgreSQL instance regardless of the underlying driver.\n *\n * @param db - A Drizzle PostgreSQL database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createPostgresBackend(\n db: AnyPgDatabase,\n options: PostgresBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const executionAdapter = createPostgresExecutionAdapter(db);\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n const operationStrategy = createPostgresOperationStrategy(tables);\n const operations = createPostgresOperationBackend({\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async bootstrapTables(): Promise<void> {\n const statements = generatePostgresDDL(tables);\n for (const statement of statements) {\n await db.execute(sql.raw(statement));\n }\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await backend.transaction(async (txBackend) => {\n await txBackend.setActiveSchema(graphId, version);\n });\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n const txConfig = options?.isolationLevel\n ? {\n isolationLevel: options.isolationLevel.replace(\"_\", \" \") as\n | \"read uncommitted\"\n | \"read committed\"\n | \"repeatable read\"\n | \"serializable\",\n }\n : undefined;\n\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n db: tx as AnyPgDatabase,\n operationStrategy,\n tableNames,\n });\n return fn(txBackend);\n }, txConfig);\n },\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\ntype CreatePostgresOperationBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\ntype CreatePostgresTransactionBackendOptions = Readonly<{\n db: AnyPgDatabase;\n executionAdapter?: PostgresExecutionAdapter;\n operationStrategy: ReturnType<typeof createPostgresOperationStrategy>;\n tableNames: SqlTableNames;\n}>;\n\nfunction createPostgresOperationBackend(\n options: CreatePostgresOperationBackendOptions,\n): TransactionBackend {\n const { db, executionAdapter, operationStrategy, tableNames } = options;\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows;\n }\n\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = (await db.execute(query)) as Readonly<{\n rows: T[];\n }>;\n return result.rows[0];\n }\n\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: POSTGRES_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: POSTGRES_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n async executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return executeCompiled<T>({ params, sql: sqlText });\n },\n };\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n dialect: \"postgres\",\n tableNames,\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = operationStrategy.buildUpsertEmbedding(params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n\n async getEmbedding(\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ): Promise<EmbeddingRow | undefined> {\n const query = operationStrategy.buildGetEmbedding(\n graphId,\n nodeKind,\n nodeId,\n fieldPath,\n );\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEmbeddingRow(row) : undefined;\n },\n\n async vectorSearch(\n params: VectorSearchParams,\n ): Promise<readonly VectorSearchResult[]> {\n const query = operationStrategy.buildVectorSearch(params);\n const rows = await execAll<{ node_id: string; score: number }>(query);\n return rows.map((row) => ({\n nodeId: row.node_id,\n score: row.score,\n }));\n },\n\n async createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n embeddingsTableName: tableNames.embeddings,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = await createPostgresVectorIndex(db, indexOptions);\n\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to create PostgreSQL vector index\",\n );\n }\n },\n\n async dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const metrics =\n POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ([\"cosine\"] as const);\n\n for (const metric of metrics) {\n const indexName = generateVectorIndexName(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n metric,\n );\n const result = await dropPostgresVectorIndex(db, indexName);\n if (!result.success) {\n throw new Error(\n result.message ?? \"Failed to drop PostgreSQL vector index\",\n );\n }\n }\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return executionAdapter.execute<T>(query);\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nfunction createTransactionBackend(\n options: CreatePostgresTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ?? createPostgresExecutionAdapter(options.db);\n\n return createPostgresOperationBackend({\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n });\n}\n\n// Re-export schema utilities\nexport type { PostgresTableNames,PostgresTables } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkOEKH5PWL_cjs = require('../../chunk-OEKH5PWL.cjs');
4
- var chunkKE2BL3JZ_cjs = require('../../chunk-KE2BL3JZ.cjs');
3
+ var chunk56RQFK7U_cjs = require('../../chunk-56RQFK7U.cjs');
4
+ var chunkCRMN2NOM_cjs = require('../../chunk-CRMN2NOM.cjs');
5
5
  require('../../chunk-44SXEVF4.cjs');
6
6
  require('../../chunk-LELLOHJK.cjs');
7
7
  require('../../chunk-MME3H4ZF.cjs');
@@ -11,43 +11,43 @@ require('../../chunk-P5CNM325.cjs');
11
11
 
12
12
  Object.defineProperty(exports, "createSqliteBackend", {
13
13
  enumerable: true,
14
- get: function () { return chunkOEKH5PWL_cjs.createSqliteBackend; }
14
+ get: function () { return chunk56RQFK7U_cjs.createSqliteBackend; }
15
15
  });
16
16
  Object.defineProperty(exports, "createSqliteTables", {
17
17
  enumerable: true,
18
- get: function () { return chunkKE2BL3JZ_cjs.createSqliteTables; }
18
+ get: function () { return chunkCRMN2NOM_cjs.createSqliteTables; }
19
19
  });
20
20
  Object.defineProperty(exports, "edges", {
21
21
  enumerable: true,
22
- get: function () { return chunkKE2BL3JZ_cjs.edges; }
22
+ get: function () { return chunkCRMN2NOM_cjs.edges2; }
23
23
  });
24
24
  Object.defineProperty(exports, "embeddings", {
25
25
  enumerable: true,
26
- get: function () { return chunkKE2BL3JZ_cjs.embeddings; }
26
+ get: function () { return chunkCRMN2NOM_cjs.embeddings2; }
27
27
  });
28
28
  Object.defineProperty(exports, "generateSqliteDDL", {
29
29
  enumerable: true,
30
- get: function () { return chunkKE2BL3JZ_cjs.generateSqliteDDL; }
30
+ get: function () { return chunkCRMN2NOM_cjs.generateSqliteDDL; }
31
31
  });
32
32
  Object.defineProperty(exports, "generateSqliteMigrationSQL", {
33
33
  enumerable: true,
34
- get: function () { return chunkKE2BL3JZ_cjs.generateSqliteMigrationSQL; }
34
+ get: function () { return chunkCRMN2NOM_cjs.generateSqliteMigrationSQL; }
35
35
  });
36
36
  Object.defineProperty(exports, "nodes", {
37
37
  enumerable: true,
38
- get: function () { return chunkKE2BL3JZ_cjs.nodes; }
38
+ get: function () { return chunkCRMN2NOM_cjs.nodes2; }
39
39
  });
40
40
  Object.defineProperty(exports, "schemaVersions", {
41
41
  enumerable: true,
42
- get: function () { return chunkKE2BL3JZ_cjs.schemaVersions; }
42
+ get: function () { return chunkCRMN2NOM_cjs.schemaVersions2; }
43
43
  });
44
44
  Object.defineProperty(exports, "tables", {
45
45
  enumerable: true,
46
- get: function () { return chunkKE2BL3JZ_cjs.tables; }
46
+ get: function () { return chunkCRMN2NOM_cjs.tables2; }
47
47
  });
48
48
  Object.defineProperty(exports, "uniques", {
49
49
  enumerable: true,
50
- get: function () { return chunkKE2BL3JZ_cjs.uniques; }
50
+ get: function () { return chunkCRMN2NOM_cjs.uniques2; }
51
51
  });
52
52
  //# sourceMappingURL=index.cjs.map
53
53
  //# sourceMappingURL=index.cjs.map
@@ -1,12 +1,12 @@
1
- import { G as GraphBackend } from '../../types-Ckfwgv9l.cjs';
1
+ import { G as GraphBackend } from '../../types-B3mmOMJV.cjs';
2
2
  import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
3
- import { S as SqliteTables } from '../../sqlite-DVca_IIy.cjs';
4
- export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-DVca_IIy.cjs';
5
- export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-BJg93HDN.cjs';
3
+ import { S as SqliteTables } from '../../sqlite-DE-6NWtC.cjs';
4
+ export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-DE-6NWtC.cjs';
5
+ export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-BBo2EcFc.cjs';
6
6
  import 'drizzle-orm';
7
7
  import '../../types-DMzKq0d5.cjs';
8
8
  import 'zod';
9
- import '../../types-C8Ra3ROE.cjs';
9
+ import '../../types-CZd2PEOc.cjs';
10
10
  import '../../ast-Bh2NDeaK.cjs';
11
11
  import 'drizzle-orm/pg-core';
12
12
 
@@ -1,12 +1,12 @@
1
- import { G as GraphBackend } from '../../types-5t_MIcvv.js';
1
+ import { G as GraphBackend } from '../../types-ThB4cFLp.js';
2
2
  import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
3
- import { S as SqliteTables } from '../../sqlite-H01wIXvB.js';
4
- export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-H01wIXvB.js';
5
- export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-CsfWcl_B.js';
3
+ import { S as SqliteTables } from '../../sqlite-Blq-AhmK.js';
4
+ export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-Blq-AhmK.js';
5
+ export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-D4jlcOH_.js';
6
6
  import 'drizzle-orm';
7
7
  import '../../types-DMzKq0d5.js';
8
8
  import 'zod';
9
- import '../../types-CC8eB0PB.js';
9
+ import '../../types-Ceb01czq.js';
10
10
  import '../../ast-COMyNeMn.js';
11
11
  import 'drizzle-orm/pg-core';
12
12
 
@@ -1,5 +1,5 @@
1
- export { createSqliteBackend } from '../../chunk-RVUEBUBH.js';
2
- export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-BNIBR5U2.js';
1
+ export { createSqliteBackend } from '../../chunk-XZBAGJJH.js';
2
+ export { createSqliteTables, edges2 as edges, embeddings2 as embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes2 as nodes, schemaVersions2 as schemaVersions, tables2 as tables, uniques2 as uniques } from '../../chunk-HWWF3FOP.js';
3
3
  import '../../chunk-SJ2QMDXY.js';
4
4
  import '../../chunk-6GWJH6AR.js';
5
5
  import '../../chunk-GNIYZKBI.js';