@nicia-ai/typegraph 0.1.1 → 0.2.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 (73) hide show
  1. package/dist/backend/drizzle/index.cjs +5 -6
  2. package/dist/backend/drizzle/index.d.cts +1 -1
  3. package/dist/backend/drizzle/index.d.ts +1 -1
  4. package/dist/backend/drizzle/index.js +3 -4
  5. package/dist/backend/drizzle/postgres.cjs +3 -4
  6. package/dist/backend/drizzle/postgres.d.cts +1 -1
  7. package/dist/backend/drizzle/postgres.d.ts +1 -1
  8. package/dist/backend/drizzle/postgres.js +2 -3
  9. package/dist/backend/drizzle/schema/postgres.cjs +0 -1
  10. package/dist/backend/drizzle/schema/postgres.js +0 -1
  11. package/dist/backend/drizzle/schema/sqlite.cjs +0 -1
  12. package/dist/backend/drizzle/schema/sqlite.js +0 -1
  13. package/dist/backend/drizzle/sqlite.cjs +3 -4
  14. package/dist/backend/drizzle/sqlite.d.cts +1 -1
  15. package/dist/backend/drizzle/sqlite.d.ts +1 -1
  16. package/dist/backend/drizzle/sqlite.js +2 -3
  17. package/dist/backend/postgres/index.cjs +3 -4
  18. package/dist/backend/postgres/index.d.cts +1 -1
  19. package/dist/backend/postgres/index.d.ts +1 -1
  20. package/dist/backend/postgres/index.js +2 -3
  21. package/dist/backend/sqlite/index.cjs +4 -5
  22. package/dist/backend/sqlite/index.cjs.map +1 -1
  23. package/dist/backend/sqlite/index.d.cts +1 -1
  24. package/dist/backend/sqlite/index.d.ts +1 -1
  25. package/dist/backend/sqlite/index.js +3 -4
  26. package/dist/backend/sqlite/index.js.map +1 -1
  27. package/dist/{chunk-TXHKFLWX.cjs → chunk-2FURVVAX.cjs} +41 -35
  28. package/dist/chunk-2FURVVAX.cjs.map +1 -0
  29. package/dist/{chunk-MFVCSNIY.cjs → chunk-H7THXVH6.cjs} +36 -30
  30. package/dist/chunk-H7THXVH6.cjs.map +1 -0
  31. package/dist/{chunk-F32HCHYA.cjs → chunk-HXAPXPZH.cjs} +2 -2
  32. package/dist/chunk-HXAPXPZH.cjs.map +1 -0
  33. package/dist/{chunk-RYT4H46I.js → chunk-QB3WBMDT.js} +2 -2
  34. package/dist/chunk-QB3WBMDT.js.map +1 -0
  35. package/dist/{chunk-3A5TKOEJ.js → chunk-X4EVMBON.js} +10 -4
  36. package/dist/chunk-X4EVMBON.js.map +1 -0
  37. package/dist/{chunk-536PH5FT.js → chunk-XZL4NLV6.js} +10 -4
  38. package/dist/chunk-XZL4NLV6.js.map +1 -0
  39. package/dist/index.cjs +16 -9
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +4 -4
  42. package/dist/index.d.ts +4 -4
  43. package/dist/index.js +15 -10
  44. package/dist/index.js.map +1 -1
  45. package/dist/indexes/index.cjs +0 -1
  46. package/dist/indexes/index.js +0 -1
  47. package/dist/interchange/index.cjs +0 -1
  48. package/dist/interchange/index.cjs.map +1 -1
  49. package/dist/interchange/index.d.cts +2 -2
  50. package/dist/interchange/index.d.ts +2 -2
  51. package/dist/interchange/index.js +0 -1
  52. package/dist/interchange/index.js.map +1 -1
  53. package/dist/profiler/index.cjs +0 -1
  54. package/dist/profiler/index.cjs.map +1 -1
  55. package/dist/profiler/index.d.cts +2 -2
  56. package/dist/profiler/index.d.ts +2 -2
  57. package/dist/profiler/index.js +0 -1
  58. package/dist/profiler/index.js.map +1 -1
  59. package/dist/{store-60Lcfi0w.d.ts → store-BPhjw5S8.d.ts} +1 -35
  60. package/dist/{store-Bifii8MZ.d.cts → store-DNOOQEm8.d.cts} +1 -35
  61. package/dist/{types-CjZ7g_7v.d.ts → types-DsRfx0yk.d.ts} +65 -1
  62. package/dist/{types-DDOSfrih.d.cts → types-aapj0GLz.d.cts} +65 -1
  63. package/package.json +1 -1
  64. package/dist/chunk-3A5TKOEJ.js.map +0 -1
  65. package/dist/chunk-536PH5FT.js.map +0 -1
  66. package/dist/chunk-DGUM43GV.js +0 -10
  67. package/dist/chunk-DGUM43GV.js.map +0 -1
  68. package/dist/chunk-F32HCHYA.cjs.map +0 -1
  69. package/dist/chunk-JEQ2X3Z6.cjs +0 -12
  70. package/dist/chunk-JEQ2X3Z6.cjs.map +0 -1
  71. package/dist/chunk-MFVCSNIY.cjs.map +0 -1
  72. package/dist/chunk-RYT4H46I.js.map +0 -1
  73. package/dist/chunk-TXHKFLWX.cjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkUJAGXJDG_cjs = require('./chunk-UJAGXJDG.cjs');
4
- var chunkF32HCHYA_cjs = require('./chunk-F32HCHYA.cjs');
4
+ var chunkHXAPXPZH_cjs = require('./chunk-HXAPXPZH.cjs');
5
5
  var chunkSV5H3XM5_cjs = require('./chunk-SV5H3XM5.cjs');
6
+ var drizzleOrm = require('drizzle-orm');
6
7
 
7
- // src/backend/drizzle/postgres.ts
8
8
  function nowIso() {
9
9
  return (/* @__PURE__ */ new Date()).toISOString();
10
10
  }
@@ -99,7 +99,7 @@ function toEmbeddingRow(row) {
99
99
  };
100
100
  }
