@nicia-ai/typegraph 0.4.0 → 0.6.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 (114) hide show
  1. package/README.md +2 -2
  2. package/dist/{ast-CXFx6bF6.d.ts → ast-CG87Zr6p.d.ts} +2 -2
  3. package/dist/{ast-D-3bOanX.d.cts → ast-Cq9qrnNP.d.cts} +2 -2
  4. package/dist/backend/postgres/index.cjs +295 -23
  5. package/dist/backend/postgres/index.cjs.map +1 -1
  6. package/dist/backend/postgres/index.d.cts +33 -10
  7. package/dist/backend/postgres/index.d.ts +33 -10
  8. package/dist/backend/postgres/index.js +285 -5
  9. package/dist/backend/postgres/index.js.map +1 -1
  10. package/dist/backend/sqlite/index.cjs +21 -90
  11. package/dist/backend/sqlite/index.cjs.map +1 -1
  12. package/dist/backend/sqlite/index.d.cts +22 -58
  13. package/dist/backend/sqlite/index.d.ts +22 -58
  14. package/dist/backend/sqlite/index.js +3 -78
  15. package/dist/backend/sqlite/index.js.map +1 -1
  16. package/dist/backend/sqlite/local.cjs +83 -0
  17. package/dist/backend/sqlite/local.cjs.map +1 -0
  18. package/dist/backend/sqlite/local.d.cts +66 -0
  19. package/dist/backend/sqlite/local.d.ts +66 -0
  20. package/dist/backend/sqlite/local.js +77 -0
  21. package/dist/backend/sqlite/local.js.map +1 -0
  22. package/dist/chunk-23NGZHUN.cjs +2132 -0
  23. package/dist/chunk-23NGZHUN.cjs.map +1 -0
  24. package/dist/{chunk-ZO2FRJ2U.js → chunk-2DKSQNPW.js} +3 -4
  25. package/dist/chunk-2DKSQNPW.js.map +1 -0
  26. package/dist/chunk-JPO7W262.js +2093 -0
  27. package/dist/chunk-JPO7W262.js.map +1 -0
  28. package/dist/{chunk-NYDXJGA3.cjs → chunk-K5O7TOJO.cjs} +15 -16
  29. package/dist/chunk-K5O7TOJO.cjs.map +1 -0
  30. package/dist/{backend/drizzle/schema/postgres.d.ts → ddl-Bcyb4DW1.d.cts} +17 -17
  31. package/dist/{backend/drizzle/schema/postgres.d.cts → ddl-D7DQx8w8.d.ts} +17 -17
  32. package/dist/{index-DyrR_d-H.d.cts → index-QTnQwakS.d.cts} +1 -1
  33. package/dist/{index-DyrR_d-H.d.ts → index-QTnQwakS.d.ts} +1 -1
  34. package/dist/index.cjs +238 -1
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +11 -12
  37. package/dist/index.d.ts +11 -12
  38. package/dist/index.js +238 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/indexes/index.d.cts +5 -6
  41. package/dist/indexes/index.d.ts +5 -6
  42. package/dist/interchange/index.d.cts +5 -6
  43. package/dist/interchange/index.d.ts +5 -6
  44. package/dist/{manager-0NysX4s6.d.cts → manager-BImRiYwz.d.cts} +3 -3
  45. package/dist/{manager-DFKe7ql3.d.ts → manager-DGQ9UF18.d.ts} +3 -3
  46. package/dist/profiler/index.d.cts +7 -8
  47. package/dist/profiler/index.d.ts +7 -8
  48. package/dist/schema/index.d.cts +6 -7
  49. package/dist/schema/index.d.ts +6 -7
  50. package/dist/{backend/drizzle/schema/sqlite.d.ts → sqlite-CSJ-fgIm.d.ts} +2 -25
  51. package/dist/{backend/drizzle/schema/sqlite.d.cts → sqlite-FWGZLwDd.d.cts} +2 -25
  52. package/dist/{store-SiovWEYA.d.ts → store-CscQUG-S.d.ts} +57 -6
  53. package/dist/{store-DhoA5uRc.d.cts → store-DNv1yd3n.d.cts} +57 -6
  54. package/dist/{types-DHRsi6j9.d.cts → types-BbMn2Ycv.d.cts} +2 -2
  55. package/dist/{types-ZT5mlism.d.ts → types-C2rhqkg7.d.ts} +2 -2
  56. package/dist/{types-6EKrWTs9.d.ts → types-D5ggX07j.d.ts} +7 -3
  57. package/dist/{types-BL1GyVku.d.cts → types-DEMAqkA1.d.cts} +1 -1
  58. package/dist/{types-DCGa53O2.d.ts → types-DJZoHy5R.d.ts} +1 -1
  59. package/dist/{types-DTJEu_-h.d.ts → types-DolHw9pJ.d.cts} +14 -1
  60. package/dist/{types-DTJEu_-h.d.cts → types-DolHw9pJ.d.ts} +14 -1
  61. package/dist/{types-BUy-pHKH.d.cts → types-SVDEKnU6.d.cts} +7 -3
  62. package/package.json +6 -46
  63. package/dist/backend/drizzle/index.cjs +0 -40
  64. package/dist/backend/drizzle/index.cjs.map +0 -1
  65. package/dist/backend/drizzle/index.d.cts +0 -13
  66. package/dist/backend/drizzle/index.d.ts +0 -13
  67. package/dist/backend/drizzle/index.js +0 -11
  68. package/dist/backend/drizzle/index.js.map +0 -1
  69. package/dist/backend/drizzle/postgres.cjs +0 -26
  70. package/dist/backend/drizzle/postgres.cjs.map +0 -1
  71. package/dist/backend/drizzle/postgres.d.cts +0 -35
  72. package/dist/backend/drizzle/postgres.d.ts +0 -35
  73. package/dist/backend/drizzle/postgres.js +0 -9
  74. package/dist/backend/drizzle/postgres.js.map +0 -1
  75. package/dist/backend/drizzle/schema/postgres.cjs +0 -39
  76. package/dist/backend/drizzle/schema/postgres.cjs.map +0 -1
  77. package/dist/backend/drizzle/schema/postgres.js +0 -6
  78. package/dist/backend/drizzle/schema/postgres.js.map +0 -1
  79. package/dist/backend/drizzle/schema/sqlite.cjs +0 -39
  80. package/dist/backend/drizzle/schema/sqlite.cjs.map +0 -1
  81. package/dist/backend/drizzle/schema/sqlite.js +0 -6
  82. package/dist/backend/drizzle/schema/sqlite.js.map +0 -1
  83. package/dist/backend/drizzle/sqlite.cjs +0 -26
  84. package/dist/backend/drizzle/sqlite.cjs.map +0 -1
  85. package/dist/backend/drizzle/sqlite.d.cts +0 -35
  86. package/dist/backend/drizzle/sqlite.d.ts +0 -35
  87. package/dist/backend/drizzle/sqlite.js +0 -9
  88. package/dist/backend/drizzle/sqlite.js.map +0 -1
  89. package/dist/chunk-3PURVEA4.js +0 -193
  90. package/dist/chunk-3PURVEA4.js.map +0 -1
  91. package/dist/chunk-7RVSDXT3.cjs +0 -1509
  92. package/dist/chunk-7RVSDXT3.cjs.map +0 -1
  93. package/dist/chunk-LUARLSYT.cjs +0 -289
  94. package/dist/chunk-LUARLSYT.cjs.map +0 -1
  95. package/dist/chunk-NU2XNMVI.cjs +0 -201
  96. package/dist/chunk-NU2XNMVI.cjs.map +0 -1
  97. package/dist/chunk-NYDXJGA3.cjs.map +0 -1
  98. package/dist/chunk-OGGLFYFA.js +0 -177
  99. package/dist/chunk-OGGLFYFA.js.map +0 -1
  100. package/dist/chunk-Q6PXIKRQ.js +0 -287
  101. package/dist/chunk-Q6PXIKRQ.js.map +0 -1
  102. package/dist/chunk-SMLIWLS7.js +0 -236
  103. package/dist/chunk-SMLIWLS7.js.map +0 -1
  104. package/dist/chunk-UYMT4LO2.cjs +0 -241
  105. package/dist/chunk-UYMT4LO2.cjs.map +0 -1
  106. package/dist/chunk-XZL6MCZJ.cjs +0 -185
  107. package/dist/chunk-XZL6MCZJ.cjs.map +0 -1
  108. package/dist/chunk-ZO2FRJ2U.js.map +0 -1
  109. package/dist/chunk-ZQGOBVXZ.js +0 -1488
  110. package/dist/chunk-ZQGOBVXZ.js.map +0 -1
  111. package/dist/test-helpers-CIq1Hhj1.d.ts +0 -26
  112. package/dist/test-helpers-DPRFVky4.d.cts +0 -26
  113. package/dist/types-BRzHlhKC.d.cts +0 -14
  114. package/dist/types-BRzHlhKC.d.ts +0 -14
