@nicia-ai/typegraph 0.16.2 → 0.18.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 (39) hide show
  1. package/dist/backend/postgres/index.cjs +27 -27
  2. package/dist/backend/postgres/index.js +2 -2
  3. package/dist/backend/sqlite/index.cjs +12 -12
  4. package/dist/backend/sqlite/index.js +2 -2
  5. package/dist/backend/sqlite/libsql.cjs +28 -0
  6. package/dist/backend/sqlite/libsql.cjs.map +1 -0
  7. package/dist/backend/sqlite/libsql.d.cts +86 -0
  8. package/dist/backend/sqlite/libsql.d.ts +86 -0
  9. package/dist/backend/sqlite/libsql.js +26 -0
  10. package/dist/backend/sqlite/libsql.js.map +1 -0
  11. package/dist/backend/sqlite/local.cjs +7 -12
  12. package/dist/backend/sqlite/local.cjs.map +1 -1
  13. package/dist/backend/sqlite/local.js +4 -9
  14. package/dist/backend/sqlite/local.js.map +1 -1
  15. package/dist/{chunk-5H74QKKF.cjs → chunk-HXJXTOXR.cjs} +23 -27
  16. package/dist/chunk-HXJXTOXR.cjs.map +1 -0
  17. package/dist/{chunk-2UTJRP4F.cjs → chunk-IYWWXOVK.cjs} +40 -28
  18. package/dist/chunk-IYWWXOVK.cjs.map +1 -0
  19. package/dist/{chunk-IRS2C6GN.js → chunk-LLHFS53Q.js} +10 -14
  20. package/dist/chunk-LLHFS53Q.js.map +1 -0
  21. package/dist/{chunk-7ZVPFJLQ.js → chunk-QFZQGEQ3.js} +40 -29
  22. package/dist/chunk-QFZQGEQ3.js.map +1 -0
  23. package/dist/index.cjs +63 -24
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +2 -2
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.js +63 -24
  28. package/dist/index.js.map +1 -1
  29. package/dist/interchange/index.d.cts +1 -1
  30. package/dist/interchange/index.d.ts +1 -1
  31. package/dist/profiler/index.d.cts +1 -1
  32. package/dist/profiler/index.d.ts +1 -1
  33. package/dist/{store-BZ7BexR1.d.cts → store-B_JzzHwb.d.cts} +2 -2
  34. package/dist/{store--7Nft1Ii.d.ts → store-DkY1pDfu.d.ts} +2 -2
  35. package/package.json +16 -1
  36. package/dist/chunk-2UTJRP4F.cjs.map +0 -1
  37. package/dist/chunk-5H74QKKF.cjs.map +0 -1
  38. package/dist/chunk-7ZVPFJLQ.js.map +0 -1
  39. package/dist/chunk-IRS2C6GN.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk2UTJRP4F_cjs = require('../../chunk-2UTJRP4F.cjs');
3
+ var chunkIYWWXOVK_cjs = require('../../chunk-IYWWXOVK.cjs');
4
4
  require('../../chunk-O5PST6TB.cjs');
5
5
  require('../../chunk-LELLOHJK.cjs');
6
6
  require('../../chunk-MME3H4ZF.cjs');
