@nicia-ai/typegraph 0.21.0 → 0.22.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 (43) hide show
  1. package/dist/backend/postgres/index.cjs +33 -33
  2. package/dist/backend/postgres/index.js +4 -4
  3. package/dist/backend/sqlite/index.cjs +14 -14
  4. package/dist/backend/sqlite/index.d.cts +11 -0
  5. package/dist/backend/sqlite/index.d.ts +11 -0
  6. package/dist/backend/sqlite/index.js +4 -4
  7. package/dist/backend/sqlite/libsql.cjs +7 -7
  8. package/dist/backend/sqlite/libsql.js +4 -4
  9. package/dist/backend/sqlite/local.cjs +26 -9
  10. package/dist/backend/sqlite/local.cjs.map +1 -1
  11. package/dist/backend/sqlite/local.js +21 -5
  12. package/dist/backend/sqlite/local.js.map +1 -1
  13. package/dist/{chunk-FQCQM3KG.cjs → chunk-3JK66E3I.cjs} +4 -2
  14. package/dist/chunk-3JK66E3I.cjs.map +1 -0
  15. package/dist/{chunk-SMMOAVJ5.js → chunk-3PPEHLGK.js} +3 -3
  16. package/dist/{chunk-SMMOAVJ5.js.map → chunk-3PPEHLGK.js.map} +1 -1
  17. package/dist/{chunk-UQVBVBVG.js → chunk-5ZMMHUWR.js} +53 -7
  18. package/dist/chunk-5ZMMHUWR.js.map +1 -0
  19. package/dist/{chunk-4XNE2JG3.js → chunk-753F33CV.js} +4 -2
  20. package/dist/chunk-753F33CV.js.map +1 -0
  21. package/dist/{chunk-CQL6FOTT.cjs → chunk-GUYI6VAS.cjs} +43 -24
  22. package/dist/chunk-GUYI6VAS.cjs.map +1 -0
  23. package/dist/{chunk-NRNJ52AA.js → chunk-NSLTDXVH.js} +26 -7
  24. package/dist/chunk-NSLTDXVH.js.map +1 -0
  25. package/dist/{chunk-2X7P7AD5.cjs → chunk-PEE4EWXZ.cjs} +22 -22
  26. package/dist/{chunk-2X7P7AD5.cjs.map → chunk-PEE4EWXZ.cjs.map} +1 -1
  27. package/dist/{chunk-Q73OWTJY.cjs → chunk-SCXOGKLD.cjs} +112 -66
  28. package/dist/chunk-SCXOGKLD.cjs.map +1 -0
  29. package/dist/index.cjs +135 -54
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +45 -1
  32. package/dist/index.d.ts +45 -1
  33. package/dist/index.js +115 -36
  34. package/dist/index.js.map +1 -1
  35. package/dist/indexes/index.cjs +16 -16
  36. package/dist/indexes/index.js +2 -2
  37. package/package.json +1 -1
  38. package/dist/chunk-4XNE2JG3.js.map +0 -1
  39. package/dist/chunk-CQL6FOTT.cjs.map +0 -1
  40. package/dist/chunk-FQCQM3KG.cjs.map +0 -1
  41. package/dist/chunk-NRNJ52AA.js.map +0 -1
  42. package/dist/chunk-Q73OWTJY.cjs.map +0 -1
  43. package/dist/chunk-UQVBVBVG.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkQ73OWTJY_cjs = require('../../chunk-Q73OWTJY.cjs');
3
+ var chunkSCXOGKLD_cjs = require('../../chunk-SCXOGKLD.cjs');
4
4
  require('../../chunk-O5PST6TB.cjs');
5
- require('../../chunk-2X7P7AD5.cjs');
6
- var chunkFQCQM3KG_cjs = require('../../chunk-FQCQM3KG.cjs');
5
+ require('../../chunk-PEE4EWXZ.cjs');
6
+ var chunk3JK66E3I_cjs = require('../../chunk-3JK66E3I.cjs');
7
7
  require('../../chunk-UVZHTBZ5.cjs');
8
8
  var drizzleOrm = require('drizzle-orm');
9
9
 