@@ -1,11 +1,291 @@
1
- export { generatePostgresDDL, getPostgresMigrationSQL } from '../../chunk-SMLIWLS7.js';
2
- export { createPostgresBackend } from '../../chunk-Q6PXIKRQ.js';
3
- import '../../chunk-ZQGOBVXZ.js';
4
- import '../../chunk-OGGLFYFA.js';
5
- export { createPostgresTables, edges, embeddings, nodes, schemaVersions, tables, uniques } from '../../chunk-3PURVEA4.js';
1
+ import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables2, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-JPO7W262.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-JPO7W262.js';
6
3
  import '../../chunk-SJ2QMDXY.js';
7
4
  import '../../chunk-U3452TEU.js';
8
5
  import '../../chunk-54WJF3DW.js';
9
6
  import '../../chunk-K7SQ3SWP.js';
7
+ import { getTableName } from 'drizzle-orm';
8
+
9
+ // src/backend/drizzle/execution/postgres-execution.ts
10
+ function resolvePgClient(db) {
11
+ const databaseWithClient = db;
12
+ const pgClient = databaseWithClient.$client;
13
+ if (pgClient?.query === void 0) {
14
+ return void 0;
15
+ }
16
+ return pgClient;
17
+ }
18
+ async function executeDrizzleQuery(db, query) {
19
+ const result = await db.execute(query);
20
+ return result.rows;
21
+ }
22
+ function createPgPreparedStatement(pgClient, sqlText) {
23
+ return {
24
+ async execute(params) {
25
+ const result = await pgClient.query(sqlText, params);
26
+ return result.rows;
27
+ }
28
+ };
29
+ }
30
+ function createPostgresExecutionAdapter(db) {
31
+ const pgClient = resolvePgClient(db);
32
+ function compile(query) {
33
+ return compileQueryWithDialect(db, query, "PostgreSQL");
34
+ }
35
+ if (pgClient === void 0) {
36
+ return {
37
+ compile,
38
+ async execute(query) {
39
+ return executeDrizzleQuery(db, query);
40
+ }
41
+ };
42
+ }
43
+ const pgQueryClient = pgClient;
44
+ async function executeCompiled(compiledQuery) {
45
+ const result = await pgQueryClient.query(
46
+ compiledQuery.sql,
47
+ compiledQuery.params
48
+ );
49
+ return result.rows;
50
+ }
51
+ return {
52
+ compile,
53
+ async execute(query) {
54
+ return executeDrizzleQuery(db, query);
55
+ },
56
+ executeCompiled,
57
+ prepare(sqlText) {
58
+ return createPgPreparedStatement(pgQueryClient, sqlText);
59
+ }
60
+ };
61
+ }
62
+
63
+ // src/backend/drizzle/postgres.ts
64
+ var POSTGRES_MAX_BIND_PARAMETERS = 65535;
65
+ var NODE_INSERT_PARAM_COUNT = 9;
66
+ var EDGE_INSERT_PARAM_COUNT = 12;
67
+ var POSTGRES_NODE_INSERT_BATCH_SIZE = Math.max(
68
+ 1,
69
+ Math.floor(POSTGRES_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT)
70
+ );
71
+ var POSTGRES_EDGE_INSERT_BATCH_SIZE = Math.max(
72
+ 1,
73
+ Math.floor(POSTGRES_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT)
74
+ );
75
+ var POSTGRES_GET_NODES_ID_CHUNK_SIZE = Math.max(
76
+ 1,
77
+ POSTGRES_MAX_BIND_PARAMETERS - 2
78
+ );
79
+ var POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(
80
+ 1,
81
+ POSTGRES_MAX_BIND_PARAMETERS - 1
82
+ );
83
+ var toNodeRow = createNodeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);
84
+ var toEdgeRow = createEdgeRowMapper(POSTGRES_ROW_MAPPER_CONFIG);
85
+ var toUniqueRow = createUniqueRowMapper(POSTGRES_ROW_MAPPER_CONFIG);
86
+ var toSchemaVersionRow = createSchemaVersionRowMapper(POSTGRES_ROW_MAPPER_CONFIG);
87
+ function toEmbeddingRow(row) {
88
+ let embedding;
89
+ if (typeof row.embedding === "string") {
90
+ const content = row.embedding.slice(1, -1);
91
+ embedding = content === "" ? [] : content.split(",").map((s) => Number.parseFloat(s.trim()));
92
+ } else if (Array.isArray(row.embedding)) {
93
+ embedding = row.embedding;
94
+ } else {
95
+ embedding = [];
96
+ }
97
+ return {
98
+ graph_id: row.graph_id,
99
+ node_kind: row.node_kind,
100
+ node_id: row.node_id,
101
+ field_path: row.field_path,
102
+ embedding,
103
+ dimensions: row.dimensions,
104
+ created_at: formatPostgresTimestamp(row.created_at) ?? "",
105
+ updated_at: formatPostgresTimestamp(row.updated_at) ?? ""
106
+ };
107
+ }
108
+ var POSTGRES_VECTOR_CAPABILITIES = {
109
+ ...POSTGRES_CAPABILITIES,
110
+ vector: {
111
+ supported: true,
112
+ metrics: ["cosine", "l2", "inner_product"],
113
+ indexTypes: ["hnsw", "ivfflat", "none"],
114
+ maxDimensions: 16e3
115
+ // pgvector limit
116
+ }
117
+ };
118
+ function createPostgresBackend(db, options = {}) {
119
+ const tables2$1 = options.tables ?? tables2;
120
+ const executionAdapter = createPostgresExecutionAdapter(db);
121
+ const tableNames = {
122
+ nodes: getTableName(tables2$1.nodes),
123
+ edges: getTableName(tables2$1.edges),
124
+ embeddings: getTableName(tables2$1.embeddings)
125
+ };
126
+ const operationStrategy = createPostgresOperationStrategy(tables2$1);
127
+ const operations = createPostgresOperationBackend({
128
+ db,
129
+ executionAdapter,
130
+ operationStrategy,
131
+ tableNames
132
+ });
133
+ const backend = {
134
+ ...operations,
135
+ async setActiveSchema(graphId, version) {
136
+ await backend.transaction(async (txBackend) => {
137
+ await txBackend.setActiveSchema(graphId, version);
138
+ });
139
+ },
140
+ async transaction(fn, options2) {
141
+ const txConfig = options2?.isolationLevel ? {
142
+ isolationLevel: options2.isolationLevel.replace("_", " ")
143
+ } : void 0;
144
+ return db.transaction(async (tx) => {
145
+ const txBackend = createTransactionBackend({
146
+ db: tx,
147
+ operationStrategy,
148
+ tableNames
149
+ });
150
+ return fn(txBackend);
151
+ }, txConfig);
152
+ },
153
+ async close() {
154
+ }
155
+ };
156
+ return backend;
157
+ }
158
+ function createPostgresOperationBackend(options) {
159
+ const { db, executionAdapter, operationStrategy, tableNames } = options;
160
+ async function execAll(query) {
161
+ const result = await db.execute(query);
162
+ return result.rows;
163
+ }
164
+ async function execGet(query) {
165
+ const result = await db.execute(query);
166
+ return result.rows[0];
167
+ }
168
+ async function execRun(query) {
169
+ await db.execute(query);
170
+ }
171
+ const commonBackend = createCommonOperationBackend({
172
+ batchConfig: {
173
+ edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,
174
+ getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,
175
+ getNodesChunkSize: POSTGRES_GET_NODES_ID_CHUNK_SIZE,
176
+ nodeInsertBatchSize: POSTGRES_NODE_INSERT_BATCH_SIZE
177
+ },
178
+ execution: {
179
+ execAll,
180
+ execGet,
181
+ execRun
182
+ },
183
+ nowIso,
184
+ operationStrategy,
185
+ rowMappers: {
186
+ toEdgeRow,
187
+ toNodeRow,
188
+ toSchemaVersionRow,
189
+ toUniqueRow
190
+ }
191
+ });
192
+ const executeCompiled = executionAdapter.executeCompiled;
193
+ const executeRawMethod = executeCompiled === void 0 ? {} : {
194
+ async executeRaw(sqlText, params) {
195
+ return executeCompiled({ params, sql: sqlText });
196
+ }
197
+ };
198
+ const operationBackend = {
199
+ ...commonBackend,
200
+ ...executeRawMethod,
201
+ capabilities: POSTGRES_VECTOR_CAPABILITIES,
202
+ dialect: "postgres",
203
+ tableNames,
204
+ // === Embedding Operations ===
205
+ async upsertEmbedding(params) {
206
+ const timestamp = nowIso();
207
+ const query = operationStrategy.buildUpsertEmbedding(params, timestamp);
208
+ await execRun(query);
209
+ },
210
+ async deleteEmbedding(params) {
211
+ const query = operationStrategy.buildDeleteEmbedding(params);
212
+ await execRun(query);
213
+ },
214
+ async getEmbedding(graphId, nodeKind, nodeId, fieldPath) {
215
+ const query = operationStrategy.buildGetEmbedding(
216
+ graphId,
217
+ nodeKind,
218
+ nodeId,
219
+ fieldPath
220
+ );
221
+ const row = await execGet(query);
222
+ return row ? toEmbeddingRow(row) : void 0;
223
+ },
224
+ async vectorSearch(params) {
225
+ const query = operationStrategy.buildVectorSearch(params);
226
+ const rows = await execAll(query);
227
+ return rows.map((row) => ({
228
+ nodeId: row.node_id,
229
+ score: row.score
230
+ }));
231
+ },
232
+ async createVectorIndex(params) {
233
+ const indexOptions = {
234
+ graphId: params.graphId,
235
+ nodeKind: params.nodeKind,
236
+ fieldPath: params.fieldPath,
237
+ dimensions: params.dimensions,
238
+ embeddingsTableName: tableNames.embeddings,
239
+ indexType: params.indexType,
240
+ metric: params.metric,
241
+ ...params.indexParams?.m === void 0 ? {} : { hnswM: params.indexParams.m },
242
+ ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
243
+ ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
244
+ };
245
+ const result = await createPostgresVectorIndex(db, indexOptions);
246
+ if (!result.success) {
247
+ throw new Error(
248
+ result.message ?? "Failed to create PostgreSQL vector index"
249
+ );
250
+ }
251
+ },
252
+ async dropVectorIndex(params) {
253
+ const metrics = POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ["cosine"];
254
+ for (const metric of metrics) {
255
+ const indexName = generateVectorIndexName(
256
+ params.graphId,
257
+ params.nodeKind,
258
+ params.fieldPath,
259
+ metric
260
+ );
261
+ const result = await dropPostgresVectorIndex(db, indexName);
262
+ if (!result.success) {
263
+ throw new Error(
264
+ result.message ?? "Failed to drop PostgreSQL vector index"
265
+ );
266
+ }
267
+ }
268
+ },
269
+ // === Query Execution ===
270
+ async execute(query) {
271
+ return executionAdapter.execute(query);
272
+ },
273
+ compileSql(query) {
274
+ return executionAdapter.compile(query);
275
+ }
276
+ };
277
+ return operationBackend;
278
+ }
279
+ function createTransactionBackend(options) {
280
+ const txExecutionAdapter = options.executionAdapter ?? createPostgresExecutionAdapter(options.db);
281
+ return createPostgresOperationBackend({
282
+ db: options.db,
283
+ executionAdapter: txExecutionAdapter,
284
+ operationStrategy: options.operationStrategy,
285
+ tableNames: options.tableNames
286
+ });
287
+ }
288
+
289
+ export { createPostgresBackend };
10
290
  //# sourceMappingURL=index.js.map
