@nicia-ai/typegraph 0.8.0 → 0.9.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.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
3
+ var chunkMGEVSTDX_cjs = require('../../chunk-MGEVSTDX.cjs');
4
4
  require('../../chunk-44SXEVF4.cjs');
5
5
  require('../../chunk-JQDWEX6V.cjs');
6
6
  require('../../chunk-2WVFEIHR.cjs');
@@ -31,7 +31,7 @@ function createPgPreparedStatement(pgClient, sqlText) {
31
31
  function createPostgresExecutionAdapter(db) {
32
32
  const pgClient = resolvePgClient(db);
33
33
  function compile(query) {
34
- return chunk23NGZHUN_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
34
+ return chunkMGEVSTDX_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
35
35
  }
36
36
  if (pgClient === void 0) {
37
37
  return {
@@ -81,10 +81,10 @@ var POSTGRES_GET_EDGES_ID_CHUNK_SIZE = Math.max(
81
81
  1,
82
82
  POSTGRES_MAX_BIND_PARAMETERS - 1
83
83
  );
84
- var toNodeRow = chunk23NGZHUN_cjs.createNodeRowMapper(chunk23NGZHUN_cjs.POSTGRES_ROW_MAPPER_CONFIG);
85
- var toEdgeRow = chunk23NGZHUN_cjs.createEdgeRowMapper(chunk23NGZHUN_cjs.POSTGRES_ROW_MAPPER_CONFIG);
86
- var toUniqueRow = chunk23NGZHUN_cjs.createUniqueRowMapper(chunk23NGZHUN_cjs.POSTGRES_ROW_MAPPER_CONFIG);
87
- var toSchemaVersionRow = chunk23NGZHUN_cjs.createSchemaVersionRowMapper(chunk23NGZHUN_cjs.POSTGRES_ROW_MAPPER_CONFIG);
84
+ var toNodeRow = chunkMGEVSTDX_cjs.createNodeRowMapper(chunkMGEVSTDX_cjs.POSTGRES_ROW_MAPPER_CONFIG);
85
+ var toEdgeRow = chunkMGEVSTDX_cjs.createEdgeRowMapper(chunkMGEVSTDX_cjs.POSTGRES_ROW_MAPPER_CONFIG);
86
+ var toUniqueRow = chunkMGEVSTDX_cjs.createUniqueRowMapper(chunkMGEVSTDX_cjs.POSTGRES_ROW_MAPPER_CONFIG);
87
+ var toSchemaVersionRow = chunkMGEVSTDX_cjs.createSchemaVersionRowMapper(chunkMGEVSTDX_cjs.POSTGRES_ROW_MAPPER_CONFIG);
88
88
  function toEmbeddingRow(row) {
89
89
  let embedding;
90
90
  if (typeof row.embedding === "string") {
@@ -102,12 +102,12 @@ function toEmbeddingRow(row) {
102
102
  field_path: row.field_path,
103
103
  embedding,
104
104
  dimensions: row.dimensions,
105
- created_at: chunk23NGZHUN_cjs.formatPostgresTimestamp(row.created_at) ?? "",
106
- updated_at: chunk23NGZHUN_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
105
+ created_at: chunkMGEVSTDX_cjs.formatPostgresTimestamp(row.created_at) ?? "",
106
+ updated_at: chunkMGEVSTDX_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
107
107
  };
108
108
  }
109
109
  var POSTGRES_VECTOR_CAPABILITIES = {
110
- ...chunk23NGZHUN_cjs.POSTGRES_CAPABILITIES,
110
+ ...chunkMGEVSTDX_cjs.POSTGRES_CAPABILITIES,
111
111
  vector: {
112
112
  supported: true,
113
113
  metrics: ["cosine", "l2", "inner_product"],
@@ -117,14 +117,14 @@ var POSTGRES_VECTOR_CAPABILITIES = {
117
117
  }
118
118
  };
119
119
  function createPostgresBackend(db, options = {}) {
120
- const tables2 = options.tables ?? chunk23NGZHUN_cjs.tables2;
120
+ const tables2 = options.tables ?? chunkMGEVSTDX_cjs.tables2;
121
121
  const executionAdapter = createPostgresExecutionAdapter(db);
122
122
  const tableNames = {
123
123
  nodes: drizzleOrm.getTableName(tables2.nodes),
124
124
  edges: drizzleOrm.getTableName(tables2.edges),
125
125
  embeddings: drizzleOrm.getTableName(tables2.embeddings)
126
126
  };
127
- const operationStrategy = chunk23NGZHUN_cjs.createPostgresOperationStrategy(tables2);
127
+ const operationStrategy = chunkMGEVSTDX_cjs.createPostgresOperationStrategy(tables2);
128
128
  const operations = createPostgresOperationBackend({
129
129
  db,
130
130
  executionAdapter,
@@ -169,7 +169,7 @@ function createPostgresOperationBackend(options) {
169
169
  async function execRun(query) {
170
170
  await db.execute(query);
171
171
  }
172
- const commonBackend = chunk23NGZHUN_cjs.createCommonOperationBackend({
172
+ const commonBackend = chunkMGEVSTDX_cjs.createCommonOperationBackend({
173
173
  batchConfig: {
174
174
  edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,
175
175
  getEdgesChunkSize: POSTGRES_GET_EDGES_ID_CHUNK_SIZE,
@@ -181,7 +181,7 @@ function createPostgresOperationBackend(options) {
181
181
  execGet,
182
182
  execRun
183
183
  },
184
- nowIso: chunk23NGZHUN_cjs.nowIso,
184
+ nowIso: chunkMGEVSTDX_cjs.nowIso,
185
185
  operationStrategy,
186
186
  rowMappers: {
187
187
  toEdgeRow,
@@ -204,7 +204,7 @@ function createPostgresOperationBackend(options) {
204
204
  tableNames,
205
205
  // === Embedding Operations ===
206
206
  async upsertEmbedding(params) {
207
- const timestamp = chunk23NGZHUN_cjs.nowIso();
207
+ const timestamp = chunkMGEVSTDX_cjs.nowIso();
208
208
  const query = operationStrategy.buildUpsertEmbedding(params, timestamp);
209
209
  await execRun(query);
210
210
  },
@@ -243,7 +243,7 @@ function createPostgresOperationBackend(options) {
243
243
  ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
244
244
  ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
245
245
  };
246
- const result = await chunk23NGZHUN_cjs.createPostgresVectorIndex(db, indexOptions);
246
+ const result = await chunkMGEVSTDX_cjs.createPostgresVectorIndex(db, indexOptions);
247
247
  if (!result.success) {
248
248
  throw new Error(
249
249
  result.message ?? "Failed to create PostgreSQL vector index"
@@ -253,13 +253,13 @@ function createPostgresOperationBackend(options) {
253
253
  async dropVectorIndex(params) {
254
254
  const metrics = POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ["cosine"];
255
255
  for (const metric of metrics) {
256
- const indexName = chunk23NGZHUN_cjs.generateVectorIndexName(
256
+ const indexName = chunkMGEVSTDX_cjs.generateVectorIndexName(
257
257
  params.graphId,
258
258
  params.nodeKind,
259
259
  params.fieldPath,
260
260
  metric
261
261
  );
262
- const result = await chunk23NGZHUN_cjs.dropPostgresVectorIndex(db, indexName);
262
+ const result = await chunkMGEVSTDX_cjs.dropPostgresVectorIndex(db, indexName);
263
263
  if (!result.success) {
264
264
  throw new Error(
265
265
  result.message ?? "Failed to drop PostgreSQL vector index"
@@ -289,39 +289,39 @@ function createTransactionBackend(options) {
289
289
 
290
290
  Object.defineProperty(exports, "createPostgresTables", {
291
291
  enumerable: true,
292
- get: function () { return chunk23NGZHUN_cjs.createPostgresTables; }
292
+ get: function () { return chunkMGEVSTDX_cjs.createPostgresTables; }
293
293
  });
294
294
  Object.defineProperty(exports, "edges", {
295
295
  enumerable: true,
296
- get: function () { return chunk23NGZHUN_cjs.edges2; }
296
+ get: function () { return chunkMGEVSTDX_cjs.edges2; }
297
297
  });
298
298
  Object.defineProperty(exports, "embeddings", {
299
299
  enumerable: true,
300
- get: function () { return chunk23NGZHUN_cjs.embeddings2; }
300
+ get: function () { return chunkMGEVSTDX_cjs.embeddings2; }
301
301
  });
302
302
  Object.defineProperty(exports, "generatePostgresDDL", {
303
303
  enumerable: true,
304
- get: function () { return chunk23NGZHUN_cjs.generatePostgresDDL; }
304
+ get: function () { return chunkMGEVSTDX_cjs.generatePostgresDDL; }
305
305
  });
306
306
  Object.defineProperty(exports, "generatePostgresMigrationSQL", {
307
307
  enumerable: true,
308
- get: function () { return chunk23NGZHUN_cjs.generatePostgresMigrationSQL; }
308
+ get: function () { return chunkMGEVSTDX_cjs.generatePostgresMigrationSQL; }
309
309
  });
310
310
  Object.defineProperty(exports, "nodes", {
311
311
  enumerable: true,
312
- get: function () { return chunk23NGZHUN_cjs.nodes2; }
312
+ get: function () { return chunkMGEVSTDX_cjs.nodes2; }
313
313
  });
314
314
  Object.defineProperty(exports, "schemaVersions", {
315
315
  enumerable: true,
316
- get: function () { return chunk23NGZHUN_cjs.schemaVersions2; }
316
+ get: function () { return chunkMGEVSTDX_cjs.schemaVersions2; }
317
317
  });
318
318
  Object.defineProperty(exports, "tables", {
319
319
  enumerable: true,
320
- get: function () { return chunk23NGZHUN_cjs.tables2; }
320
+ get: function () { return chunkMGEVSTDX_cjs.tables2; }
321
321
  });
322
322
  Object.defineProperty(exports, "uniques", {
323
323
  enumerable: true,
324
- get: function () { return chunk23NGZHUN_cjs.uniques2; }
324
+ get: function () { return chunkMGEVSTDX_cjs.uniques2; }
325
325
  });
326
326
  exports.createPostgresBackend = createPostgresBackend;
327
327
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
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';
1
+ import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables2, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-X3OXNIMH.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-X3OXNIMH.js';
3
3
  import '../../chunk-SJ2QMDXY.js';
4
4
  import '../../chunk-U3452TEU.js';
5
5
  import '../../chunk-54WJF3DW.js';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkK5O7TOJO_cjs = require('../../chunk-K5O7TOJO.cjs');
4
- var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
3
+ var chunkFXZOTO6F_cjs = require('../../chunk-FXZOTO6F.cjs');
4
+ var chunkMGEVSTDX_cjs = require('../../chunk-MGEVSTDX.cjs');
5
5
  require('../../chunk-44SXEVF4.cjs');
6
6
  require('../../chunk-JQDWEX6V.cjs');
7
7
  require('../../chunk-2WVFEIHR.cjs');
@@ -11,43 +11,43 @@ require('../../chunk-P5CNM325.cjs');
11
11
 
12
12
  Object.defineProperty(exports, "createSqliteBackend", {
13
13
  enumerable: true,
14
- get: function () { return chunkK5O7TOJO_cjs.createSqliteBackend; }
14
+ get: function () { return chunkFXZOTO6F_cjs.createSqliteBackend; }
15
15
  });
16
16
  Object.defineProperty(exports, "createSqliteTables", {
17
17
  enumerable: true,
18
- get: function () { return chunk23NGZHUN_cjs.createSqliteTables; }
18
+ get: function () { return chunkMGEVSTDX_cjs.createSqliteTables; }
19
19
  });
20
20
  Object.defineProperty(exports, "edges", {
21
21
  enumerable: true,
22
- get: function () { return chunk23NGZHUN_cjs.edges; }
22
+ get: function () { return chunkMGEVSTDX_cjs.edges; }
23
23
  });
24
24
  Object.defineProperty(exports, "embeddings", {
25
25
  enumerable: true,
26
- get: function () { return chunk23NGZHUN_cjs.embeddings; }
26
+ get: function () { return chunkMGEVSTDX_cjs.embeddings; }
27
27
  });
28
28
  Object.defineProperty(exports, "generateSqliteDDL", {
29
29
  enumerable: true,
30
- get: function () { return chunk23NGZHUN_cjs.generateSqliteDDL; }
30
+ get: function () { return chunkMGEVSTDX_cjs.generateSqliteDDL; }
31
31
  });
32
32
  Object.defineProperty(exports, "generateSqliteMigrationSQL", {
33
33
  enumerable: true,
34
- get: function () { return chunk23NGZHUN_cjs.generateSqliteMigrationSQL; }
34
+ get: function () { return chunkMGEVSTDX_cjs.generateSqliteMigrationSQL; }
35
35
  });
36
36
  Object.defineProperty(exports, "nodes", {
37
37
  enumerable: true,
38
- get: function () { return chunk23NGZHUN_cjs.nodes; }
38
+ get: function () { return chunkMGEVSTDX_cjs.nodes; }
39
39
  });
40
40
  Object.defineProperty(exports, "schemaVersions", {
41
41
  enumerable: true,
42
- get: function () { return chunk23NGZHUN_cjs.schemaVersions; }
42
+ get: function () { return chunkMGEVSTDX_cjs.schemaVersions; }
43
43
  });
44
44
  Object.defineProperty(exports, "tables", {
45
45
  enumerable: true,
46
- get: function () { return chunk23NGZHUN_cjs.tables; }
46
+ get: function () { return chunkMGEVSTDX_cjs.tables; }
47
47
  });
48
48
  Object.defineProperty(exports, "uniques", {
49
49
  enumerable: true,
50
- get: function () { return chunk23NGZHUN_cjs.uniques; }
50
+ get: function () { return chunkMGEVSTDX_cjs.uniques; }
51
51
  });
52
52
  //# sourceMappingURL=index.cjs.map
53
53
  //# sourceMappingURL=index.cjs.map
@@ -10,9 +10,20 @@ import '../../types-C8Ra3ROE.cjs';
10
10
  import '../../ast-Bh2NDeaK.cjs';
11
11
  import 'drizzle-orm/pg-core';
12
12
 
13
+ /**
14
+ * Controls how the backend manages SQLite transactions.
15
+ *
16
+ * - `"sql"`: TypeGraph issues BEGIN / COMMIT / ROLLBACK SQL directly.
17
+ * Default for sync drivers (better-sqlite3, bun:sqlite).
18
+ * - `"drizzle"`: Delegates to Drizzle's `db.transaction()` method.
19
+ * Default for async drivers (libsql, sql.js).
20
+ * - `"none"`: Transactions disabled.
21
+ * Default for Cloudflare D1 and Durable Objects.
22
+ */
23
+ type SqliteTransactionMode = "sql" | "drizzle" | "none";
13
24
  type SqliteExecutionProfileHints = Readonly<{
14
- isD1?: boolean;
15
25
  isSync?: boolean;
26
+ transactionMode?: SqliteTransactionMode;
16
27
  }>;
17
28
  type AnySqliteDatabase = BaseSQLiteDatabase<"sync" | "async", unknown>;
18
29
 
@@ -27,10 +38,11 @@ type SqliteBackendOptions = Readonly<{
27
38
  tables?: SqliteTables;
28
39
  /**
29
40
  * Optional execution profile hints used to avoid runtime driver reflection.
30
- * Set `isD1: true` when using Cloudflare D1.
41
+ * Set `transactionMode: "none"` for drivers that do not support transactions
42
+ * (e.g. Cloudflare D1, Durable Objects).
31
43
  */
32
44
  executionProfile?: SqliteExecutionProfileHints;
33
45
  }>;
34
46
  declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
35
47
 
36
- export { type SqliteBackendOptions, SqliteTables, createSqliteBackend };
48
+ export { type SqliteBackendOptions, SqliteTables, type SqliteTransactionMode, createSqliteBackend };
@@ -10,9 +10,20 @@ import '../../types-CC8eB0PB.js';
10
10
  import '../../ast-COMyNeMn.js';
11
11
  import 'drizzle-orm/pg-core';
12
12
 
13
+ /**
14
+ * Controls how the backend manages SQLite transactions.
15
+ *
16
+ * - `"sql"`: TypeGraph issues BEGIN / COMMIT / ROLLBACK SQL directly.
17
+ * Default for sync drivers (better-sqlite3, bun:sqlite).
18
+ * - `"drizzle"`: Delegates to Drizzle's `db.transaction()` method.
19
+ * Default for async drivers (libsql, sql.js).
20
+ * - `"none"`: Transactions disabled.
21
+ * Default for Cloudflare D1 and Durable Objects.
22
+ */
23
+ type SqliteTransactionMode = "sql" | "drizzle" | "none";
13
24
  type SqliteExecutionProfileHints = Readonly<{
14
- isD1?: boolean;
15
25
  isSync?: boolean;
26
+ transactionMode?: SqliteTransactionMode;
16
27
  }>;
17
28
  type AnySqliteDatabase = BaseSQLiteDatabase<"sync" | "async", unknown>;
18
29
 
@@ -27,10 +38,11 @@ type SqliteBackendOptions = Readonly<{
27
38
  tables?: SqliteTables;
28
39
  /**
29
40
  * Optional execution profile hints used to avoid runtime driver reflection.
30
- * Set `isD1: true` when using Cloudflare D1.
41
+ * Set `transactionMode: "none"` for drivers that do not support transactions
42
+ * (e.g. Cloudflare D1, Durable Objects).
31
43
  */
32
44
  executionProfile?: SqliteExecutionProfileHints;
33
45
  }>;
34
46
  declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
35
47
 
36
- export { type SqliteBackendOptions, SqliteTables, createSqliteBackend };
48
+ export { type SqliteBackendOptions, SqliteTables, type SqliteTransactionMode, createSqliteBackend };
@@ -1,5 +1,5 @@
1
- export { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
2
- export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-JPO7W262.js';
1
+ export { createSqliteBackend } from '../../chunk-KP2HKVXU.js';
2
+ export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-X3OXNIMH.js';
3
3
  import '../../chunk-SJ2QMDXY.js';
4
4
  import '../../chunk-U3452TEU.js';
5
5
  import '../../chunk-54WJF3DW.js';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkK5O7TOJO_cjs = require('../../chunk-K5O7TOJO.cjs');
4
- var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
3
+ var chunkFXZOTO6F_cjs = require('../../chunk-FXZOTO6F.cjs');
4
+ var chunkMGEVSTDX_cjs = require('../../chunk-MGEVSTDX.cjs');
5
5
  var chunk44SXEVF4_cjs = require('../../chunk-44SXEVF4.cjs');
6
6
  require('../../chunk-JQDWEX6V.cjs');
7
7
  require('../../chunk-2WVFEIHR.cjs');
@@ -53,16 +53,15 @@ function createDatabase(path) {
53
53
  }
54
54
  function createLocalSqliteBackend(options = {}) {
55
55
  const path = options.path ?? ":memory:";
56
- const tables2 = options.tables ?? chunk23NGZHUN_cjs.tables;
56
+ const tables2 = options.tables ?? chunkMGEVSTDX_cjs.tables;
57
57
  const sqlite = createDatabase(path);
58
58
  const db = betterSqlite3.drizzle(sqlite);
59
- const ddlStatements = chunk23NGZHUN_cjs.generateSqliteDDL(tables2);
59
+ const ddlStatements = chunkMGEVSTDX_cjs.generateSqliteDDL(tables2);
60
60
  for (const statement of ddlStatements) {
61
61
  sqlite.exec(statement);
62
62
  }
63
- const backend = chunkK5O7TOJO_cjs.createSqliteBackend(db, {
63
+ const backend = chunkFXZOTO6F_cjs.createSqliteBackend(db, {
64
64
  executionProfile: {
65
- isD1: false,
66
65
  isSync: true
67
66
  },
68
67
  tables: tables2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"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","file":"local.cjs","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\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/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\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 { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\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"]}
1
+ {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"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","file":"local.cjs","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\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/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\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 { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\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 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"]}
@@ -1,5 +1,5 @@
1
- import { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
2
- import { tables, generateSqliteDDL } from '../../chunk-JPO7W262.js';
1
+ import { createSqliteBackend } from '../../chunk-KP2HKVXU.js';
2
+ import { tables, generateSqliteDDL } from '../../chunk-X3OXNIMH.js';
3
3
  import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
4
4
  import '../../chunk-U3452TEU.js';
5
5
  import '../../chunk-54WJF3DW.js';
@@ -56,7 +56,6 @@ function createLocalSqliteBackend(options = {}) {
56
56
  }
57
57
  const backend = createSqliteBackend(db, {
58
58
  executionProfile: {
59
- isD1: false,
60
59
  isSync: true
61
60
  },
62
61
  tables: tables2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"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","file":"local.js","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\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/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\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 { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\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"]}
1
+ {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":";;;;;;;;;AA+CA,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAmEO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMA,OAAAA,GAAS,QAAQ,MAAA,IAAU,MAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAGzB,EAAA,MAAM,aAAA,GAAgB,kBAAkBA,OAAM,CAAA;AAC9C,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAAA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,SAAS,KAAA,GAAuB;AAC9B,IAAA,IAAI,QAAA,EAAU,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,MAAM,cAAA,GAA+B,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM;AAEzD,EAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,EAAA,EAAG;AACvC","file":"local.js","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\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/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\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 { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\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 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"]}