@@ -31,7 +31,7 @@ function createPgPreparedStatement(pgClient, sqlText) {
31
31
  function createPostgresExecutionAdapter(db) {
32
32
  const pgClient = resolvePgClient(db);
33
33
  function compile(query) {
34
- return chunk2UTJRP4F_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
34
+ return chunkIYWWXOVK_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
35
35
  }
36
36
  if (pgClient === void 0) {
37
37
  return {
@@ -86,10 +86,10 @@ var POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(
86
86
  1,
87
87
  POSTGRES_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT
88
88
  );
89
- var toNodeRow = chunk2UTJRP4F_cjs.createNodeRowMapper(chunk2UTJRP4F_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
- var toEdgeRow = chunk2UTJRP4F_cjs.createEdgeRowMapper(chunk2UTJRP4F_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
- var toUniqueRow = chunk2UTJRP4F_cjs.createUniqueRowMapper(chunk2UTJRP4F_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
- var toSchemaVersionRow = chunk2UTJRP4F_cjs.createSchemaVersionRowMapper(chunk2UTJRP4F_cjs.POSTGRES_ROW_MAPPER_CONFIG);
89
+ var toNodeRow = chunkIYWWXOVK_cjs.createNodeRowMapper(chunkIYWWXOVK_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
+ var toEdgeRow = chunkIYWWXOVK_cjs.createEdgeRowMapper(chunkIYWWXOVK_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
+ var toUniqueRow = chunkIYWWXOVK_cjs.createUniqueRowMapper(chunkIYWWXOVK_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
+ var toSchemaVersionRow = chunkIYWWXOVK_cjs.createSchemaVersionRowMapper(chunkIYWWXOVK_cjs.POSTGRES_ROW_MAPPER_CONFIG);
93
93
  function toEmbeddingRow(row) {
94
94
  let embedding;
95
95
  if (typeof row.embedding === "string") {
@@ -107,12 +107,12 @@ function toEmbeddingRow(row) {
107
107
  field_path: row.field_path,
108
108
  embedding,
109
109
  dimensions: row.dimensions,
110
- created_at: chunk2UTJRP4F_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
- updated_at: chunk2UTJRP4F_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
110
+ created_at: chunkIYWWXOVK_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
+ updated_at: chunkIYWWXOVK_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
112
112
  };
113
113
  }
114
114
  var POSTGRES_VECTOR_CAPABILITIES = {
115
- ...chunk2UTJRP4F_cjs.POSTGRES_CAPABILITIES,
115
+ ...chunkIYWWXOVK_cjs.POSTGRES_CAPABILITIES,
116
116
  vector: {
117
117
  supported: true,
118
118
  metrics: ["cosine", "l2", "inner_product"],
@@ -122,14 +122,14 @@ var POSTGRES_VECTOR_CAPABILITIES = {
122
122
  }
123
123
  };
124
124
  function createPostgresBackend(db, options = {}) {
125
- const tables2 = options.tables ?? chunk2UTJRP4F_cjs.tables;
125
+ const tables2 = options.tables ?? chunkIYWWXOVK_cjs.tables;
126
126
  const executionAdapter = createPostgresExecutionAdapter(db);
127
127
  const tableNames = {
128
128
  nodes: drizzleOrm.getTableName(tables2.nodes),
129
129
  edges: drizzleOrm.getTableName(tables2.edges),
130
130
  embeddings: drizzleOrm.getTableName(tables2.embeddings)
131
131
  };
132
- const operationStrategy = chunk2UTJRP4F_cjs.createPostgresOperationStrategy(tables2);
132
+ const operationStrategy = chunkIYWWXOVK_cjs.createPostgresOperationStrategy(tables2);
133
133
  const operations = createPostgresOperationBackend({
134
134
  db,
135
135
  executionAdapter,
@@ -139,7 +139,7 @@ function createPostgresBackend(db, options = {}) {
139
139
  const backend = {
140
140
  ...operations,
141
141
  async bootstrapTables() {
142
- const statements = chunk2UTJRP4F_cjs.generatePostgresDDL(tables2);
142
+ const statements = chunkIYWWXOVK_cjs.generatePostgresDDL(tables2);
143
143
  for (const statement of statements) {
144
144
  await db.execute(drizzleOrm.sql.raw(statement));
145
145
  }
@@ -180,7 +180,7 @@ function createPostgresOperationBackend(options) {
180
180
  async function execRun(query) {
181
181
  await db.execute(query);
182
182
  }
183
- const commonBackend = chunk2UTJRP4F_cjs.createCommonOperationBackend({
183
+ const commonBackend = chunkIYWWXOVK_cjs.createCommonOperationBackend({
184
184
  batchConfig: {
185
185
  checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,
186
186
  edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,
@@ -193,7 +193,7 @@ function createPostgresOperationBackend(options) {
193
193
  execGet,
194
194
  execRun
195
195
  },
196
- nowIso: chunk2UTJRP4F_cjs.nowIso,
196
+ nowIso: chunkIYWWXOVK_cjs.nowIso,
197
197
  operationStrategy,
198
198
  rowMappers: {
199
199
  toEdgeRow,
@@ -216,7 +216,7 @@ function createPostgresOperationBackend(options) {
216
216
  tableNames,
217
217
  // === Embedding Operations ===
218
218
  async upsertEmbedding(params) {
219
- const timestamp = chunk2UTJRP4F_cjs.nowIso();
219
+ const timestamp = chunkIYWWXOVK_cjs.nowIso();
220
220
  const query = operationStrategy.buildUpsertEmbedding(params, timestamp);
221
221
  await execRun(query);
222
222
  },
@@ -255,7 +255,7 @@ function createPostgresOperationBackend(options) {
255
255
  ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
256
256
  ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
257
257
  };
258
- const result = await chunk2UTJRP4F_cjs.createPostgresVectorIndex(db, indexOptions);
258
+ const result = await chunkIYWWXOVK_cjs.createPostgresVectorIndex(db, indexOptions);
259
259
  if (!result.success) {
260
260
  throw new Error(
261
261
  result.message ?? "Failed to create PostgreSQL vector index"
@@ -265,13 +265,13 @@ function createPostgresOperationBackend(options) {
265
265
  async dropVectorIndex(params) {
266
266
  const metrics = POSTGRES_VECTOR_CAPABILITIES.vector?.metrics ?? ["cosine"];
267
267
  for (const metric of metrics) {
268
- const indexName = chunk2UTJRP4F_cjs.generateVectorIndexName(
268
+ const indexName = chunkIYWWXOVK_cjs.generateVectorIndexName(
269
269
  params.graphId,
270
270
  params.nodeKind,
271
271
  params.fieldPath,
272
272
  metric
273
273
  );
274
- const result = await chunk2UTJRP4F_cjs.dropPostgresVectorIndex(db, indexName);
274
+ const result = await chunkIYWWXOVK_cjs.dropPostgresVectorIndex(db, indexName);
275
275
  if (!result.success) {
276
276
  throw new Error(
277
277
  result.message ?? "Failed to drop PostgreSQL vector index"
@@ -301,39 +301,39 @@ function createTransactionBackend(options) {
301
301
 
302
302
  Object.defineProperty(exports, "createPostgresTables", {
303
303
  enumerable: true,
304
- get: function () { return chunk2UTJRP4F_cjs.createPostgresTables; }
304
+ get: function () { return chunkIYWWXOVK_cjs.createPostgresTables; }
305
305
  });
306
306
  Object.defineProperty(exports, "edges", {
307
307
  enumerable: true,
308
- get: function () { return chunk2UTJRP4F_cjs.edges; }
308
+ get: function () { return chunkIYWWXOVK_cjs.edges; }
309
309
  });
310
310
  Object.defineProperty(exports, "embeddings", {
311
311
  enumerable: true,
312
- get: function () { return chunk2UTJRP4F_cjs.embeddings; }
312
+ get: function () { return chunkIYWWXOVK_cjs.embeddings; }
313
313
  });
314
314
  Object.defineProperty(exports, "generatePostgresDDL", {
315
315
  enumerable: true,
316
- get: function () { return chunk2UTJRP4F_cjs.generatePostgresDDL; }
316
+ get: function () { return chunkIYWWXOVK_cjs.generatePostgresDDL; }
317
317
  });
318
318
  Object.defineProperty(exports, "generatePostgresMigrationSQL", {
319
319
  enumerable: true,
320
- get: function () { return chunk2UTJRP4F_cjs.generatePostgresMigrationSQL; }
320
+ get: function () { return chunkIYWWXOVK_cjs.generatePostgresMigrationSQL; }
321
321
  });
322
322
  Object.defineProperty(exports, "nodes", {
323
323
  enumerable: true,
324
- get: function () { return chunk2UTJRP4F_cjs.nodes; }
324
+ get: function () { return chunkIYWWXOVK_cjs.nodes; }
325
325
  });
326
326
  Object.defineProperty(exports, "schemaVersions", {
327
327
  enumerable: true,
328
- get: function () { return chunk2UTJRP4F_cjs.schemaVersions; }
328
+ get: function () { return chunkIYWWXOVK_cjs.schemaVersions; }
329
329
  });
330
330
  Object.defineProperty(exports, "tables", {
331
331
  enumerable: true,
332
- get: function () { return chunk2UTJRP4F_cjs.tables; }
332
+ get: function () { return chunkIYWWXOVK_cjs.tables; }
333
333
  });
334
334
  Object.defineProperty(exports, "uniques", {
335
335
  enumerable: true,
336
- get: function () { return chunk2UTJRP4F_cjs.uniques; }
336
+ get: function () { return chunkIYWWXOVK_cjs.uniques; }
337
337
  });
338
338
  exports.createPostgresBackend = createPostgresBackend;
339
339
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generatePostgresDDL, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-7ZVPFJLQ.js';
2
- export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-7ZVPFJLQ.js';
1
+ import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, POSTGRES_CAPABILITIES, tables, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generatePostgresDDL, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-QFZQGEQ3.js';
2
+ export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-QFZQGEQ3.js';
3
3
  import '../../chunk-WFMTAEEN.js';
4
4
  import '../../chunk-6GWJH6AR.js';
5
5
  import '../../chunk-GNIYZKBI.js';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk5H74QKKF_cjs = require('../../chunk-5H74QKKF.cjs');
4
- var chunk2UTJRP4F_cjs = require('../../chunk-2UTJRP4F.cjs');
3
+ var chunkHXJXTOXR_cjs = require('../../chunk-HXJXTOXR.cjs');
4
+ var chunkIYWWXOVK_cjs = require('../../chunk-IYWWXOVK.cjs');
5
5
  require('../../chunk-O5PST6TB.cjs');
6
6
  require('../../chunk-LELLOHJK.cjs');
7
7
  require('../../chunk-MME3H4ZF.cjs');
@@ -11,43 +11,43 @@ require('../../chunk-P5CNM325.cjs');
11
11
 
12
12
  Object.defineProperty(exports, "createSqliteBackend", {
13
13
  enumerable: true,
14
- get: function () { return chunk5H74QKKF_cjs.createSqliteBackend; }
14
+ get: function () { return chunkHXJXTOXR_cjs.createSqliteBackend; }
15
15
  });
16
16
  Object.defineProperty(exports, "createSqliteTables", {
17
17
  enumerable: true,
18
- get: function () { return chunk2UTJRP4F_cjs.createSqliteTables; }
18
+ get: function () { return chunkIYWWXOVK_cjs.createSqliteTables; }
19
19
  });
20
20
  Object.defineProperty(exports, "edges", {
21
21
  enumerable: true,
22
- get: function () { return chunk2UTJRP4F_cjs.edges2; }
22
+ get: function () { return chunkIYWWXOVK_cjs.edges2; }
23
23
  });
24
24
  Object.defineProperty(exports, "embeddings", {
25
25
  enumerable: true,
26
- get: function () { return chunk2UTJRP4F_cjs.embeddings2; }
26
+ get: function () { return chunkIYWWXOVK_cjs.embeddings2; }
27
27
  });
28
28
  Object.defineProperty(exports, "generateSqliteDDL", {
29
29
  enumerable: true,
30
- get: function () { return chunk2UTJRP4F_cjs.generateSqliteDDL; }
30
+ get: function () { return chunkIYWWXOVK_cjs.generateSqliteDDL; }
31
31
  });
32
32
  Object.defineProperty(exports, "generateSqliteMigrationSQL", {
33
33
  enumerable: true,
34
- get: function () { return chunk2UTJRP4F_cjs.generateSqliteMigrationSQL; }
34
+ get: function () { return chunkIYWWXOVK_cjs.generateSqliteMigrationSQL; }
35
35
  });
36
36
  Object.defineProperty(exports, "nodes", {
37
37
  enumerable: true,
38
- get: function () { return chunk2UTJRP4F_cjs.nodes2; }
38
+ get: function () { return chunkIYWWXOVK_cjs.nodes2; }
39
39
  });
40
40
  Object.defineProperty(exports, "schemaVersions", {
41
41
  enumerable: true,
42
- get: function () { return chunk2UTJRP4F_cjs.schemaVersions2; }
42
+ get: function () { return chunkIYWWXOVK_cjs.schemaVersions2; }
43
43
  });
44
44
  Object.defineProperty(exports, "tables", {
45
45
  enumerable: true,
46
- get: function () { return chunk2UTJRP4F_cjs.tables2; }
46
+ get: function () { return chunkIYWWXOVK_cjs.tables2; }
47
47
  });
48
48
  Object.defineProperty(exports, "uniques", {
49
49
  enumerable: true,
50
- get: function () { return chunk2UTJRP4F_cjs.uniques2; }
50
+ get: function () { return chunkIYWWXOVK_cjs.uniques2; }
51
51
  });
52
52
  //# sourceMappingURL=index.cjs.map
53
53
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- export { createSqliteBackend } from '../../chunk-IRS2C6GN.js';
2
- export { createSqliteTables, edges2 as edges, embeddings2 as embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes2 as nodes, schemaVersions2 as schemaVersions, tables2 as tables, uniques2 as uniques } from '../../chunk-7ZVPFJLQ.js';
1
+ export { createSqliteBackend } from '../../chunk-LLHFS53Q.js';
2
+ export { createSqliteTables, edges2 as edges, embeddings2 as embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes2 as nodes, schemaVersions2 as schemaVersions, tables2 as tables, uniques2 as uniques } from '../../chunk-QFZQGEQ3.js';
3
3
  import '../../chunk-WFMTAEEN.js';
4
4
  import '../../chunk-6GWJH6AR.js';
5
5
  import '../../chunk-GNIYZKBI.js';
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var chunkHXJXTOXR_cjs = require('../../chunk-HXJXTOXR.cjs');
4
+ var chunkIYWWXOVK_cjs = require('../../chunk-IYWWXOVK.cjs');
5
+ require('../../chunk-O5PST6TB.cjs');
6
+ require('../../chunk-LELLOHJK.cjs');
7
+ require('../../chunk-MME3H4ZF.cjs');
8
+ require('../../chunk-P5CNM325.cjs');
9
+ var libsql = require('drizzle-orm/libsql');
10
+
11
+ async function createLibsqlBackend(client, options = {}) {
12
+ const tables2 = options.tables ?? chunkIYWWXOVK_cjs.tables2;
13
+ const db = libsql.drizzle(client);
14
+ const ddlStatements = chunkIYWWXOVK_cjs.generateSqliteDDL(tables2);
15
+ await client.executeMultiple(ddlStatements.join(";\n"));
16
+ const backend = chunkHXJXTOXR_cjs.createSqliteBackend(db, {
17
+ executionProfile: {
18
+ isSync: false,
19
+ transactionMode: "drizzle"
20
+ },
21
+ tables: tables2
22
+ });
23
+ return { backend, db };
24
+ }
25
+
26
+ exports.createLibsqlBackend = createLibsqlBackend;
27
+ //# sourceMappingURL=libsql.cjs.map
28
+ //# sourceMappingURL=libsql.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":";;;;;;;;;;AA6FA,eAAsB,mBAAA,CACpB,MAAA,EACA,OAAA,GAAgC,EAAC,EACH;AAC9B,EAAA,MAAMA,OAAAA,GAAS,QAAQ,MAAA,IAAUA,yBAAA;AACjC,EAAA,MAAM,EAAA,GAAKC,eAAQ,MAAM,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgBC,oCAAkBF,OAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,GAAUG,sCAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ,KAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,MAAA,EAAAH;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,EAAA,EAAG;AACvB","file":"libsql.cjs","sourcesContent":["/**\n * libsql backend for TypeGraph.\n *\n * This module wraps `@libsql/client` with the correct execution profile\n * for use with TypeGraph. It is compatible with any `@libsql/client`\n * instance (local file, remote Turso, embedded replicas).\n *\n * @example In-memory database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Remote Turso database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"libsql://my-db.turso.io\", authToken: \"...\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n */\nimport type { Client } from \"@libsql/client\";\nimport { drizzle, type LibSQLDatabase } from \"drizzle-orm/libsql\";\n\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// Types\n// ============================================================\n\n/**\n * Options for creating a libsql backend.\n */\nexport type LibsqlBackendOptions = Readonly<{\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a libsql backend.\n */\nexport type LibsqlBackendResult = 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 sharing the connection.\n */\n db: LibSQLDatabase;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by `@libsql/client`.\n *\n * Handles DDL execution and configures the correct execution profile\n * (`isSync: false`, `transactionMode: \"drizzle\"`). The caller retains\n * ownership of the client and is responsible for closing it.\n *\n * @param client - An `@libsql/client` Client instance\n * @param options - Configuration options\n * @returns Backend and Drizzle database instances\n *\n * @example\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * ```\n */\nexport async function createLibsqlBackend(\n client: Client,\n options: LibsqlBackendOptions = {},\n): Promise<LibsqlBackendResult> {\n const tables = options.tables ?? defaultTables;\n const db = drizzle(client);\n\n const ddlStatements = generateSqliteDDL(tables);\n await client.executeMultiple(ddlStatements.join(\";\\n\"));\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: false,\n transactionMode: \"drizzle\",\n },\n tables,\n });\n\n return { backend, db };\n}\n"]}
@@ -0,0 +1,86 @@
1
+ import { Client } from '@libsql/client';
2
+ import { LibSQLDatabase } from 'drizzle-orm/libsql';
3
+ import { G as GraphBackend } from '../../types-B3mmOMJV.cjs';
4
+ import { S as SqliteTables } from '../../sqlite-DE-6NWtC.cjs';
5
+ import 'drizzle-orm';
6
+ import '../../types-DMzKq0d5.cjs';
7
+ import 'zod';
8
+ import 'drizzle-orm/sqlite-core';
9
+ import '../../types-CZd2PEOc.cjs';
10
+ import '../../ast-Bh2NDeaK.cjs';
11
+
12
+ /**
13
+ * libsql backend for TypeGraph.
14
+ *
15
+ * This module wraps `@libsql/client` with the correct execution profile
16
+ * for use with TypeGraph. It is compatible with any `@libsql/client`
17
+ * instance (local file, remote Turso, embedded replicas).
18
+ *
19
+ * @example In-memory database
20
+ * ```typescript
21
+ * import { createClient } from "@libsql/client";
22
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
23
+ *
24
+ * const client = createClient({ url: "file::memory:" });
25
+ * const { backend } = await createLibsqlBackend(client);
26
+ * const store = createStore(graph, backend);
27
+ * ```
28
+ *
29
+ * @example Remote Turso database
30
+ * ```typescript
31
+ * import { createClient } from "@libsql/client";
32
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
33
+ *
34
+ * const client = createClient({ url: "libsql://my-db.turso.io", authToken: "..." });
35
+ * const { backend } = await createLibsqlBackend(client);
36
+ * const store = createStore(graph, backend);
37
+ * ```
38
+ */
39
+
40
+ /**
41
+ * Options for creating a libsql backend.
42
+ */
43
+ type LibsqlBackendOptions = Readonly<{
44
+ /**
45
+ * Custom table definitions.
46
+ * Defaults to standard TypeGraph table names.
47
+ */
48
+ tables?: SqliteTables;
49
+ }>;
50
+ /**
51
+ * Result of creating a libsql backend.
52
+ */
53
+ type LibsqlBackendResult = Readonly<{
54
+ /**
55
+ * The GraphBackend instance for use with createStore.
56
+ */
57
+ backend: GraphBackend;
58
+ /**
59
+ * The underlying Drizzle database instance.
60
+ * Useful for direct SQL access or sharing the connection.
61
+ */
62
+ db: LibSQLDatabase;
63
+ }>;
64
+ /**
65
+ * Creates a TypeGraph backend backed by `@libsql/client`.
66
+ *
67
+ * Handles DDL execution and configures the correct execution profile
68
+ * (`isSync: false`, `transactionMode: "drizzle"`). The caller retains
69
+ * ownership of the client and is responsible for closing it.
70
+ *
71
+ * @param client - An `@libsql/client` Client instance
72
+ * @param options - Configuration options
73
+ * @returns Backend and Drizzle database instances
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * import { createClient } from "@libsql/client";
78
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
79
+ *
80
+ * const client = createClient({ url: "file::memory:" });
81
+ * const { backend } = await createLibsqlBackend(client);
82
+ * ```
83
+ */
84
+ declare function createLibsqlBackend(client: Client, options?: LibsqlBackendOptions): Promise<LibsqlBackendResult>;
85
+
86
+ export { type LibsqlBackendOptions, type LibsqlBackendResult, createLibsqlBackend };
@@ -0,0 +1,86 @@
1
+ import { Client } from '@libsql/client';
2
+ import { LibSQLDatabase } from 'drizzle-orm/libsql';
3
+ import { G as GraphBackend } from '../../types-ThB4cFLp.js';
4
+ import { S as SqliteTables } from '../../sqlite-Blq-AhmK.js';
5
+ import 'drizzle-orm';
6
+ import '../../types-DMzKq0d5.js';
7
+ import 'zod';
8
+ import 'drizzle-orm/sqlite-core';
9
+ import '../../types-Ceb01czq.js';
10
+ import '../../ast-COMyNeMn.js';
11
+
12
+ /**
13
+ * libsql backend for TypeGraph.
14
+ *
15
+ * This module wraps `@libsql/client` with the correct execution profile
16
+ * for use with TypeGraph. It is compatible with any `@libsql/client`
17
+ * instance (local file, remote Turso, embedded replicas).
18
+ *
19
+ * @example In-memory database
20
+ * ```typescript
21
+ * import { createClient } from "@libsql/client";
22
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
23
+ *
24
+ * const client = createClient({ url: "file::memory:" });
25
+ * const { backend } = await createLibsqlBackend(client);
26
+ * const store = createStore(graph, backend);
27
+ * ```
28
+ *
29
+ * @example Remote Turso database
30
+ * ```typescript
31
+ * import { createClient } from "@libsql/client";
32
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
33
+ *
34
+ * const client = createClient({ url: "libsql://my-db.turso.io", authToken: "..." });
35
+ * const { backend } = await createLibsqlBackend(client);
36
+ * const store = createStore(graph, backend);
37
+ * ```
38
+ */
39
+
40
+ /**
41
+ * Options for creating a libsql backend.
42
+ */
43
+ type LibsqlBackendOptions = Readonly<{
44
+ /**
45
+ * Custom table definitions.
46
+ * Defaults to standard TypeGraph table names.
47
+ */
48
+ tables?: SqliteTables;
49
+ }>;
50
+ /**
51
+ * Result of creating a libsql backend.
52
+ */
53
+ type LibsqlBackendResult = Readonly<{
54
+ /**
55
+ * The GraphBackend instance for use with createStore.
56
+ */
57
+ backend: GraphBackend;
58
+ /**
59
+ * The underlying Drizzle database instance.
60
+ * Useful for direct SQL access or sharing the connection.
61
+ */
62
+ db: LibSQLDatabase;
63
+ }>;
64
+ /**
65
+ * Creates a TypeGraph backend backed by `@libsql/client`.
66
+ *
67
+ * Handles DDL execution and configures the correct execution profile
68
+ * (`isSync: false`, `transactionMode: "drizzle"`). The caller retains
69
+ * ownership of the client and is responsible for closing it.
70
+ *
71
+ * @param client - An `@libsql/client` Client instance
72
+ * @param options - Configuration options
73
+ * @returns Backend and Drizzle database instances
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * import { createClient } from "@libsql/client";
78
+ * import { createLibsqlBackend } from "@nicia-ai/typegraph/sqlite/libsql";
79
+ *
80
+ * const client = createClient({ url: "file::memory:" });
81
+ * const { backend } = await createLibsqlBackend(client);
82
+ * ```
83
+ */
84
+ declare function createLibsqlBackend(client: Client, options?: LibsqlBackendOptions): Promise<LibsqlBackendResult>;
85
+
86
+ export { type LibsqlBackendOptions, type LibsqlBackendResult, createLibsqlBackend };
@@ -0,0 +1,26 @@
1
+ import { createSqliteBackend } from '../../chunk-LLHFS53Q.js';
2
+ import { tables2, generateSqliteDDL } from '../../chunk-QFZQGEQ3.js';
3
+ import '../../chunk-WFMTAEEN.js';
4
+ import '../../chunk-6GWJH6AR.js';
5
+ import '../../chunk-GNIYZKBI.js';
6
+ import '../../chunk-K7SQ3SWP.js';
7
+ import { drizzle } from 'drizzle-orm/libsql';
8
+
9
+ async function createLibsqlBackend(client, options = {}) {
10
+ const tables2$1 = options.tables ?? tables2;
11
+ const db = drizzle(client);
12
+ const ddlStatements = generateSqliteDDL(tables2$1);
13
+ await client.executeMultiple(ddlStatements.join(";\n"));
14
+ const backend = createSqliteBackend(db, {
15
+ executionProfile: {
16
+ isSync: false,
17
+ transactionMode: "drizzle"
18
+ },
19
+ tables: tables2$1
20
+ });
21
+ return { backend, db };
22
+ }
23
+
24
+ export { createLibsqlBackend };
25
+ //# sourceMappingURL=libsql.js.map
26
+ //# sourceMappingURL=libsql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables"],"mappings":";;;;;;;;AA6FA,eAAsB,mBAAA,CACpB,MAAA,EACA,OAAA,GAAgC,EAAC,EACH;AAC9B,EAAA,MAAMA,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AACjC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ,KAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,MAAA,EAAAA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,EAAA,EAAG;AACvB","file":"libsql.js","sourcesContent":["/**\n * libsql backend for TypeGraph.\n *\n * This module wraps `@libsql/client` with the correct execution profile\n * for use with TypeGraph. It is compatible with any `@libsql/client`\n * instance (local file, remote Turso, embedded replicas).\n *\n * @example In-memory database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Remote Turso database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"libsql://my-db.turso.io\", authToken: \"...\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n */\nimport type { Client } from \"@libsql/client\";\nimport { drizzle, type LibSQLDatabase } from \"drizzle-orm/libsql\";\n\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// Types\n// ============================================================\n\n/**\n * Options for creating a libsql backend.\n */\nexport type LibsqlBackendOptions = Readonly<{\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a libsql backend.\n */\nexport type LibsqlBackendResult = 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 sharing the connection.\n */\n db: LibSQLDatabase;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by `@libsql/client`.\n *\n * Handles DDL execution and configures the correct execution profile\n * (`isSync: false`, `transactionMode: \"drizzle\"`). The caller retains\n * ownership of the client and is responsible for closing it.\n *\n * @param client - An `@libsql/client` Client instance\n * @param options - Configuration options\n * @returns Backend and Drizzle database instances\n *\n * @example\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * ```\n */\nexport async function createLibsqlBackend(\n client: Client,\n options: LibsqlBackendOptions = {},\n): Promise<LibsqlBackendResult> {\n const tables = options.tables ?? defaultTables;\n const db = drizzle(client);\n\n const ddlStatements = generateSqliteDDL(tables);\n await client.executeMultiple(ddlStatements.join(\";\\n\"));\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: false,\n transactionMode: \"drizzle\",\n },\n tables,\n });\n\n return { backend, db };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk5H74QKKF_cjs = require('../../chunk-5H74QKKF.cjs');
4
- var chunk2UTJRP4F_cjs = require('../../chunk-2UTJRP4F.cjs');
3
+ var chunkHXJXTOXR_cjs = require('../../chunk-HXJXTOXR.cjs');
4
+ var chunkIYWWXOVK_cjs = require('../../chunk-IYWWXOVK.cjs');
5
5
  var chunkO5PST6TB_cjs = require('../../chunk-O5PST6TB.cjs');
6
6
  require('../../chunk-LELLOHJK.cjs');
7
7
  require('../../chunk-MME3H4ZF.cjs');
@@ -53,27 +53,22 @@ function createDatabase(path) {
53
53
  }
54
54
  function createLocalSqliteBackend(options = {}) {
55
55
  const path = options.path ?? ":memory:";
56
- const tables2 = options.tables ?? chunk2UTJRP4F_cjs.tables2;
56
+ const tables2 = options.tables ?? chunkIYWWXOVK_cjs.tables2;
57
57
  const sqlite = createDatabase(path);
58
58
  const db = betterSqlite3.drizzle(sqlite);
59
- const ddlStatements = chunk2UTJRP4F_cjs.generateSqliteDDL(tables2);
59
+ const ddlStatements = chunkIYWWXOVK_cjs.generateSqliteDDL(tables2);
60
60
  for (const statement of ddlStatements) {
61
61
  sqlite.exec(statement);
62
62
  }
63
- const backend = chunk5H74QKKF_cjs.createSqliteBackend(db, {
63
+ const backend = chunkHXJXTOXR_cjs.createSqliteBackend(db, {
64
64
  executionProfile: {
65
65
  isSync: true
66
66
  },
67
67
  tables: tables2
68
68
  });
69
- let isClosed = false;
70
- async function close() {
71
- if (isClosed) return;
72
- isClosed = true;
73
- await backend.close();
69
+ const managedBackend = chunkIYWWXOVK_cjs.wrapWithManagedClose(backend, () => {
74
70
  sqlite.close();
75
- }
76
- const managedBackend = { ...backend, close };
71
+ });
77
72
  return { backend: managedBackend, db };
78
73
  }
79
74
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"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,IAAIA,0BAAS,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,IAAIC,oCAAA;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,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAUA,yBAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,MAAM,EAAA,GAAKC,sBAAQ,MAAM,CAAA;AAGzB,EAAA,MAAM,aAAA,GAAgBC,oCAAkBF,OAAM,CAAA;AAC9C,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,OAAA,GAAUG,sCAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAAH;AAAA,GACD,CAAA;AACD,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,eAAe,KAAA,GAAuB;AACpC,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,IAAA,MAAA,CAAO,KAAA,EAAM;AAAA,EACf;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.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 async function close(): Promise<void> {\n if (isClosed) return;\n isClosed = true;\n await backend.close();\n sqlite.close();\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","wrapWithManagedClose"],"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,IAAIA,0BAAS,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,IAAIC,oCAAA;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,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAUA,yBAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,MAAM,EAAA,GAAKC,sBAAQ,MAAM,CAAA;AAGzB,EAAA,MAAM,aAAA,GAAgBC,oCAAkBF,OAAM,CAAA;AAC9C,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,OAAA,GAAUG,sCAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAAH;AAAA,GACD,CAAA;AACD,EAAA,MAAM,cAAA,GAAiBI,sCAAA,CAAqB,OAAA,EAAS,MAAM;AACzD,IAAA,MAAA,CAAO,KAAA,EAAM;AAAA,EACf,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,EAAA,EAAG;AACvC","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, wrapWithManagedClose } 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 const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { createSqliteBackend } from '../../chunk-IRS2C6GN.js';
2
- import { tables2, generateSqliteDDL } from '../../chunk-7ZVPFJLQ.js';
1
+ import { createSqliteBackend } from '../../chunk-LLHFS53Q.js';
2
+ import { tables2, generateSqliteDDL, wrapWithManagedClose } from '../../chunk-QFZQGEQ3.js';
3
3
  import { ConfigurationError } from '../../chunk-WFMTAEEN.js';
4
4
  import '../../chunk-6GWJH6AR.js';
5
5
  import '../../chunk-GNIYZKBI.js';
@@ -60,14 +60,9 @@ function createLocalSqliteBackend(options = {}) {
60
60
  },
61
61
  tables: tables2$1
62
62
  });
63
- let isClosed = false;
64
- async function close() {
65
- if (isClosed) return;
66
- isClosed = true;
67
- await backend.close();
63
+ const managedBackend = wrapWithManagedClose(backend, () => {
68
64
  sqlite.close();
69
- }
70
- const managedBackend = { ...backend, close };
65
+ });
71
66
  return { backend: managedBackend, db };
72
67
  }
73
68