11
291
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
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);\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 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,122 +1,53 @@
1
1
  'use strict';
2
2
 
3
- var chunkUYMT4LO2_cjs = require('../../chunk-UYMT4LO2.cjs');
4
- var chunkNYDXJGA3_cjs = require('../../chunk-NYDXJGA3.cjs');
5
- require('../../chunk-7RVSDXT3.cjs');
6
- var chunkXZL6MCZJ_cjs = require('../../chunk-XZL6MCZJ.cjs');
7
- require('../../chunk-NU2XNMVI.cjs');
8
- var chunk44SXEVF4_cjs = require('../../chunk-44SXEVF4.cjs');
3
+ var chunkK5O7TOJO_cjs = require('../../chunk-K5O7TOJO.cjs');
4
+ var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
5
+ require('../../chunk-44SXEVF4.cjs');
9
6
  require('../../chunk-JQDWEX6V.cjs');
10
7
  require('../../chunk-2WVFEIHR.cjs');
11
8
  require('../../chunk-P5CNM325.cjs');
12
- var Database = require('better-sqlite3');
13
- var betterSqlite3 = require('drizzle-orm/better-sqlite3');
14
9
 
15
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
10
 
17
- var Database__default = /*#__PURE__*/_interopDefault(Database);
18
11
 