@@ -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 chunkQ73OWTJY_cjs.compileQueryWithDialect(db, query, "PostgreSQL");
34
+ return chunkSCXOGKLD_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 = chunkQ73OWTJY_cjs.createNodeRowMapper(chunkQ73OWTJY_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
- var toEdgeRow = chunkQ73OWTJY_cjs.createEdgeRowMapper(chunkQ73OWTJY_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
- var toUniqueRow = chunkQ73OWTJY_cjs.createUniqueRowMapper(chunkQ73OWTJY_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
- var toSchemaVersionRow = chunkQ73OWTJY_cjs.createSchemaVersionRowMapper(chunkQ73OWTJY_cjs.POSTGRES_ROW_MAPPER_CONFIG);
89
+ var toNodeRow = chunkSCXOGKLD_cjs.createNodeRowMapper(chunkSCXOGKLD_cjs.POSTGRES_ROW_MAPPER_CONFIG);
90
+ var toEdgeRow = chunkSCXOGKLD_cjs.createEdgeRowMapper(chunkSCXOGKLD_cjs.POSTGRES_ROW_MAPPER_CONFIG);
91
+ var toUniqueRow = chunkSCXOGKLD_cjs.createUniqueRowMapper(chunkSCXOGKLD_cjs.POSTGRES_ROW_MAPPER_CONFIG);
92
+ var toSchemaVersionRow = chunkSCXOGKLD_cjs.createSchemaVersionRowMapper(chunkSCXOGKLD_cjs.POSTGRES_ROW_MAPPER_CONFIG);
93
93
  function toEmbeddingRow(row) {
94
94
  let embedding;
95
95
  if (typeof row.embedding === "string") {
@@ -107,8 +107,8 @@ function toEmbeddingRow(row) {
107
107
  field_path: row.field_path,
108
108
  embedding,
109
109
  dimensions: row.dimensions,
110
- created_at: chunkQ73OWTJY_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
- updated_at: chunkQ73OWTJY_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
110
+ created_at: chunkSCXOGKLD_cjs.formatPostgresTimestamp(row.created_at) ?? "",
111
+ updated_at: chunkSCXOGKLD_cjs.formatPostgresTimestamp(row.updated_at) ?? ""
112
112
  };
113
113
  }
114
114
  function coerceNumericScore(value) {
@@ -123,7 +123,7 @@ function coerceNumericScore(value) {
123
123
  }
124
124
  function buildPostgresCapabilities(strategy) {
125
125
  return {
126
- ...chunkQ73OWTJY_cjs.POSTGRES_CAPABILITIES,
126
+ ...chunkSCXOGKLD_cjs.POSTGRES_CAPABILITIES,
127
127
  vector: {
128
128
  supported: true,
129
129
  metrics: ["cosine", "l2", "inner_product"],
@@ -131,12 +131,12 @@ function buildPostgresCapabilities(strategy) {
131
131
  maxDimensions: 16e3
132
132
  // pgvector limit
133
133
  },
134
- fulltext: chunkFQCQM3KG_cjs.buildFulltextCapabilities(strategy)
134
+ fulltext: chunk3JK66E3I_cjs.buildFulltextCapabilities(strategy)
135
135
  };
136
136
  }
137
137
  function createPostgresBackend(db, options = {}) {
138
- const tables2 = options.tables ?? chunkQ73OWTJY_cjs.tables;
139
- const fulltextStrategy = options.fulltext ?? chunkFQCQM3KG_cjs.tsvectorStrategy;
138
+ const tables2 = options.tables ?? chunkSCXOGKLD_cjs.tables;
139
+ const fulltextStrategy = options.fulltext ?? chunk3JK66E3I_cjs.tsvectorStrategy;
140
140
  const capabilities = buildPostgresCapabilities(fulltextStrategy);
141
141
  const executionAdapter = createPostgresExecutionAdapter(db);
142
142
  const tableNames = {
@@ -145,7 +145,7 @@ function createPostgresBackend(db, options = {}) {
145
145
  embeddings: drizzleOrm.getTableName(tables2.embeddings),
146
146
  fulltext: tables2.fulltextTableName
147
147
  };
148
- const operationStrategy = chunkQ73OWTJY_cjs.createPostgresOperationStrategy(
148
+ const operationStrategy = chunkSCXOGKLD_cjs.createPostgresOperationStrategy(
149
149
  tables2,
150
150
  fulltextStrategy
151
151
  );
@@ -160,7 +160,7 @@ function createPostgresBackend(db, options = {}) {
160
160
  const backend = {
161
161
  ...operations,
162
162
  async bootstrapTables() {
163
- const statements = chunkQ73OWTJY_cjs.generatePostgresDDL(tables2, fulltextStrategy);
163
+ const statements = chunkSCXOGKLD_cjs.generatePostgresDDL(tables2, fulltextStrategy);
164
164
  for (const statement of statements) {
165
165
  await db.execute(drizzleOrm.sql.raw(statement));
166
166
  }
@@ -210,7 +210,7 @@ function createPostgresOperationBackend(options) {
210
210
  async function execRun(query) {
211
211
  await db.execute(query);
212
212
  }
213
- const commonBackend = chunkQ73OWTJY_cjs.createCommonOperationBackend({
213
+ const commonBackend = chunkSCXOGKLD_cjs.createCommonOperationBackend({
214
214
  batchConfig: {
215
215
  checkUniqueBatchChunkSize: POSTGRES_CHECK_UNIQUE_BATCH_CHUNK_SIZE,
216
216
  edgeInsertBatchSize: POSTGRES_EDGE_INSERT_BATCH_SIZE,
@@ -223,7 +223,7 @@ function createPostgresOperationBackend(options) {
223
223
  execGet,
224
224
  execRun
225
225
  },
226
- nowIso: chunkQ73OWTJY_cjs.nowIso,
226
+ nowIso: chunkSCXOGKLD_cjs.nowIso,
227
227
  operationStrategy,
228
228
  rowMappers: {
229
229
  toEdgeRow,
@@ -247,7 +247,7 @@ function createPostgresOperationBackend(options) {
247
247
  tableNames,
248
248
  // === Embedding Operations ===
249
249
  async upsertEmbedding(params) {
250
- const timestamp = chunkQ73OWTJY_cjs.nowIso();
250
+ const timestamp = chunkSCXOGKLD_cjs.nowIso();
251
251
  const query = operationStrategy.buildUpsertEmbedding(params, timestamp);
252
252
  await execRun(query);
253
253
  },
@@ -286,7 +286,7 @@ function createPostgresOperationBackend(options) {
286
286
  ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
287
287
  ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
288
288
  };
289
- const result = await chunkQ73OWTJY_cjs.createPostgresVectorIndex(db, indexOptions);
289
+ const result = await chunkSCXOGKLD_cjs.createPostgresVectorIndex(db, indexOptions);
290
290
  if (!result.success) {
291
291
  throw new Error(
292
292
  result.message ?? "Failed to create PostgreSQL vector index"
@@ -295,7 +295,7 @@ function createPostgresOperationBackend(options) {
295
295
  },
296
296
  // === Fulltext Operations ===
297
297
  async upsertFulltext(params) {
298
- const timestamp = chunkQ73OWTJY_cjs.nowIso();
298
+ const timestamp = chunkSCXOGKLD_cjs.nowIso();
299
299
  const statements = operationStrategy.buildUpsertFulltext(
300
300
  params,
301
301
  timestamp
@@ -312,7 +312,7 @@ function createPostgresOperationBackend(options) {
312
312
  },
313
313
  async upsertFulltextBatch(params) {
314
314
  if (params.rows.length === 0) return;
315
- const timestamp = chunkQ73OWTJY_cjs.nowIso();
315
+ const timestamp = chunkSCXOGKLD_cjs.nowIso();
316
316
  const statements = operationStrategy.buildUpsertFulltextBatch(
317
317
  params,
318
318
  timestamp
@@ -341,13 +341,13 @@ function createPostgresOperationBackend(options) {
341
341
  async dropVectorIndex(params) {
342
342
  const metrics = capabilities.vector?.metrics ?? ["cosine"];
343
343
  for (const metric of metrics) {
344
- const indexName = chunkQ73OWTJY_cjs.generateVectorIndexName(
344
+ const indexName = chunkSCXOGKLD_cjs.generateVectorIndexName(
345
345
  params.graphId,
346
346
  params.nodeKind,
347
347
  params.fieldPath,
348
348
  metric
349
349
  );
350
- const result = await chunkQ73OWTJY_cjs.dropPostgresVectorIndex(db, indexName);
350
+ const result = await chunkSCXOGKLD_cjs.dropPostgresVectorIndex(db, indexName);
351
351
  if (!result.success) {
352
352
  throw new Error(
353
353
  result.message ?? "Failed to drop PostgreSQL vector index"
@@ -379,39 +379,39 @@ function createTransactionBackend(options) {
379
379
 
380
380
  Object.defineProperty(exports, "createPostgresTables", {
381
381
  enumerable: true,
382
- get: function () { return chunkQ73OWTJY_cjs.createPostgresTables; }
382
+ get: function () { return chunkSCXOGKLD_cjs.createPostgresTables; }
383
383
  });
384
384
  Object.defineProperty(exports, "edges", {
385
385
  enumerable: true,
386
- get: function () { return chunkQ73OWTJY_cjs.edges; }
386
+ get: function () { return chunkSCXOGKLD_cjs.edges; }
387
387
  });
388
388
  Object.defineProperty(exports, "embeddings", {
389
389
  enumerable: true,
390
- get: function () { return chunkQ73OWTJY_cjs.embeddings; }
390
+ get: function () { return chunkSCXOGKLD_cjs.embeddings; }
391
391
  });
392
392
  Object.defineProperty(exports, "generatePostgresDDL", {
393
393
  enumerable: true,
394
- get: function () { return chunkQ73OWTJY_cjs.generatePostgresDDL; }
394
+ get: function () { return chunkSCXOGKLD_cjs.generatePostgresDDL; }
395
395
  });
396
396
  Object.defineProperty(exports, "generatePostgresMigrationSQL", {
397
397
  enumerable: true,
398
- get: function () { return chunkQ73OWTJY_cjs.generatePostgresMigrationSQL; }
398
+ get: function () { return chunkSCXOGKLD_cjs.generatePostgresMigrationSQL; }
399
399
  });
400
400
  Object.defineProperty(exports, "nodes", {
401
401
  enumerable: true,
402
- get: function () { return chunkQ73OWTJY_cjs.nodes; }
402
+ get: function () { return chunkSCXOGKLD_cjs.nodes; }
403
403
  });
404
404
  Object.defineProperty(exports, "schemaVersions", {
405
405
  enumerable: true,
406
- get: function () { return chunkQ73OWTJY_cjs.schemaVersions; }
406
+ get: function () { return chunkSCXOGKLD_cjs.schemaVersions; }
407
407
  });
408
408
  Object.defineProperty(exports, "tables", {
409
409
  enumerable: true,
410
- get: function () { return chunkQ73OWTJY_cjs.tables; }
410
+ get: function () { return chunkSCXOGKLD_cjs.tables; }
411
411
  });
412
412
  Object.defineProperty(exports, "uniques", {
413
413
  enumerable: true,
414
- get: function () { return chunkQ73OWTJY_cjs.uniques; }
414
+ get: function () { return chunkSCXOGKLD_cjs.uniques; }
415
415
  });
416
416
  exports.createPostgresBackend = createPostgresBackend;
417
417
  //# sourceMappingURL=index.cjs.map
@@ -1,8 +1,8 @@
1
- import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, tables, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generatePostgresDDL, POSTGRES_CAPABILITIES, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-UQVBVBVG.js';
2
- export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-UQVBVBVG.js';
1
+ import { createNodeRowMapper, POSTGRES_ROW_MAPPER_CONFIG, createEdgeRowMapper, createUniqueRowMapper, createSchemaVersionRowMapper, tables, createPostgresOperationStrategy, createCommonOperationBackend, nowIso, generatePostgresDDL, POSTGRES_CAPABILITIES, generateVectorIndexName, dropPostgresVectorIndex, createPostgresVectorIndex, compileQueryWithDialect, formatPostgresTimestamp } from '../../chunk-5ZMMHUWR.js';
2
+ export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-5ZMMHUWR.js';
3
3
  import '../../chunk-WFMTAEEN.js';
4
- import '../../chunk-SMMOAVJ5.js';
5
- import { tsvectorStrategy, buildFulltextCapabilities } from '../../chunk-4XNE2JG3.js';
4
+ import '../../chunk-3PPEHLGK.js';
5
+ import { tsvectorStrategy, buildFulltextCapabilities } from '../../chunk-753F33CV.js';
6
6
  import '../../chunk-EYELZHKY.js';
7
7
  import { getTableName, sql } from 'drizzle-orm';
8
8
 
@@ -1,53 +1,53 @@
1
1
  'use strict';
2
2
 
3
- var chunkCQL6FOTT_cjs = require('../../chunk-CQL6FOTT.cjs');
4
- var chunkQ73OWTJY_cjs = require('../../chunk-Q73OWTJY.cjs');
3
+ var chunkGUYI6VAS_cjs = require('../../chunk-GUYI6VAS.cjs');
4
+ var chunkSCXOGKLD_cjs = require('../../chunk-SCXOGKLD.cjs');
5
5
  require('../../chunk-O5PST6TB.cjs');
6
- require('../../chunk-2X7P7AD5.cjs');
7
- require('../../chunk-FQCQM3KG.cjs');
6
+ require('../../chunk-PEE4EWXZ.cjs');
7
+ require('../../chunk-3JK66E3I.cjs');
8
8
  require('../../chunk-UVZHTBZ5.cjs');
9
9
 
10
10
 
11
11
 
12
12
  Object.defineProperty(exports, "createSqliteBackend", {
13
13
  enumerable: true,
14
- get: function () { return chunkCQL6FOTT_cjs.createSqliteBackend; }
14
+ get: function () { return chunkGUYI6VAS_cjs.createSqliteBackend; }
15
15
  });
16
16
  Object.defineProperty(exports, "createSqliteTables", {
17
17
  enumerable: true,
18
- get: function () { return chunkQ73OWTJY_cjs.createSqliteTables; }
18
+ get: function () { return chunkSCXOGKLD_cjs.createSqliteTables; }
19
19
  });
20
20
  Object.defineProperty(exports, "edges", {
21
21
  enumerable: true,
22
- get: function () { return chunkQ73OWTJY_cjs.edges2; }
22
+ get: function () { return chunkSCXOGKLD_cjs.edges2; }
23
23
  });
24
24
  Object.defineProperty(exports, "embeddings", {
25
25
  enumerable: true,
26
- get: function () { return chunkQ73OWTJY_cjs.embeddings2; }
26
+ get: function () { return chunkSCXOGKLD_cjs.embeddings2; }
27
27
  });
28
28
  Object.defineProperty(exports, "generateSqliteDDL", {
29
29
  enumerable: true,
30
- get: function () { return chunkQ73OWTJY_cjs.generateSqliteDDL; }
30
+ get: function () { return chunkSCXOGKLD_cjs.generateSqliteDDL; }
31
31
  });
32
32
  Object.defineProperty(exports, "generateSqliteMigrationSQL", {
33
33
  enumerable: true,
34
- get: function () { return chunkQ73OWTJY_cjs.generateSqliteMigrationSQL; }
34
+ get: function () { return chunkSCXOGKLD_cjs.generateSqliteMigrationSQL; }
35
35
  });
36
36
  Object.defineProperty(exports, "nodes", {
37
37
  enumerable: true,
38
- get: function () { return chunkQ73OWTJY_cjs.nodes2; }
38
+ get: function () { return chunkSCXOGKLD_cjs.nodes2; }
39
39
  });
40
40
  Object.defineProperty(exports, "schemaVersions", {
41
41
  enumerable: true,
42
- get: function () { return chunkQ73OWTJY_cjs.schemaVersions2; }
42
+ get: function () { return chunkSCXOGKLD_cjs.schemaVersions2; }
43
43
  });
44
44
  Object.defineProperty(exports, "tables", {
45
45
  enumerable: true,
46
- get: function () { return chunkQ73OWTJY_cjs.tables2; }
46
+ get: function () { return chunkSCXOGKLD_cjs.tables2; }
47
47
  });
48
48
  Object.defineProperty(exports, "uniques", {
49
49
  enumerable: true,
50
- get: function () { return chunkQ73OWTJY_cjs.uniques2; }
50
+ get: function () { return chunkSCXOGKLD_cjs.uniques2; }
51
51
  });
52
52
  //# sourceMappingURL=index.cjs.map
53
53
  //# sourceMappingURL=index.cjs.map
@@ -46,6 +46,17 @@ type SqliteBackendOptions = Readonly<{
46
46
  * built-in FTS5 virtual table). Most users should leave this alone.
47
47
  */
48
48
  fulltext?: FulltextStrategy;
49
+ /**
50
+ * Set to `true` when sqlite-vec has been loaded on the connection.
51
+ * Enables vector embedding persistence via `upsertEmbedding` /
52
+ * `deleteEmbedding`, which the store's embedding-sync path relies on
53
+ * whenever node schemas declare `embedding()` fields. When omitted the
54
+ * backend does not expose those methods and embedding values pass
55
+ * through writes without being indexed — matching existing behavior
56
+ * for backends without sqlite-vec. `createLocalSqliteBackend` sets
57
+ * this automatically when it loads the extension.
58
+ */
59
+ hasVectorEmbeddings?: boolean;
49
60
  }>;
50
61
  declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
51
62
 
@@ -46,6 +46,17 @@ type SqliteBackendOptions = Readonly<{
46
46
  * built-in FTS5 virtual table). Most users should leave this alone.
47
47
  */
48
48
  fulltext?: FulltextStrategy;
49
+ /**
50
+ * Set to `true` when sqlite-vec has been loaded on the connection.
51
+ * Enables vector embedding persistence via `upsertEmbedding` /
52
+ * `deleteEmbedding`, which the store's embedding-sync path relies on
53
+ * whenever node schemas declare `embedding()` fields. When omitted the
54
+ * backend does not expose those methods and embedding values pass
55
+ * through writes without being indexed — matching existing behavior
56
+ * for backends without sqlite-vec. `createLocalSqliteBackend` sets
57
+ * this automatically when it loads the extension.
58
+ */
59
+ hasVectorEmbeddings?: boolean;
49
60
  }>;
50
61
  declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
51
62
 
@@ -1,8 +1,8 @@
1
- export { createSqliteBackend } from '../../chunk-NRNJ52AA.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-UQVBVBVG.js';
1
+ export { createSqliteBackend } from '../../chunk-NSLTDXVH.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-5ZMMHUWR.js';
3
3
  import '../../chunk-WFMTAEEN.js';
4
- import '../../chunk-SMMOAVJ5.js';
5
- import '../../chunk-4XNE2JG3.js';
4
+ import '../../chunk-3PPEHLGK.js';
5
+ import '../../chunk-753F33CV.js';
6
6
  import '../../chunk-EYELZHKY.js';
7
7
  //# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var chunkCQL6FOTT_cjs = require('../../chunk-CQL6FOTT.cjs');
4
- var chunkQ73OWTJY_cjs = require('../../chunk-Q73OWTJY.cjs');
3
+ var chunkGUYI6VAS_cjs = require('../../chunk-GUYI6VAS.cjs');
4
+ var chunkSCXOGKLD_cjs = require('../../chunk-SCXOGKLD.cjs');
5
5
  require('../../chunk-O5PST6TB.cjs');
6
- require('../../chunk-2X7P7AD5.cjs');
7
- require('../../chunk-FQCQM3KG.cjs');
6
+ require('../../chunk-PEE4EWXZ.cjs');
7
+ require('../../chunk-3JK66E3I.cjs');
8
8
  require('../../chunk-UVZHTBZ5.cjs');
9
9
  var libsql = require('drizzle-orm/libsql');
10
10
 
11
11
  async function createLibsqlBackend(client, options = {}) {
12
- const tables2 = options.tables ?? chunkQ73OWTJY_cjs.tables2;
12
+ const tables2 = options.tables ?? chunkSCXOGKLD_cjs.tables2;
13
13
  const db = libsql.drizzle(client);
14
- const ddlStatements = chunkQ73OWTJY_cjs.generateSqliteDDL(tables2);
14
+ const ddlStatements = chunkSCXOGKLD_cjs.generateSqliteDDL(tables2);
15
15
  await client.executeMultiple(ddlStatements.join(";\n"));
16
- const backend = chunkCQL6FOTT_cjs.createSqliteBackend(db, {
16
+ const backend = chunkGUYI6VAS_cjs.createSqliteBackend(db, {
17
17
  executionProfile: {
18
18
  isSync: false,
19
19
  transactionMode: "drizzle"
@@ -1,8 +1,8 @@
1
- import { createSqliteBackend } from '../../chunk-NRNJ52AA.js';
2
- import { tables2, generateSqliteDDL } from '../../chunk-UQVBVBVG.js';
1
+ import { createSqliteBackend } from '../../chunk-NSLTDXVH.js';
2
+ import { tables2, generateSqliteDDL } from '../../chunk-5ZMMHUWR.js';
3
3
  import '../../chunk-WFMTAEEN.js';
4
- import '../../chunk-SMMOAVJ5.js';
5
- import '../../chunk-4XNE2JG3.js';
4
+ import '../../chunk-3PPEHLGK.js';
5
+ import '../../chunk-753F33CV.js';
6
6
  import '../../chunk-EYELZHKY.js';
7
7
  import { drizzle } from 'drizzle-orm/libsql';
8
8
 
@@ -1,18 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkCQL6FOTT_cjs = require('../../chunk-CQL6FOTT.cjs');
4
- var chunkQ73OWTJY_cjs = require('../../chunk-Q73OWTJY.cjs');
3
+ var chunkGUYI6VAS_cjs = require('../../chunk-GUYI6VAS.cjs');
4
+ var chunkSCXOGKLD_cjs = require('../../chunk-SCXOGKLD.cjs');
5
5
  var chunkO5PST6TB_cjs = require('../../chunk-O5PST6TB.cjs');
6
- require('../../chunk-2X7P7AD5.cjs');
7
- require('../../chunk-FQCQM3KG.cjs');
6
+ require('../../chunk-PEE4EWXZ.cjs');
7
+ require('../../chunk-3JK66E3I.cjs');
8
8
  require('../../chunk-UVZHTBZ5.cjs');
9
+ var module$1 = require('module');
9
10
  var Database = require('better-sqlite3');
10
11
  var betterSqlite3 = require('drizzle-orm/better-sqlite3');
11
12
 
13
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
12
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
15
 
14
16
  var Database__default = /*#__PURE__*/_interopDefault(Database);
15
17
 
18
+ var nodeRequire = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('local.cjs', document.baseURI).href)));
16
19
  function getUnknownErrorMessage(error) {
17
20
  if (error instanceof Error) return error.message;
18
21
  return String(error);
@@ -53,24 +56,38 @@ function createDatabase(path) {
53
56
  }
54
57
  function createLocalSqliteBackend(options = {}) {
55
58
  const path = options.path ?? ":memory:";
56
- const tables2 = options.tables ?? chunkQ73OWTJY_cjs.tables2;
59
+ const tables2 = options.tables ?? chunkSCXOGKLD_cjs.tables2;
57
60
  const sqlite = createDatabase(path);
61
+ const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);
58
62
  const db = betterSqlite3.drizzle(sqlite);
59
- const ddlStatements = chunkQ73OWTJY_cjs.generateSqliteDDL(tables2);
63
+ const ddlStatements = chunkSCXOGKLD_cjs.generateSqliteDDL(tables2);
60
64
  for (const statement of ddlStatements) {
61
65
  sqlite.exec(statement);
62
66
  }
63
- const backend = chunkCQL6FOTT_cjs.createSqliteBackend(db, {
67
+ const backend = chunkGUYI6VAS_cjs.createSqliteBackend(db, {
64
68
  executionProfile: {
65
69
  isSync: true
66
70
  },
67
- tables: tables2
71
+ tables: tables2,
72
+ hasVectorEmbeddings
68
73
  });
69
- const managedBackend = chunkQ73OWTJY_cjs.wrapWithManagedClose(backend, () => {
74
+ const managedBackend = chunkSCXOGKLD_cjs.wrapWithManagedClose(backend, () => {
70
75
  sqlite.close();
71
76
  });
72
77
  return { backend: managedBackend, db };
73
78
  }
79
+ function tryLoadSqliteVec(sqlite) {
80
+ try {
81
+ const module_ = nodeRequire("sqlite-vec");
82
+ if (typeof module_ === "object" && module_ !== null && "load" in module_ && typeof module_.load === "function") {
83
+ module_.load(sqlite);
84
+ return true;
85
+ }
86
+ return false;
87
+ } catch {
88
+ return false;
89
+ }
90
+ }
74
91
 
75
92
  exports.createLocalSqliteBackend = createLocalSqliteBackend;
76
93
  //# sourceMappingURL=local.cjs.map
@@ -1 +1 @@
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
+ {"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["createRequire","Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend","wrapWithManagedClose"],"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 { createRequire } from \"node:module\";\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\nconst nodeRequire = createRequire(import.meta.url);\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\n // Best-effort: load sqlite-vec so embedding fields are persisted to the\n // embeddings table. Without it, nodes with `embedding()` fields validate\n // and insert but their vectors are silently dropped. When the user has\n // installed sqlite-vec as a peer dep we load it; otherwise we proceed\n // without vector support.\n const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);\n\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 hasVectorEmbeddings,\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n"]}
@@ -1,12 +1,14 @@
1
- import { createSqliteBackend } from '../../chunk-NRNJ52AA.js';
2
- import { tables2, generateSqliteDDL, wrapWithManagedClose } from '../../chunk-UQVBVBVG.js';
1
+ import { createSqliteBackend } from '../../chunk-NSLTDXVH.js';
2
+ import { tables2, generateSqliteDDL, wrapWithManagedClose } from '../../chunk-5ZMMHUWR.js';
3
3
  import { ConfigurationError } from '../../chunk-WFMTAEEN.js';
4
- import '../../chunk-SMMOAVJ5.js';
5
- import '../../chunk-4XNE2JG3.js';
4
+ import '../../chunk-3PPEHLGK.js';
5
+ import '../../chunk-753F33CV.js';
6
6
  import '../../chunk-EYELZHKY.js';
7
+ import { createRequire } from 'module';
7
8
  import Database from 'better-sqlite3';
8
9
  import { drizzle } from 'drizzle-orm/better-sqlite3';
9
10
 
11
+ var nodeRequire = createRequire(import.meta.url);
10
12
  function getUnknownErrorMessage(error) {
11
13
  if (error instanceof Error) return error.message;
12
14
  return String(error);
@@ -49,6 +51,7 @@ function createLocalSqliteBackend(options = {}) {
49
51
  const path = options.path ?? ":memory:";
50
52
  const tables2$1 = options.tables ?? tables2;
51
53
  const sqlite = createDatabase(path);
54
+ const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);
52
55
  const db = drizzle(sqlite);
53
56
  const ddlStatements = generateSqliteDDL(tables2$1);
54
57
  for (const statement of ddlStatements) {
@@ -58,13 +61,26 @@ function createLocalSqliteBackend(options = {}) {
58
61
  executionProfile: {
59
62
  isSync: true
60
63
  },
61
- tables: tables2$1
64
+ tables: tables2$1,
65
+ hasVectorEmbeddings
62
66
  });
63
67
  const managedBackend = wrapWithManagedClose(backend, () => {
64
68
  sqlite.close();
65
69
  });
66
70
  return { backend: managedBackend, db };
67
71
  }
72
+ function tryLoadSqliteVec(sqlite) {
73
+ try {
74
+ const module_ = nodeRequire("sqlite-vec");
75
+ if (typeof module_ === "object" && module_ !== null && "load" in module_ && typeof module_.load === "function") {
76
+ module_.load(sqlite);
77
+ return true;
78
+ }
79
+ return false;
80
+ } catch {
81
+ return false;
82
+ }
83
+ }
68
84
 
69
85
  export { createLocalSqliteBackend };
70
86
  //# sourceMappingURL=local.js.map
@@ -1 +1 @@
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,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAGzB,EAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,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,MAAM,cAAA,GAAiB,oBAAA,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.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, 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
+ {"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 { createRequire } from \"node:module\";\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\nconst nodeRequire = createRequire(import.meta.url);\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\n // Best-effort: load sqlite-vec so embedding fields are persisted to the\n // embeddings table. Without it, nodes with `embedding()` fields validate\n // and insert but their vectors are silently dropped. When the user has\n // installed sqlite-vec as a peer dep we load it; otherwise we proceed\n // without vector support.\n const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);\n\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 hasVectorEmbeddings,\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n"]}
@@ -396,6 +396,7 @@ var postgresDialect = {
396
396
  recursiveQueryStrategy: "recursive_cte",
397
397
  setOperationStrategy: "standard_parenthesized",
398
398
  materializeIntermediateTraversalCtes: false,
399
+ emitNotMaterializedHint: true,
399
400
  forceRecursiveWorktableOuterJoinOrder: false,
400
401
  vectorPredicateStrategy: "native",
401
402
  vectorMetrics: ["cosine", "l2", "inner_product"],
@@ -574,6 +575,7 @@ var sqliteDialect = {
574
575
  recursiveQueryStrategy: "recursive_cte",
575
576
  setOperationStrategy: "sqlite_compound",
576
577
  materializeIntermediateTraversalCtes: true,
578
+ emitNotMaterializedHint: false,
577
579
  forceRecursiveWorktableOuterJoinOrder: true,
578
580
  vectorPredicateStrategy: "native",
579
581
  vectorMetrics: ["cosine", "l2"],
@@ -793,5 +795,5 @@ exports.quotedColumn = quotedColumn;
793
795
  exports.quotedTableName = quotedTableName;
794
796
  exports.sqlNull = sqlNull;
795
797
  exports.tsvectorStrategy = tsvectorStrategy;
796
- //# sourceMappingURL=chunk-FQCQM3KG.cjs.map
797
- //# sourceMappingURL=chunk-FQCQM3KG.cjs.map
798
+ //# sourceMappingURL=chunk-3JK66E3I.cjs.map
799
+ //# sourceMappingURL=chunk-3JK66E3I.cjs.map