101
101
  var POSTGRES_VECTOR_CAPABILITIES = {
102
- ...chunkF32HCHYA_cjs.POSTGRES_CAPABILITIES,
102
+ ...chunkHXAPXPZH_cjs.POSTGRES_CAPABILITIES,
103
103
  vector: {
104
104
  supported: true,
105
105
  metrics: ["cosine", "l2", "inner_product"],
@@ -110,6 +110,11 @@ var POSTGRES_VECTOR_CAPABILITIES = {
110
110
  };
111
111
  function createPostgresBackend(db, options = {}) {
112
112
  const tables2 = options.tables ?? chunkUJAGXJDG_cjs.tables;
113
+ const tableNames = {
114
+ nodes: drizzleOrm.getTableName(tables2.nodes),
115
+ edges: drizzleOrm.getTableName(tables2.edges),
116
+ embeddings: drizzleOrm.getTableName(tables2.embeddings)
117
+ };
113
118
  async function execAll(query) {
114
119
  const result = await db.execute(query);
115
120
  return result.rows;
@@ -124,118 +129,119 @@ function createPostgresBackend(db, options = {}) {
124
129
  const backend = {
125
130
  dialect: "postgres",
126
131
  capabilities: POSTGRES_VECTOR_CAPABILITIES,
132
+ tableNames,
127
133
  // === Node Operations ===
128
134
  async insertNode(params) {
129
135
  const timestamp = nowIso();
130
- const query = chunkF32HCHYA_cjs.buildInsertNode(tables2, params, timestamp);
136
+ const query = chunkHXAPXPZH_cjs.buildInsertNode(tables2, params, timestamp);
131
137
  const row = await execGet(query);
132
138
  if (!row) throw new Error("Insert node failed: no row returned");
133
139
  return toNodeRow(row);
134
140
  },
135
141
  async getNode(graphId, kind, id) {
136
- const query = chunkF32HCHYA_cjs.buildGetNode(tables2, graphId, kind, id);
142
+ const query = chunkHXAPXPZH_cjs.buildGetNode(tables2, graphId, kind, id);
137
143
  const row = await execGet(query);
138
144
  return row ? toNodeRow(row) : void 0;
139
145
  },
140
146
  async updateNode(params) {
141
147
  const timestamp = nowIso();
142
- const query = chunkF32HCHYA_cjs.buildUpdateNode(tables2, params, timestamp);
148
+ const query = chunkHXAPXPZH_cjs.buildUpdateNode(tables2, params, timestamp);
143
149
  const row = await execGet(query);
144
150
  if (!row) throw new Error("Update node failed: no row returned");
145
151
  return toNodeRow(row);
146
152
  },
147
153
  async deleteNode(params) {
148
154
  const timestamp = nowIso();
149
- const query = chunkF32HCHYA_cjs.buildDeleteNode(tables2, params, timestamp);
155
+ const query = chunkHXAPXPZH_cjs.buildDeleteNode(tables2, params, timestamp);
150
156
  await execRun(query);
151
157
  },
152
158
  async hardDeleteNode(params) {
153
- const deleteUniquesQuery = chunkF32HCHYA_cjs.buildHardDeleteUniquesByNode(
159
+ const deleteUniquesQuery = chunkHXAPXPZH_cjs.buildHardDeleteUniquesByNode(
154
160
  tables2,
155
161
  params.graphId,
156
162
  params.id
157
163
  );
158
164
  await execRun(deleteUniquesQuery);
159
- const deleteEmbeddingsQuery = chunkF32HCHYA_cjs.buildHardDeleteEmbeddingsByNode(
165
+ const deleteEmbeddingsQuery = chunkHXAPXPZH_cjs.buildHardDeleteEmbeddingsByNode(
160
166
  tables2,
161
167
  params.graphId,
162
168
  params.kind,
163
169
  params.id
164
170
  );
165
171
  await execRun(deleteEmbeddingsQuery);
166
- const query = chunkF32HCHYA_cjs.buildHardDeleteNode(tables2, params);
172
+ const query = chunkHXAPXPZH_cjs.buildHardDeleteNode(tables2, params);
167
173
  await execRun(query);
168
174
  },
169
175
  // === Edge Operations ===
170
176
  async insertEdge(params) {
171
177
  const timestamp = nowIso();
172
- const query = chunkF32HCHYA_cjs.buildInsertEdge(tables2, params, timestamp);
178
+ const query = chunkHXAPXPZH_cjs.buildInsertEdge(tables2, params, timestamp);
173
179
  const row = await execGet(query);
174
180
  if (!row) throw new Error("Insert edge failed: no row returned");
175
181
  return toEdgeRow(row);
176
182
  },
177
183
  async getEdge(graphId, id) {
178
- const query = chunkF32HCHYA_cjs.buildGetEdge(tables2, graphId, id);
184
+ const query = chunkHXAPXPZH_cjs.buildGetEdge(tables2, graphId, id);
179
185
  const row = await execGet(query);
180
186
  return row ? toEdgeRow(row) : void 0;
181
187
  },
182
188
  async updateEdge(params) {
183
189
  const timestamp = nowIso();
184
- const query = chunkF32HCHYA_cjs.buildUpdateEdge(tables2, params, timestamp);
190
+ const query = chunkHXAPXPZH_cjs.buildUpdateEdge(tables2, params, timestamp);
185
191
  const row = await execGet(query);
186
192
  if (!row) throw new Error("Update edge failed: no row returned");
187
193
  return toEdgeRow(row);
188
194
  },
189
195
  async deleteEdge(params) {
190
196
  const timestamp = nowIso();
191
- const query = chunkF32HCHYA_cjs.buildDeleteEdge(tables2, params, timestamp);
197
+ const query = chunkHXAPXPZH_cjs.buildDeleteEdge(tables2, params, timestamp);
192
198
  await execRun(query);
193
199
  },
194
200
  async hardDeleteEdge(params) {
195
- const query = chunkF32HCHYA_cjs.buildHardDeleteEdge(tables2, params);
201
+ const query = chunkHXAPXPZH_cjs.buildHardDeleteEdge(tables2, params);
196
202
  await execRun(query);
197
203
  },
198
204
  // === Edge Cardinality Operations ===
199
205
  async countEdgesFrom(params) {
200
- const query = chunkF32HCHYA_cjs.buildCountEdgesFrom(tables2, params);
206
+ const query = chunkHXAPXPZH_cjs.buildCountEdgesFrom(tables2, params);
201
207
  const row = await execGet(query);
202
208
  return Number(row?.count ?? 0);
203
209
  },
204
210
  async edgeExistsBetween(params) {
205
- const query = chunkF32HCHYA_cjs.buildEdgeExistsBetween(tables2, params);
211
+ const query = chunkHXAPXPZH_cjs.buildEdgeExistsBetween(tables2, params);
206
212
  const row = await execGet(query);
207
213
  return row !== void 0;
208
214
  },
209
215
  // === Edge Query Operations ===
210
216
  async findEdgesConnectedTo(params) {
211
- const query = chunkF32HCHYA_cjs.buildFindEdgesConnectedTo(tables2, params);
217
+ const query = chunkHXAPXPZH_cjs.buildFindEdgesConnectedTo(tables2, params);
212
218
  const rows = await execAll(query);
213
219
  return rows.map((row) => toEdgeRow(row));
214
220
  },
215
221
  // === Collection Query Operations ===
216
222
  async findNodesByKind(params) {
217
- const query = chunkF32HCHYA_cjs.buildFindNodesByKind(tables2, params);
223
+ const query = chunkHXAPXPZH_cjs.buildFindNodesByKind(tables2, params);
218
224
  const rows = await execAll(query);
219
225
  return rows.map((row) => toNodeRow(row));
220
226
  },
221
227
  async countNodesByKind(params) {
222
- const query = chunkF32HCHYA_cjs.buildCountNodesByKind(tables2, params);
228
+ const query = chunkHXAPXPZH_cjs.buildCountNodesByKind(tables2, params);
223
229
  const row = await execGet(query);
224
230
  return Number(row?.count ?? 0);
225
231
  },
226
232
  async findEdgesByKind(params) {
227
- const query = chunkF32HCHYA_cjs.buildFindEdgesByKind(tables2, params);
233
+ const query = chunkHXAPXPZH_cjs.buildFindEdgesByKind(tables2, params);
228
234
  const rows = await execAll(query);
229
235
  return rows.map((row) => toEdgeRow(row));
230
236
  },
231
237
  async countEdgesByKind(params) {
232
- const query = chunkF32HCHYA_cjs.buildCountEdgesByKind(tables2, params);
238
+ const query = chunkHXAPXPZH_cjs.buildCountEdgesByKind(tables2, params);
233
239
  const row = await execGet(query);
234
240
  return Number(row?.count ?? 0);
235
241
  },
236
242
  // === Unique Constraint Operations ===
237
243
  async insertUnique(params) {
238
- const query = chunkF32HCHYA_cjs.buildInsertUnique(tables2, "postgres", params);
244
+ const query = chunkHXAPXPZH_cjs.buildInsertUnique(tables2, "postgres", params);
239
245
  const result = await execGet(query);
240
246
  if (result && result.node_id !== params.nodeId) {
241
247
  throw new chunkSV5H3XM5_cjs.UniquenessError({
@@ -250,49 +256,49 @@ function createPostgresBackend(db, options = {}) {
250
256
  },
251
257
  async deleteUnique(params) {
252
258
  const timestamp = nowIso();
253
- const query = chunkF32HCHYA_cjs.buildDeleteUnique(tables2, params, timestamp);
259
+ const query = chunkHXAPXPZH_cjs.buildDeleteUnique(tables2, params, timestamp);
254
260
  await execRun(query);
255
261
  },
256
262
  async checkUnique(params) {
257
- const query = chunkF32HCHYA_cjs.buildCheckUnique(tables2, params);
263
+ const query = chunkHXAPXPZH_cjs.buildCheckUnique(tables2, params);
258
264
  const row = await execGet(query);
259
265
  return row ? toUniqueRow(row) : void 0;
260
266
  },
261
267
  // === Schema Operations ===
262
268
  async getActiveSchema(graphId) {
263
- const query = chunkF32HCHYA_cjs.buildGetActiveSchema(tables2, graphId, "postgres");
269
+ const query = chunkHXAPXPZH_cjs.buildGetActiveSchema(tables2, graphId, "postgres");
264
270
  const row = await execGet(query);
265
271
  return row ? toSchemaVersionRow(row) : void 0;
266
272
  },
267
273
  async insertSchema(params) {
268
274
  const timestamp = nowIso();
269
- const query = chunkF32HCHYA_cjs.buildInsertSchema(tables2, params, timestamp, "postgres");
275
+ const query = chunkHXAPXPZH_cjs.buildInsertSchema(tables2, params, timestamp, "postgres");
270
276
  const row = await execGet(query);
271
277
  if (!row) throw new Error("Insert schema failed: no row returned");
272
278
  return toSchemaVersionRow(row);
273
279
  },
274
280
  async getSchemaVersion(graphId, version) {
275
- const query = chunkF32HCHYA_cjs.buildGetSchemaVersion(tables2, graphId, version);
281
+ const query = chunkHXAPXPZH_cjs.buildGetSchemaVersion(tables2, graphId, version);
276
282
  const row = await execGet(query);
277
283
  return row ? toSchemaVersionRow(row) : void 0;
278
284
  },
279
285
  async setActiveSchema(graphId, version) {
280
- const queries = chunkF32HCHYA_cjs.buildSetActiveSchema(tables2, graphId, version, "postgres");
286
+ const queries = chunkHXAPXPZH_cjs.buildSetActiveSchema(tables2, graphId, version, "postgres");
281
287
  await execRun(queries.deactivateAll);
282
288
  await execRun(queries.activateVersion);
283
289
  },
284
290
  // === Embedding Operations ===
285
291
  async upsertEmbedding(params) {
286
292
  const timestamp = nowIso();
287
- const query = chunkF32HCHYA_cjs.buildUpsertEmbeddingPostgres(tables2, params, timestamp);
293
+ const query = chunkHXAPXPZH_cjs.buildUpsertEmbeddingPostgres(tables2, params, timestamp);
288
294
  await execRun(query);
289
295
  },
290
296
  async deleteEmbedding(params) {
291
- const query = chunkF32HCHYA_cjs.buildDeleteEmbedding(tables2, params);
297
+ const query = chunkHXAPXPZH_cjs.buildDeleteEmbedding(tables2, params);
292
298
  await execRun(query);
293
299
  },
294
300
  async getEmbedding(graphId, nodeKind, nodeId, fieldPath) {
295
- const query = chunkF32HCHYA_cjs.buildGetEmbedding(
301
+ const query = chunkHXAPXPZH_cjs.buildGetEmbedding(
296
302
  tables2,
297
303
  graphId,
298
304
  nodeKind,
@@ -303,7 +309,7 @@ function createPostgresBackend(db, options = {}) {
303
309
  return row ? toEmbeddingRow(row) : void 0;
304
310
  },
305
311
  async vectorSearch(params) {
306
- const query = chunkF32HCHYA_cjs.buildVectorSearchPostgres(tables2, params);
312
+ const query = chunkHXAPXPZH_cjs.buildVectorSearchPostgres(tables2, params);
307
313
  const rows = await execAll(query);
308
314
  return rows.map((row) => ({
309
315
  nodeId: row.node_id,
@@ -340,5 +346,5 @@ function createTransactionBackend(tx, tables2) {
340
346
  }
341
347
 
342
348
  exports.createPostgresBackend = createPostgresBackend;
343
- //# sourceMappingURL=chunk-TXHKFLWX.cjs.map
344
- //# sourceMappingURL=chunk-TXHKFLWX.cjs.map
349
+ //# sourceMappingURL=chunk-2FURVVAX.cjs.map
350
+ //# sourceMappingURL=chunk-2FURVVAX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/postgres.ts"],"names":["POSTGRES_CAPABILITIES","tables","getTableName","buildInsertNode","buildGetNode","buildUpdateNode","buildDeleteNode","buildHardDeleteUniquesByNode","buildHardDeleteEmbeddingsByNode","buildHardDeleteNode","buildInsertEdge","buildGetEdge","buildUpdateEdge","buildDeleteEdge","buildHardDeleteEdge","buildCountEdgesFrom","buildEdgeExistsBetween","buildFindEdgesConnectedTo","buildFindNodesByKind","buildCountNodesByKind","buildFindEdgesByKind","buildCountEdgesByKind","buildInsertUnique","UniquenessError","buildDeleteUnique","buildCheckUnique","buildGetActiveSchema","buildInsertSchema","buildGetSchemaVersion","buildSetActiveSchema","buildUpsertEmbeddingPostgres","buildDeleteEmbedding","buildGetEmbedding","buildVectorSearchPostgres","options"],"mappings":"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","file":"chunk-2FURVVAX.cjs","sourcesContent":["/**\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 } from \"@nicia-ai/typegraph/drizzle/postgres\";\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/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\";\nimport { type PgDatabase } from \"drizzle-orm/pg-core\";\n\nimport { UniquenessError } from \"../../errors\";\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type BackendCapabilities,\n type CheckUniqueParams,\n type CountEdgesByKindParams,\n type CountEdgesFromParams,\n type CountNodesByKindParams,\n type DeleteEdgeParams,\n type DeleteEmbeddingParams,\n type DeleteNodeParams,\n type DeleteUniqueParams,\n type EdgeExistsBetweenParams,\n type EdgeRow,\n type EmbeddingRow,\n type FindEdgesByKindParams,\n type FindEdgesConnectedToParams,\n type FindNodesByKindParams,\n type GraphBackend,\n type HardDeleteEdgeParams,\n type HardDeleteNodeParams,\n type InsertEdgeParams,\n type InsertNodeParams,\n type InsertSchemaParams,\n type InsertUniqueParams,\n type NodeRow,\n POSTGRES_CAPABILITIES,\n type SchemaVersionRow,\n type TransactionBackend,\n type TransactionOptions,\n type UniqueRow,\n type UpdateEdgeParams,\n type UpdateNodeParams,\n type UpsertEmbeddingParams,\n type VectorSearchParams,\n type VectorSearchResult,\n} from \"../types\";\nimport * as ops from \"./operations\";\nimport {\n type PostgresTables,\n tables as defaultTables,\n} from \"./schema/postgres\";\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\n/**\n * Any Drizzle PostgreSQL database instance.\n * Using 'any' for the query result type to support all PG drivers.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyPgDatabase = PgDatabase<any>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\n/**\n * Gets the current timestamp in ISO format.\n */\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Converts null to undefined.\n */\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Formats a timestamp value to ISO string.\n * PostgreSQL returns Date objects or timestamp strings, need to normalize to ISO format.\n */\nfunction formatTimestamp(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 already in ISO format, return as-is\n if (value.includes(\"T\")) return value;\n // Parse PostgreSQL timestamp format and convert to ISO\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 * Converts a database row to NodeRow type.\n * PostgreSQL returns dates as Date objects and JSONB as objects.\n * Raw SQL returns snake_case column names.\n */\nfunction toNodeRow(row: Record<string, unknown>): NodeRow {\n return {\n graph_id: row.graph_id as string,\n kind: row.kind as string,\n id: row.id as string,\n // PostgreSQL JSONB is already parsed, stringify for consistency\n props:\n typeof row.props === \"string\"\n ? row.props\n : JSON.stringify(row.props ?? {}),\n version: row.version as number,\n valid_from: nullToUndefined(formatTimestamp(row.valid_from)),\n valid_to: nullToUndefined(formatTimestamp(row.valid_to)),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(row.updated_at) ?? \"\",\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to EdgeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEdgeRow(row: Record<string, unknown>): EdgeRow {\n return {\n graph_id: row.graph_id as string,\n id: row.id as string,\n kind: row.kind as string,\n from_kind: row.from_kind as string,\n from_id: row.from_id as string,\n to_kind: row.to_kind as string,\n to_id: row.to_id as string,\n props:\n typeof row.props === \"string\"\n ? row.props\n : JSON.stringify(row.props ?? {}),\n valid_from: nullToUndefined(formatTimestamp(row.valid_from)),\n valid_to: nullToUndefined(formatTimestamp(row.valid_to)),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(row.updated_at) ?? \"\",\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to UniqueRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n constraint_name: row.constraint_name as string,\n key: row.key as string,\n node_id: row.node_id as string,\n concrete_kind: row.concrete_kind as string,\n deleted_at: nullToUndefined(formatTimestamp(row.deleted_at)),\n };\n}\n\n/**\n * Converts a database row to SchemaVersionRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toSchemaVersionRow(row: Record<string, unknown>): SchemaVersionRow {\n // PostgreSQL may return is_active as boolean or number/string depending on driver\n const isActiveValue = row.is_active;\n const isActive = isActiveValue === true || isActiveValue === 1 || isActiveValue === \"1\";\n\n return {\n graph_id: row.graph_id as string,\n version: row.version as number,\n schema_hash: row.schema_hash as string,\n schema_doc:\n typeof row.schema_doc === \"string\"\n ? row.schema_doc\n : JSON.stringify(row.schema_doc ?? {}),\n created_at: formatTimestamp(row.created_at) ?? \"\",\n is_active: isActive,\n };\n}\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: formatTimestamp(row.created_at) ?? \"\",\n updated_at: formatTimestamp(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\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n\n /**\n * Execute a query and return all rows.\n */\n async function execAll<T>(query: SQL): Promise<T[]> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const result: { rows: T[] } = await db.execute(query);\n return result.rows;\n }\n\n /**\n * Execute a query and return the first row.\n */\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const result: { rows: T[] } = await db.execute(query);\n return result.rows[0];\n }\n\n /**\n * Execute a modification query.\n */\n async function execRun(query: SQL): Promise<void> {\n await db.execute(query);\n }\n\n // Create the backend operations\n const backend: GraphBackend = {\n dialect: \"postgres\",\n capabilities: POSTGRES_VECTOR_CAPABILITIES,\n tableNames,\n\n // === Node Operations ===\n\n async insertNode(params: InsertNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async getNode(\n graphId: string,\n kind: string,\n id: string,\n ): Promise<NodeRow | undefined> {\n const query = ops.buildGetNode(tables, graphId, kind, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toNodeRow(row) : undefined;\n },\n\n async updateNode(params: UpdateNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async deleteNode(params: DeleteNodeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteNode(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteNode(params: HardDeleteNodeParams): Promise<void> {\n // Delete associated uniqueness entries\n const deleteUniquesQuery = ops.buildHardDeleteUniquesByNode(\n tables,\n params.graphId,\n params.id,\n );\n await execRun(deleteUniquesQuery);\n\n // Delete associated embeddings\n const deleteEmbeddingsQuery = ops.buildHardDeleteEmbeddingsByNode(\n tables,\n params.graphId,\n params.kind,\n params.id,\n );\n await execRun(deleteEmbeddingsQuery);\n\n // Delete the node itself\n const query = ops.buildHardDeleteNode(tables, params);\n await execRun(query);\n },\n\n // === Edge Operations ===\n\n async insertEdge(params: InsertEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async getEdge(graphId: string, id: string): Promise<EdgeRow | undefined> {\n const query = ops.buildGetEdge(tables, graphId, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEdgeRow(row) : undefined;\n },\n\n async updateEdge(params: UpdateEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async deleteEdge(params: DeleteEdgeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteEdge(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteEdge(params: HardDeleteEdgeParams): Promise<void> {\n const query = ops.buildHardDeleteEdge(tables, params);\n await execRun(query);\n },\n\n // === Edge Cardinality Operations ===\n\n async countEdgesFrom(params: CountEdgesFromParams): Promise<number> {\n const query = ops.buildCountEdgesFrom(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n // PostgreSQL returns count as string for bigint\n return Number(row?.count ?? 0);\n },\n\n async edgeExistsBetween(params: EdgeExistsBetweenParams): Promise<boolean> {\n const query = ops.buildEdgeExistsBetween(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row !== undefined;\n },\n\n // === Edge Query Operations ===\n\n async findEdgesConnectedTo(\n params: FindEdgesConnectedToParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesConnectedTo(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n // === Collection Query Operations ===\n\n async findNodesByKind(\n params: FindNodesByKindParams,\n ): Promise<readonly NodeRow[]> {\n const query = ops.buildFindNodesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toNodeRow(row));\n },\n\n async countNodesByKind(params: CountNodesByKindParams): Promise<number> {\n const query = ops.buildCountNodesByKind(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n return Number(row?.count ?? 0);\n },\n\n async findEdgesByKind(\n params: FindEdgesByKindParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n async countEdgesByKind(params: CountEdgesByKindParams): Promise<number> {\n const query = ops.buildCountEdgesByKind(tables, params);\n const row = await execGet<{ count: string | number }>(query);\n return Number(row?.count ?? 0);\n },\n\n // === Unique Constraint Operations ===\n\n async insertUnique(params: InsertUniqueParams): Promise<void> {\n const query = ops.buildInsertUnique(tables, \"postgres\", params);\n const result = await execGet<{ node_id: string }>(query);\n\n // Check if the returned node_id matches our input\n // If different, another node holds this key (race condition or conflict)\n if (result && result.node_id !== params.nodeId) {\n throw new UniquenessError({\n constraintName: params.constraintName,\n kind: params.nodeKind,\n existingId: result.node_id,\n newId: params.nodeId,\n fields: [], // Fields not available at this level\n });\n }\n },\n\n async deleteUnique(params: DeleteUniqueParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteUnique(tables, params, timestamp);\n await execRun(query);\n },\n\n async checkUnique(\n params: CheckUniqueParams,\n ): Promise<UniqueRow | undefined> {\n const query = ops.buildCheckUnique(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toUniqueRow(row) : undefined;\n },\n\n // === Schema Operations ===\n\n async getActiveSchema(\n graphId: string,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetActiveSchema(tables, graphId, \"postgres\");\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async insertSchema(params: InsertSchemaParams): Promise<SchemaVersionRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertSchema(tables, params, timestamp, \"postgres\");\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert schema failed: no row returned\");\n return toSchemaVersionRow(row);\n },\n\n async getSchemaVersion(\n graphId: string,\n version: number,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetSchemaVersion(tables, graphId, version);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n const queries = ops.buildSetActiveSchema(tables, graphId, version, \"postgres\");\n await execRun(queries.deactivateAll);\n await execRun(queries.activateVersion);\n },\n\n // === Embedding Operations ===\n\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildUpsertEmbeddingPostgres(tables, params, timestamp);\n await execRun(query);\n },\n\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = ops.buildDeleteEmbedding(tables, 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 = ops.buildGetEmbedding(\n tables,\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 = ops.buildVectorSearchPostgres(tables, 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 // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return execAll<T>(query);\n },\n\n // === Transaction ===\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n // Map isolation levels to Drizzle format\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 tx as unknown as AnyPgDatabase,\n tables,\n );\n return fn(txBackend);\n }, txConfig);\n },\n\n // === Lifecycle ===\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\n/**\n * Creates a transaction backend from a Drizzle transaction.\n */\nfunction createTransactionBackend(\n tx: AnyPgDatabase,\n tables: PostgresTables,\n): TransactionBackend {\n // Create a new backend using the transaction\n const txBackend = createPostgresBackend(tx, { tables });\n\n // Return without transaction and close methods\n const { transaction: _tx, close: _close, ...ops } = txBackend;\n void _tx;\n void _close;\n return ops;\n}\n\n// Re-export schema utilities\nexport type { PostgresTables, TableNames } from \"./schema/postgres\";\nexport { createPostgresTables, tables } from \"./schema/postgres\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkF32HCHYA_cjs = require('./chunk-F32HCHYA.cjs');
3
+ var chunkHXAPXPZH_cjs = require('./chunk-HXAPXPZH.cjs');
4
4
  var chunkN4AOJ3VF_cjs = require('./chunk-N4AOJ3VF.cjs');
5
5
  var chunkSV5H3XM5_cjs = require('./chunk-SV5H3XM5.cjs');
6
6
  var drizzleOrm = require('drizzle-orm');
@@ -86,6 +86,11 @@ function createSqliteBackend(db, options = {}) {
86
86
  const tables2 = options.tables ?? chunkN4AOJ3VF_cjs.tables;
87
87
  const isD1 = isD1Database(db);
88
88
  const isSync = isSyncDatabase(db);
89
+ const tableNames = {
90
+ nodes: drizzleOrm.getTableName(tables2.nodes),
91
+ edges: drizzleOrm.getTableName(tables2.edges),
92
+ embeddings: drizzleOrm.getTableName(tables2.embeddings)
93
+ };
89
94
  async function execGet(query) {
90
95
  const result = db.get(query);
91
96
  return result instanceof Promise ? await result : result;
@@ -100,119 +105,120 @@ function createSqliteBackend(db, options = {}) {
100
105
  }
101
106
  const backend = {
102
107
  dialect: "sqlite",
103
- capabilities: isD1 ? chunkF32HCHYA_cjs.D1_CAPABILITIES : chunkF32HCHYA_cjs.SQLITE_CAPABILITIES,
108
+ capabilities: isD1 ? chunkHXAPXPZH_cjs.D1_CAPABILITIES : chunkHXAPXPZH_cjs.SQLITE_CAPABILITIES,
109
+ tableNames,
104
110
  // === Node Operations ===
105
111
  async insertNode(params) {
106
112
  const timestamp = nowIso();
107
- const query = chunkF32HCHYA_cjs.buildInsertNode(tables2, params, timestamp);
113
+ const query = chunkHXAPXPZH_cjs.buildInsertNode(tables2, params, timestamp);
108
114
  const row = await execGet(query);
109
115
  if (!row) throw new Error("Insert node failed: no row returned");
110
116
  return toNodeRow(row);
111
117
  },
112
118
  async getNode(graphId, kind, id) {
113
- const query = chunkF32HCHYA_cjs.buildGetNode(tables2, graphId, kind, id);
119
+ const query = chunkHXAPXPZH_cjs.buildGetNode(tables2, graphId, kind, id);
114
120
  const row = await execGet(query);
115
121
  return row ? toNodeRow(row) : void 0;
116
122
  },
117
123
  async updateNode(params) {
118
124
  const timestamp = nowIso();
119
- const query = chunkF32HCHYA_cjs.buildUpdateNode(tables2, params, timestamp);
125
+ const query = chunkHXAPXPZH_cjs.buildUpdateNode(tables2, params, timestamp);
120
126
  const row = await execGet(query);
121
127
  if (!row) throw new Error("Update node failed: no row returned");
122
128
  return toNodeRow(row);
123
129
  },
124
130
  async deleteNode(params) {
125
131
  const timestamp = nowIso();
126
- const query = chunkF32HCHYA_cjs.buildDeleteNode(tables2, params, timestamp);
132
+ const query = chunkHXAPXPZH_cjs.buildDeleteNode(tables2, params, timestamp);
127
133
  await execRun(query);
128
134
  },
129
135
  async hardDeleteNode(params) {
130
- const deleteUniquesQuery = chunkF32HCHYA_cjs.buildHardDeleteUniquesByNode(
136
+ const deleteUniquesQuery = chunkHXAPXPZH_cjs.buildHardDeleteUniquesByNode(
131
137
  tables2,
132
138
  params.graphId,
133
139
  params.id
134
140
  );
135
141
  await execRun(deleteUniquesQuery);
136
- const deleteEmbeddingsQuery = chunkF32HCHYA_cjs.buildHardDeleteEmbeddingsByNode(
142
+ const deleteEmbeddingsQuery = chunkHXAPXPZH_cjs.buildHardDeleteEmbeddingsByNode(
137
143
  tables2,
138
144
  params.graphId,
139
145
  params.kind,
140
146
  params.id
141
147
  );
142
148
  await execRun(deleteEmbeddingsQuery);
143
- const query = chunkF32HCHYA_cjs.buildHardDeleteNode(tables2, params);
149
+ const query = chunkHXAPXPZH_cjs.buildHardDeleteNode(tables2, params);
144
150
  await execRun(query);
145
151
  },
146
152
  // === Edge Operations ===
147
153
  async insertEdge(params) {
148
154
  const timestamp = nowIso();
149
- const query = chunkF32HCHYA_cjs.buildInsertEdge(tables2, params, timestamp);
155
+ const query = chunkHXAPXPZH_cjs.buildInsertEdge(tables2, params, timestamp);
150
156
  const row = await execGet(query);
151
157
  if (!row) throw new Error("Insert edge failed: no row returned");
152
158
  return toEdgeRow(row);
153
159
  },
154
160
  async getEdge(graphId, id) {
155
- const query = chunkF32HCHYA_cjs.buildGetEdge(tables2, graphId, id);
161
+ const query = chunkHXAPXPZH_cjs.buildGetEdge(tables2, graphId, id);
156
162
  const row = await execGet(query);
157
163
  return row ? toEdgeRow(row) : void 0;
158
164
  },
159
165
  async updateEdge(params) {
160
166
  const timestamp = nowIso();
161
- const query = chunkF32HCHYA_cjs.buildUpdateEdge(tables2, params, timestamp);
167
+ const query = chunkHXAPXPZH_cjs.buildUpdateEdge(tables2, params, timestamp);
162
168
  const row = await execGet(query);
163
169
  if (!row) throw new Error("Update edge failed: no row returned");
164
170
  return toEdgeRow(row);
165
171
  },
166
172
  async deleteEdge(params) {
167
173
  const timestamp = nowIso();
168
- const query = chunkF32HCHYA_cjs.buildDeleteEdge(tables2, params, timestamp);
174
+ const query = chunkHXAPXPZH_cjs.buildDeleteEdge(tables2, params, timestamp);
169
175
  await execRun(query);
170
176
  },
171
177
  async hardDeleteEdge(params) {
172
- const query = chunkF32HCHYA_cjs.buildHardDeleteEdge(tables2, params);
178
+ const query = chunkHXAPXPZH_cjs.buildHardDeleteEdge(tables2, params);
173
179
  await execRun(query);
174
180
  },
175
181
  // === Edge Cardinality Operations ===
176
182
  async countEdgesFrom(params) {
177
- const query = chunkF32HCHYA_cjs.buildCountEdgesFrom(tables2, params);
183
+ const query = chunkHXAPXPZH_cjs.buildCountEdgesFrom(tables2, params);
178
184
  const row = await execGet(query);
179
185
  return row?.count ?? 0;
180
186
  },
181
187
  async edgeExistsBetween(params) {
182
- const query = chunkF32HCHYA_cjs.buildEdgeExistsBetween(tables2, params);
188
+ const query = chunkHXAPXPZH_cjs.buildEdgeExistsBetween(tables2, params);
183
189
  const row = await execGet(query);
184
190
  return row !== void 0;
185
191
  },
186
192
  // === Edge Query Operations ===
187
193
  async findEdgesConnectedTo(params) {
188
- const query = chunkF32HCHYA_cjs.buildFindEdgesConnectedTo(tables2, params);
194
+ const query = chunkHXAPXPZH_cjs.buildFindEdgesConnectedTo(tables2, params);
189
195
  const rows = await execAll(query);
190
196
  return rows.map((row) => toEdgeRow(row));
191
197
  },
192
198
  // === Collection Query Operations ===
193
199
  async findNodesByKind(params) {
194
- const query = chunkF32HCHYA_cjs.buildFindNodesByKind(tables2, params);
200
+ const query = chunkHXAPXPZH_cjs.buildFindNodesByKind(tables2, params);
195
201
  const rows = await execAll(query);
196
202
  return rows.map((row) => toNodeRow(row));
197
203
  },
198
204
  async countNodesByKind(params) {
199
- const query = chunkF32HCHYA_cjs.buildCountNodesByKind(tables2, params);
205
+ const query = chunkHXAPXPZH_cjs.buildCountNodesByKind(tables2, params);
200
206
  const row = await execGet(query);
201
207
  return row?.count ?? 0;
202
208
  },
203
209
  async findEdgesByKind(params) {
204
- const query = chunkF32HCHYA_cjs.buildFindEdgesByKind(tables2, params);
210
+ const query = chunkHXAPXPZH_cjs.buildFindEdgesByKind(tables2, params);
205
211
  const rows = await execAll(query);
206
212
  return rows.map((row) => toEdgeRow(row));
207
213
  },
208
214
  async countEdgesByKind(params) {
209
- const query = chunkF32HCHYA_cjs.buildCountEdgesByKind(tables2, params);
215
+ const query = chunkHXAPXPZH_cjs.buildCountEdgesByKind(tables2, params);
210
216
  const row = await execGet(query);
211
217
  return row?.count ?? 0;
212
218
  },
213
219
  // === Unique Constraint Operations ===
214
220
  async insertUnique(params) {
215
- const query = chunkF32HCHYA_cjs.buildInsertUnique(tables2, "sqlite", params);
221
+ const query = chunkHXAPXPZH_cjs.buildInsertUnique(tables2, "sqlite", params);
216
222
  const result = await execGet(query);
217
223
  if (result && result.node_id !== params.nodeId) {
218
224
  throw new chunkSV5H3XM5_cjs.UniquenessError({
@@ -227,34 +233,34 @@ function createSqliteBackend(db, options = {}) {
227
233
  },
228
234
  async deleteUnique(params) {
229
235
  const timestamp = nowIso();
230
- const query = chunkF32HCHYA_cjs.buildDeleteUnique(tables2, params, timestamp);
236
+ const query = chunkHXAPXPZH_cjs.buildDeleteUnique(tables2, params, timestamp);
231
237
  await execRun(query);
232
238
  },
233
239
  async checkUnique(params) {
234
- const query = chunkF32HCHYA_cjs.buildCheckUnique(tables2, params);
240
+ const query = chunkHXAPXPZH_cjs.buildCheckUnique(tables2, params);
235
241
  const row = await execGet(query);
236
242
  return row ? toUniqueRow(row) : void 0;
237
243
  },
238
244
  // === Schema Operations ===
239
245
  async getActiveSchema(graphId) {
240
- const query = chunkF32HCHYA_cjs.buildGetActiveSchema(tables2, graphId);
246
+ const query = chunkHXAPXPZH_cjs.buildGetActiveSchema(tables2, graphId);
241
247
  const row = await execGet(query);
242
248
  return row ? toSchemaVersionRow(row) : void 0;
243
249
  },
244
250
  async insertSchema(params) {
245
251
  const timestamp = nowIso();
246
- const query = chunkF32HCHYA_cjs.buildInsertSchema(tables2, params, timestamp);
252
+ const query = chunkHXAPXPZH_cjs.buildInsertSchema(tables2, params, timestamp);
247
253
  const row = await execGet(query);
248
254
  if (!row) throw new Error("Insert schema failed: no row returned");
249
255
  return toSchemaVersionRow(row);
250
256
  },
251
257
  async getSchemaVersion(graphId, version) {
252
- const query = chunkF32HCHYA_cjs.buildGetSchemaVersion(tables2, graphId, version);
258
+ const query = chunkHXAPXPZH_cjs.buildGetSchemaVersion(tables2, graphId, version);
253
259
  const row = await execGet(query);
254
260
  return row ? toSchemaVersionRow(row) : void 0;
255
261
  },
256
262
  async setActiveSchema(graphId, version) {
257
- const queries = chunkF32HCHYA_cjs.buildSetActiveSchema(tables2, graphId, version);
263
+ const queries = chunkHXAPXPZH_cjs.buildSetActiveSchema(tables2, graphId, version);
258
264
  await execRun(queries.deactivateAll);
259
265
  await execRun(queries.activateVersion);
260
266
  },
@@ -304,5 +310,5 @@ function createTransactionBackend(tx, tables2) {
304
310
  }
305
311
 
306
312
  exports.createSqliteBackend = createSqliteBackend;
307
- //# sourceMappingURL=chunk-MFVCSNIY.cjs.map
308
- //# sourceMappingURL=chunk-MFVCSNIY.cjs.map
313
+ //# sourceMappingURL=chunk-H7THXVH6.cjs.map
314
+ //# sourceMappingURL=chunk-H7THXVH6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/sqlite.ts"],"names":["tables","getTableName","D1_CAPABILITIES","SQLITE_CAPABILITIES","buildInsertNode","buildGetNode","buildUpdateNode","buildDeleteNode","buildHardDeleteUniquesByNode","buildHardDeleteEmbeddingsByNode","buildHardDeleteNode","buildInsertEdge","buildGetEdge","buildUpdateEdge","buildDeleteEdge","buildHardDeleteEdge","buildCountEdgesFrom","buildEdgeExistsBetween","buildFindEdgesConnectedTo","buildFindNodesByKind","buildCountNodesByKind","buildFindEdgesByKind","buildCountEdgesByKind","buildInsertUnique","UniquenessError","buildDeleteUnique","buildCheckUnique","buildGetActiveSchema","buildInsertSchema","buildGetSchemaVersion","buildSetActiveSchema","ConfigurationError","sql"],"mappings":"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","file":"chunk-H7THXVH6.cjs","sourcesContent":["/**\n * SQLite backend adapter for TypeGraph.\n *\n * Works with any Drizzle SQLite database instance:\n * - better-sqlite3\n * - libsql / Turso\n * - Cloudflare D1\n * - bun:sqlite\n * - sql.js\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend } from \"@nicia-ai/typegraph/drizzle/sqlite\";\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\nimport { type BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\n\nimport { ConfigurationError, UniquenessError } from \"../../errors\";\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type CheckUniqueParams,\n type CountEdgesByKindParams,\n type CountEdgesFromParams,\n type CountNodesByKindParams,\n D1_CAPABILITIES,\n type DeleteEdgeParams,\n type DeleteNodeParams,\n type DeleteUniqueParams,\n type EdgeExistsBetweenParams,\n type EdgeRow,\n type FindEdgesByKindParams,\n type FindEdgesConnectedToParams,\n type FindNodesByKindParams,\n type GraphBackend,\n type HardDeleteEdgeParams,\n type HardDeleteNodeParams,\n type InsertEdgeParams,\n type InsertNodeParams,\n type InsertSchemaParams,\n type InsertUniqueParams,\n type NodeRow,\n type SchemaVersionRow,\n SQLITE_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UniqueRow,\n type UpdateEdgeParams,\n type UpdateNodeParams,\n} from \"../types\";\nimport * as ops from \"./operations\";\nimport { type SqliteTables,tables as defaultTables } from \"./schema/sqlite\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a SQLite backend.\n */\nexport type SqliteBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createSqliteTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Any Drizzle SQLite database instance.\n */\ntype AnySqliteDatabase = BaseSQLiteDatabase<\"sync\" | \"async\", unknown>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\n/**\n * Gets the current timestamp in ISO format.\n */\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Converts null to undefined.\n */\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Converts a database row to NodeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toNodeRow(row: Record<string, unknown>): NodeRow {\n return {\n graph_id: row.graph_id as string,\n kind: row.kind as string,\n id: row.id as string,\n props: row.props as string,\n version: row.version as number,\n valid_from: nullToUndefined(row.valid_from as string | null),\n valid_to: nullToUndefined(row.valid_to as string | null),\n created_at: row.created_at as string,\n updated_at: row.updated_at as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to EdgeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEdgeRow(row: Record<string, unknown>): EdgeRow {\n return {\n graph_id: row.graph_id as string,\n id: row.id as string,\n kind: row.kind as string,\n from_kind: row.from_kind as string,\n from_id: row.from_id as string,\n to_kind: row.to_kind as string,\n to_id: row.to_id as string,\n props: row.props as string,\n valid_from: nullToUndefined(row.valid_from as string | null),\n valid_to: nullToUndefined(row.valid_to as string | null),\n created_at: row.created_at as string,\n updated_at: row.updated_at as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to UniqueRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n constraint_name: row.constraint_name as string,\n key: row.key as string,\n node_id: row.node_id as string,\n concrete_kind: row.concrete_kind as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to SchemaVersionRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toSchemaVersionRow(row: Record<string, unknown>): SchemaVersionRow {\n // SQLite returns is_active as number (0 or 1) or string ('0' or '1')\n // Boolean('0') is true in JavaScript, so we need explicit conversion\n const isActiveValue = row.is_active;\n const isActive = isActiveValue === 1 || isActiveValue === \"1\" || isActiveValue === true;\n\n return {\n graph_id: row.graph_id as string,\n version: row.version as number,\n schema_hash: row.schema_hash as string,\n schema_doc: row.schema_doc as string,\n created_at: row.created_at as string,\n is_active: isActive,\n };\n}\n\n/**\n * Gets the session class name from a Drizzle database instance.\n */\nfunction getSessionName(db: AnySqliteDatabase): string | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dbAny: any = db;\n\n // Try db.session first (current Drizzle structure)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (dbAny.session?.constructor?.name) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return dbAny.session.constructor.name as string;\n }\n\n // Fallback to db._.session (older Drizzle structure)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (dbAny._?.session?.constructor?.name) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return dbAny._.session.constructor.name as string;\n }\n\n return undefined;\n}\n\n/**\n * Detects if the database is a D1 database (no transaction support).\n */\nfunction isD1Database(db: AnySqliteDatabase): boolean {\n return getSessionName(db) === \"SQLiteD1Session\";\n}\n\n/**\n * Detects if the database is a synchronous SQLite database (better-sqlite3, bun:sqlite).\n * These drivers don't support async transaction callbacks.\n */\nfunction isSyncDatabase(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n // BetterSQLiteSession is better-sqlite3\n // BunSQLiteSession is bun:sqlite\n return sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\";\n}\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for SQLite databases.\n *\n * Works with any Drizzle SQLite instance regardless of the underlying driver.\n *\n * @param db - A Drizzle SQLite database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\nexport function createSqliteBackend(\n db: AnySqliteDatabase,\n options: SqliteBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const isD1 = isD1Database(db);\n const isSync = isSyncDatabase(db);\n\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n\n /**\n * Helper to execute a query and handle sync/async uniformly.\n */\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = db.get(query);\n return (result instanceof Promise ? await result : result) as T | undefined;\n }\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = db.all(query);\n return (result instanceof Promise ? await result : result) as T[];\n }\n\n async function execRun(query: SQL): Promise<void> {\n const result = db.run(query);\n if (result instanceof Promise) await result;\n }\n\n // Create the backend operations\n const backend: GraphBackend = {\n dialect: \"sqlite\",\n capabilities: isD1 ? D1_CAPABILITIES : SQLITE_CAPABILITIES,\n tableNames,\n\n // === Node Operations ===\n\n async insertNode(params: InsertNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async getNode(\n graphId: string,\n kind: string,\n id: string,\n ): Promise<NodeRow | undefined> {\n const query = ops.buildGetNode(tables, graphId, kind, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toNodeRow(row) : undefined;\n },\n\n async updateNode(params: UpdateNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async deleteNode(params: DeleteNodeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteNode(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteNode(params: HardDeleteNodeParams): Promise<void> {\n // Delete associated uniqueness entries\n const deleteUniquesQuery = ops.buildHardDeleteUniquesByNode(\n tables,\n params.graphId,\n params.id,\n );\n await execRun(deleteUniquesQuery);\n\n // Delete associated embeddings (if embeddings table exists)\n const deleteEmbeddingsQuery = ops.buildHardDeleteEmbeddingsByNode(\n tables,\n params.graphId,\n params.kind,\n params.id,\n );\n await execRun(deleteEmbeddingsQuery);\n\n // Delete the node itself\n const query = ops.buildHardDeleteNode(tables, params);\n await execRun(query);\n },\n\n // === Edge Operations ===\n\n async insertEdge(params: InsertEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async getEdge(graphId: string, id: string): Promise<EdgeRow | undefined> {\n const query = ops.buildGetEdge(tables, graphId, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEdgeRow(row) : undefined;\n },\n\n async updateEdge(params: UpdateEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async deleteEdge(params: DeleteEdgeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteEdge(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteEdge(params: HardDeleteEdgeParams): Promise<void> {\n const query = ops.buildHardDeleteEdge(tables, params);\n await execRun(query);\n },\n\n // === Edge Cardinality Operations ===\n\n async countEdgesFrom(params: CountEdgesFromParams): Promise<number> {\n const query = ops.buildCountEdgesFrom(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n async edgeExistsBetween(params: EdgeExistsBetweenParams): Promise<boolean> {\n const query = ops.buildEdgeExistsBetween(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row !== undefined;\n },\n\n // === Edge Query Operations ===\n\n async findEdgesConnectedTo(\n params: FindEdgesConnectedToParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesConnectedTo(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n // === Collection Query Operations ===\n\n async findNodesByKind(\n params: FindNodesByKindParams,\n ): Promise<readonly NodeRow[]> {\n const query = ops.buildFindNodesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toNodeRow(row));\n },\n\n async countNodesByKind(params: CountNodesByKindParams): Promise<number> {\n const query = ops.buildCountNodesByKind(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n async findEdgesByKind(\n params: FindEdgesByKindParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n async countEdgesByKind(params: CountEdgesByKindParams): Promise<number> {\n const query = ops.buildCountEdgesByKind(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n // === Unique Constraint Operations ===\n\n async insertUnique(params: InsertUniqueParams): Promise<void> {\n const query = ops.buildInsertUnique(tables, \"sqlite\", params);\n const result = await execGet<{ node_id: string }>(query);\n\n // Check if the returned node_id matches our input\n // If different, another node holds this key (race condition or conflict)\n if (result && result.node_id !== params.nodeId) {\n throw new UniquenessError({\n constraintName: params.constraintName,\n kind: params.nodeKind,\n existingId: result.node_id,\n newId: params.nodeId,\n fields: [], // Fields not available at this level\n });\n }\n },\n\n async deleteUnique(params: DeleteUniqueParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteUnique(tables, params, timestamp);\n await execRun(query);\n },\n\n async checkUnique(\n params: CheckUniqueParams,\n ): Promise<UniqueRow | undefined> {\n const query = ops.buildCheckUnique(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toUniqueRow(row) : undefined;\n },\n\n // === Schema Operations ===\n\n async getActiveSchema(\n graphId: string,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetActiveSchema(tables, graphId);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async insertSchema(params: InsertSchemaParams): Promise<SchemaVersionRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertSchema(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert schema failed: no row returned\");\n return toSchemaVersionRow(row);\n },\n\n async getSchemaVersion(\n graphId: string,\n version: number,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetSchemaVersion(tables, graphId, version);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n const queries = ops.buildSetActiveSchema(tables, graphId, version);\n await execRun(queries.deactivateAll);\n await execRun(queries.activateVersion);\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return execAll<T>(query);\n },\n\n // === Transaction ===\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n _options?: TransactionOptions,\n ): Promise<T> {\n if (isD1) {\n // D1 doesn't support atomic transactions - operations are auto-committed.\n // This is a critical limitation that could cause data corruption if\n // a multi-step operation fails partway through.\n throw new ConfigurationError(\n \"Cloudflare D1 does not support atomic transactions. \" +\n \"Operations within a transaction are not rolled back on failure. \" +\n \"Use backend.capabilities.transactions to check for transaction support, \" +\n \"or use individual operations with manual error handling.\",\n {\n backend: \"D1\",\n capability: \"transactions\",\n supportsTransactions: false,\n },\n );\n }\n\n if (isSync) {\n // Synchronous drivers (better-sqlite3, bun:sqlite) don't support\n // async transaction callbacks. Use raw SQL BEGIN/COMMIT/ROLLBACK.\n const txBackend = createTransactionBackend(db, tables);\n\n // Begin transaction synchronously\n db.run(sql`BEGIN`);\n\n try {\n const result = await fn(txBackend);\n db.run(sql`COMMIT`);\n return result;\n } catch (error) {\n db.run(sql`ROLLBACK`);\n throw error;\n }\n }\n\n // Use Drizzle's transaction API for async drivers (libsql, etc.)\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend(tx as AnySqliteDatabase, tables);\n return fn(txBackend);\n }) as Promise<T>;\n },\n\n // === Lifecycle ===\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\n/**\n * Creates a transaction backend from a Drizzle transaction.\n */\nfunction createTransactionBackend(\n tx: AnySqliteDatabase,\n tables: SqliteTables,\n): TransactionBackend {\n // Create a new backend using the transaction\n const txBackend = createSqliteBackend(tx, { tables });\n\n // Return without transaction and close methods\n const { transaction: _tx, close: _close, ...ops } = txBackend;\n void _tx;\n void _close;\n return ops;\n}\n\n// Re-export schema utilities\nexport type { SqliteTables, TableNames } from \"./schema/sqlite\";\nexport { createSqliteTables, tables } from \"./schema/sqlite\";\n"]}
@@ -676,5 +676,5 @@ exports.buildUpdateEdge = buildUpdateEdge;
676
676
  exports.buildUpdateNode = buildUpdateNode;
677
677
  exports.buildUpsertEmbeddingPostgres = buildUpsertEmbeddingPostgres;
678
678
  exports.buildVectorSearchPostgres = buildVectorSearchPostgres;
679
- //# sourceMappingURL=chunk-F32HCHYA.cjs.map
680
- //# sourceMappingURL=chunk-F32HCHYA.cjs.map
679
+ //# sourceMappingURL=chunk-HXAPXPZH.cjs.map
680
+ //# sourceMappingURL=chunk-HXAPXPZH.cjs.map