19
- function getUnknownErrorMessage(error) {
20
- if (error instanceof Error) return error.message;
21
- return String(error);
22
- }
23
- function parseNodeModuleVersionMismatchMessage(message) {
24
- const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
25
- const match = regexp.exec(message);
26
- if (!match?.groups) return void 0;
27
- const compiled = Number(match.groups.compiled);
28
- const required = Number(match.groups.required);
29
- if (!Number.isFinite(compiled) || !Number.isFinite(required))
30
- return void 0;
31
- return { compiled, required };
32
- }
33
- function createDatabase(path) {
34
- try {
35
- return new Database__default.default(path);
36
- } catch (error) {
37
- const message = getUnknownErrorMessage(error);
38
- const mismatch = parseNodeModuleVersionMismatchMessage(message);
39
- if (!mismatch) throw error;
40
- throw new chunk44SXEVF4_cjs.ConfigurationError(
41
- [
42
- "Failed to load better-sqlite3 native addon.",
43
- `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
44
- "This usually happens after switching Node versions without rebuilding native dependencies.",
45
- "Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
46
- ].join(" "),
47
- {
48
- nodeVersion: process.version,
49
- nodeModuleVersion: process.versions.modules,
50
- compiledNodeModuleVersion: mismatch.compiled,
51
- requiredNodeModuleVersion: mismatch.required
52
- },
53
- { cause: error }
54
- );
55
- }
56
- }
57
- function createLocalSqliteBackend(options = {}) {
58
- const path = options.path ?? ":memory:";
59
- const tables2 = options.tables ?? chunkXZL6MCZJ_cjs.tables;
60
- const sqlite = createDatabase(path);
61
- const db = betterSqlite3.drizzle(sqlite);
62
- const ddlStatements = chunkUYMT4LO2_cjs.generateSqliteDDL(tables2);
63
- for (const statement of ddlStatements) {
64
- sqlite.exec(statement);
65
- }
66
- const backend = chunkNYDXJGA3_cjs.createSqliteBackend(db, {
67
- executionProfile: {
68
- isD1: false,
69
- isSync: true
70
- },
71
- tables: tables2
72
- });
73
- let isClosed = false;
74
- function close() {
75
- if (isClosed) return Promise.resolve();
76
- isClosed = true;
77
- sqlite.close();
78
- return Promise.resolve();
79
- }
80
- const managedBackend = { ...backend, close };
81
- return { backend: managedBackend, db };
82
- }
83
-
84
- Object.defineProperty(exports, "generateSqliteDDL", {
12
+ Object.defineProperty(exports, "createSqliteBackend", {
85
13
  enumerable: true,
86
- get: function () { return chunkUYMT4LO2_cjs.generateSqliteDDL; }
14
+ get: function () { return chunkK5O7TOJO_cjs.createSqliteBackend; }
87
15
  });
88
- Object.defineProperty(exports, "getSqliteMigrationSQL", {
16
+ Object.defineProperty(exports, "createSqliteTables", {
89
17
  enumerable: true,
90
- get: function () { return chunkUYMT4LO2_cjs.getSqliteMigrationSQL; }
18
+ get: function () { return chunk23NGZHUN_cjs.createSqliteTables; }
91
19
  });
92
- Object.defineProperty(exports, "createSqliteBackend", {
20
+ Object.defineProperty(exports, "edges", {
93
21
  enumerable: true,
94
- get: function () { return chunkNYDXJGA3_cjs.createSqliteBackend; }
22
+ get: function () { return chunk23NGZHUN_cjs.edges; }
95
23
  });
96
- Object.defineProperty(exports, "createSqliteTables", {
24
+ Object.defineProperty(exports, "embeddings", {
97
25
  enumerable: true,
98
- get: function () { return chunkXZL6MCZJ_cjs.createSqliteTables; }
26
+ get: function () { return chunk23NGZHUN_cjs.embeddings; }
99
27
  });
100
- Object.defineProperty(exports, "edges", {
28
+ Object.defineProperty(exports, "generateSqliteDDL", {
29
+ enumerable: true,
30
+ get: function () { return chunk23NGZHUN_cjs.generateSqliteDDL; }
31
+ });
32
+ Object.defineProperty(exports, "generateSqliteMigrationSQL", {
101
33
  enumerable: true,
102
- get: function () { return chunkXZL6MCZJ_cjs.edges; }
34
+ get: function () { return chunk23NGZHUN_cjs.generateSqliteMigrationSQL; }
103
35
  });
104
36
  Object.defineProperty(exports, "nodes", {
105
37
  enumerable: true,
106
- get: function () { return chunkXZL6MCZJ_cjs.nodes; }
38
+ get: function () { return chunk23NGZHUN_cjs.nodes; }
107
39
  });
108
40
  Object.defineProperty(exports, "schemaVersions", {
109
41
  enumerable: true,
110
- get: function () { return chunkXZL6MCZJ_cjs.schemaVersions; }
42
+ get: function () { return chunk23NGZHUN_cjs.schemaVersions; }
111
43
  });
112
44
  Object.defineProperty(exports, "tables", {
113
45
  enumerable: true,
114
- get: function () { return chunkXZL6MCZJ_cjs.tables; }
46
+ get: function () { return chunk23NGZHUN_cjs.tables; }
115
47
  });
116
48
  Object.defineProperty(exports, "uniques", {
117
49
  enumerable: true,
118
- get: function () { return chunkXZL6MCZJ_cjs.uniques; }
50
+ get: function () { return chunk23NGZHUN_cjs.uniques; }
119
51
  });
120
- exports.createLocalSqliteBackend = createLocalSqliteBackend;
121
52
  //# sourceMappingURL=index.cjs.map
122
53
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/sqlite/index.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SQLite backend for TypeGraph.\n *\n * Re-exports from the Drizzle implementation for backwards compatibility.\n *\n * @example Quick start with in-memory database\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Full manual configuration\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend, getSqliteMigrationSQL } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * sqlite.exec(getSqliteMigrationSQL());\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db);\n * ```\n */\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport { generateSqliteDDL } from \"../drizzle/test-helpers\";\nimport type { GraphBackend } from \"../types\";\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups.compiled);\n const required = Number(match.groups.required);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: GraphBackend;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isD1: false,\n isSync: true,\n },\n tables,\n });\n let isClosed = false;\n\n function close(): Promise<void> {\n if (isClosed) return Promise.resolve();\n isClosed = true;\n sqlite.close();\n return Promise.resolve();\n }\n\n const managedBackend: GraphBackend = { ...backend, close };\n\n return { backend: managedBackend, db };\n}\n\n// ============================================================\n// Re-exports\n// ============================================================\n\n// Re-export everything from the Drizzle SQLite implementation\nexport {\n createSqliteBackend,\n createSqliteTables,\n type SqliteBackendOptions,\n type SqliteTableNames,\n type SqliteTables,\n tables,\n} from \"../drizzle/sqlite\";\n\n// Re-export individual tables for schema usage\nexport {\n edges,\n nodes,\n schemaVersions,\n uniques,\n} from \"../drizzle/schema/sqlite\";\n\n// Re-export migration SQL generation\nexport {\n generateSqliteDDL,\n getSqliteMigrationSQL,\n} from \"../drizzle/test-helpers\";\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -1,72 +1,36 @@
1
- import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
- export { SqliteBackendOptions, createSqliteBackend } from '../drizzle/sqlite.cjs';
3
- import { G as GraphBackend } from '../../types-BUy-pHKH.cjs';
4
- import { SqliteTables } from '../drizzle/schema/sqlite.cjs';
5
- export { SqliteTableNames, createSqliteTables, edges, nodes, schemaVersions, tables, uniques } from '../drizzle/schema/sqlite.cjs';
6
- export { b as generateSqliteDDL, c as getSqliteMigrationSQL } from '../../test-helpers-DPRFVky4.cjs';
7
- import 'drizzle-orm/sqlite-core';
1
+ import { G as GraphBackend } from '../../types-SVDEKnU6.cjs';
2
+ import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
3
+ import { S as SqliteTables } from '../../sqlite-FWGZLwDd.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-FWGZLwDd.cjs';
5
+ export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-Bcyb4DW1.cjs';
8
6
  import 'drizzle-orm';
9
- import '../../types-DTJEu_-h.cjs';
7
+ import '../../types-DolHw9pJ.cjs';
10
8
  import 'zod';
11
- import '../../types-BRzHlhKC.cjs';
12
- import '../../types-DHRsi6j9.cjs';
13
- import '../../ast-D-3bOanX.cjs';
14
- import '../drizzle/schema/postgres.cjs';
9
+ import '../../types-BbMn2Ycv.cjs';
10
+ import '../../ast-Cq9qrnNP.cjs';
15
11
  import 'drizzle-orm/pg-core';
16
12
 
13
+ type SqliteExecutionProfileHints = Readonly<{
14
+ isD1?: boolean;
15
+ isSync?: boolean;
16
+ }>;
17
+ type AnySqliteDatabase = BaseSQLiteDatabase<"sync" | "async", unknown>;
18
+
17
19
  /**
18
- * Options for creating a local SQLite backend.
20
+ * Options for creating a SQLite backend.
19
21
  */
20
- type LocalSqliteBackendOptions = Readonly<{
21
- /**
22
- * Path to the SQLite database file.
23
- * Defaults to ":memory:" for an in-memory database.
24
- */
25
- path?: string;
22
+ type SqliteBackendOptions = Readonly<{
26
23
  /**
27
- * Custom table definitions.
24
+ * Custom table definitions. Use createSqliteTables() to customize table names.
28
25
  * Defaults to standard TypeGraph table names.
29
26
  */
30
27
  tables?: SqliteTables;
31
- }>;
32
- /**
33
- * Result of creating a local SQLite backend.
34
- */
35
- type LocalSqliteBackendResult = Readonly<{
36
- /**
37
- * The GraphBackend instance for use with createStore.
38
- */
39
- backend: GraphBackend;
40
28
  /**
41
- * The underlying Drizzle database instance.
42
- * Useful for direct SQL access or cleanup.
29
+ * Optional execution profile hints used to avoid runtime driver reflection.
30
+ * Set `isD1: true` when using Cloudflare D1.
43
31
  */
44
- db: BetterSQLite3Database;
32
+ executionProfile?: SqliteExecutionProfileHints;
45
33
  }>;
46
- /**
47
- * Creates a SQLite backend with minimal configuration.
48
- *
49
- * This is a convenience function for local development and testing.
50
- * It handles database creation, schema migration, and backend setup.
51
- *
52
- * For production deployments or custom configurations, use createSqliteBackend
53
- * directly with your own Drizzle database instance.
54
- *
55
- * @param options - Configuration options
56
- * @returns Backend and database instances
57
- *
58
- * @example In-memory database (default)
59
- * ```typescript
60
- * const { backend } = createLocalSqliteBackend();
61
- * const store = createStore(graph, backend);
62
- * ```
63
- *
64
- * @example File-based database
65
- * ```typescript
66
- * const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
67
- * const store = createStore(graph, backend);
68
- * ```
69
- */
70
- declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
34
+ declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
71
35
 
72
- export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, SqliteTables, createLocalSqliteBackend };
36
+ export { type SqliteBackendOptions, SqliteTables, createSqliteBackend };