@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.
- package/dist/backend/postgres/index.cjs +33 -33
- package/dist/backend/postgres/index.js +4 -4
- package/dist/backend/sqlite/index.cjs +14 -14
- package/dist/backend/sqlite/index.d.cts +11 -0
- package/dist/backend/sqlite/index.d.ts +11 -0
- package/dist/backend/sqlite/index.js +4 -4
- package/dist/backend/sqlite/libsql.cjs +7 -7
- package/dist/backend/sqlite/libsql.js +4 -4
- package/dist/backend/sqlite/local.cjs +26 -9
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.js +21 -5
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/{chunk-FQCQM3KG.cjs → chunk-3JK66E3I.cjs} +4 -2
- package/dist/chunk-3JK66E3I.cjs.map +1 -0
- package/dist/{chunk-SMMOAVJ5.js → chunk-3PPEHLGK.js} +3 -3
- package/dist/{chunk-SMMOAVJ5.js.map → chunk-3PPEHLGK.js.map} +1 -1
- package/dist/{chunk-UQVBVBVG.js → chunk-5ZMMHUWR.js} +53 -7
- package/dist/chunk-5ZMMHUWR.js.map +1 -0
- package/dist/{chunk-4XNE2JG3.js → chunk-753F33CV.js} +4 -2
- package/dist/chunk-753F33CV.js.map +1 -0
- package/dist/{chunk-CQL6FOTT.cjs → chunk-GUYI6VAS.cjs} +43 -24
- package/dist/chunk-GUYI6VAS.cjs.map +1 -0
- package/dist/{chunk-NRNJ52AA.js → chunk-NSLTDXVH.js} +26 -7
- package/dist/chunk-NSLTDXVH.js.map +1 -0
- package/dist/{chunk-2X7P7AD5.cjs → chunk-PEE4EWXZ.cjs} +22 -22
- package/dist/{chunk-2X7P7AD5.cjs.map → chunk-PEE4EWXZ.cjs.map} +1 -1
- package/dist/{chunk-Q73OWTJY.cjs → chunk-SCXOGKLD.cjs} +112 -66
- package/dist/chunk-SCXOGKLD.cjs.map +1 -0
- package/dist/index.cjs +135 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +45 -1
- package/dist/index.d.ts +45 -1
- package/dist/index.js +115 -36
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +16 -16
- package/dist/indexes/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-4XNE2JG3.js.map +0 -1
- package/dist/chunk-CQL6FOTT.cjs.map +0 -1
- package/dist/chunk-FQCQM3KG.cjs.map +0 -1
- package/dist/chunk-NRNJ52AA.js.map +0 -1
- package/dist/chunk-Q73OWTJY.cjs.map +0 -1
- package/dist/chunk-UQVBVBVG.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSCXOGKLD_cjs = require('../../chunk-SCXOGKLD.cjs');
|
|
4
4
|
require('../../chunk-O5PST6TB.cjs');
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
var
|
|
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
|
|
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 =
|
|
90
|
-
var toEdgeRow =
|
|
91
|
-
var toUniqueRow =
|
|
92
|
-
var toSchemaVersionRow =
|
|
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:
|
|
111
|
-
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
|
-
...
|
|
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:
|
|
134
|
+
fulltext: chunk3JK66E3I_cjs.buildFulltextCapabilities(strategy)
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
137
|
function createPostgresBackend(db, options = {}) {
|
|
138
|
-
const tables2 = options.tables ??
|
|
139
|
-
const fulltextStrategy = options.fulltext ??
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
382
|
+
get: function () { return chunkSCXOGKLD_cjs.createPostgresTables; }
|
|
383
383
|
});
|
|
384
384
|
Object.defineProperty(exports, "edges", {
|
|
385
385
|
enumerable: true,
|
|
386
|
-
get: function () { return
|
|
386
|
+
get: function () { return chunkSCXOGKLD_cjs.edges; }
|
|
387
387
|
});
|
|
388
388
|
Object.defineProperty(exports, "embeddings", {
|
|
389
389
|
enumerable: true,
|
|
390
|
-
get: function () { return
|
|
390
|
+
get: function () { return chunkSCXOGKLD_cjs.embeddings; }
|
|
391
391
|
});
|
|
392
392
|
Object.defineProperty(exports, "generatePostgresDDL", {
|
|
393
393
|
enumerable: true,
|
|
394
|
-
get: function () { return
|
|
394
|
+
get: function () { return chunkSCXOGKLD_cjs.generatePostgresDDL; }
|
|
395
395
|
});
|
|
396
396
|
Object.defineProperty(exports, "generatePostgresMigrationSQL", {
|
|
397
397
|
enumerable: true,
|
|
398
|
-
get: function () { return
|
|
398
|
+
get: function () { return chunkSCXOGKLD_cjs.generatePostgresMigrationSQL; }
|
|
399
399
|
});
|
|
400
400
|
Object.defineProperty(exports, "nodes", {
|
|
401
401
|
enumerable: true,
|
|
402
|
-
get: function () { return
|
|
402
|
+
get: function () { return chunkSCXOGKLD_cjs.nodes; }
|
|
403
403
|
});
|
|
404
404
|
Object.defineProperty(exports, "schemaVersions", {
|
|
405
405
|
enumerable: true,
|
|
406
|
-
get: function () { return
|
|
406
|
+
get: function () { return chunkSCXOGKLD_cjs.schemaVersions; }
|
|
407
407
|
});
|
|
408
408
|
Object.defineProperty(exports, "tables", {
|
|
409
409
|
enumerable: true,
|
|
410
|
-
get: function () { return
|
|
410
|
+
get: function () { return chunkSCXOGKLD_cjs.tables; }
|
|
411
411
|
});
|
|
412
412
|
Object.defineProperty(exports, "uniques", {
|
|
413
413
|
enumerable: true,
|
|
414
|
-
get: function () { return
|
|
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-
|
|
2
|
-
export { createPostgresTables, edges, embeddings, generatePostgresDDL, generatePostgresMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-
|
|
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-
|
|
5
|
-
import { tsvectorStrategy, buildFulltextCapabilities } from '../../chunk-
|
|
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
|
|
4
|
-
var
|
|
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-
|
|
7
|
-
require('../../chunk-
|
|
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
|
|
14
|
+
get: function () { return chunkGUYI6VAS_cjs.createSqliteBackend; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "createSqliteTables", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkSCXOGKLD_cjs.createSqliteTables; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "edges", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkSCXOGKLD_cjs.edges2; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "embeddings", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkSCXOGKLD_cjs.embeddings2; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "generateSqliteDDL", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkSCXOGKLD_cjs.generateSqliteDDL; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "generateSqliteMigrationSQL", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkSCXOGKLD_cjs.generateSqliteMigrationSQL; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "nodes", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkSCXOGKLD_cjs.nodes2; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "schemaVersions", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkSCXOGKLD_cjs.schemaVersions2; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "tables", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkSCXOGKLD_cjs.tables2; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "uniques", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
import '../../chunk-
|
|
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
|
|
4
|
-
var
|
|
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-
|
|
7
|
-
require('../../chunk-
|
|
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 ??
|
|
12
|
+
const tables2 = options.tables ?? chunkSCXOGKLD_cjs.tables2;
|
|
13
13
|
const db = libsql.drizzle(client);
|
|
14
|
-
const ddlStatements =
|
|
14
|
+
const ddlStatements = chunkSCXOGKLD_cjs.generateSqliteDDL(tables2);
|
|
15
15
|
await client.executeMultiple(ddlStatements.join(";\n"));
|
|
16
|
-
const backend =
|
|
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-
|
|
2
|
-
import { tables2, generateSqliteDDL } from '../../chunk-
|
|
1
|
+
import { createSqliteBackend } from '../../chunk-NSLTDXVH.js';
|
|
2
|
+
import { tables2, generateSqliteDDL } from '../../chunk-5ZMMHUWR.js';
|
|
3
3
|
import '../../chunk-WFMTAEEN.js';
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
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
|
|
4
|
-
var
|
|
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-
|
|
7
|
-
require('../../chunk-
|
|
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 ??
|
|
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 =
|
|
63
|
+
const ddlStatements = chunkSCXOGKLD_cjs.generateSqliteDDL(tables2);
|
|
60
64
|
for (const statement of ddlStatements) {
|
|
61
65
|
sqlite.exec(statement);
|
|
62
66
|
}
|
|
63
|
-
const backend =
|
|
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 =
|
|
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":"
|
|
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-
|
|
2
|
-
import { tables2, generateSqliteDDL, wrapWithManagedClose } from '../../chunk-
|
|
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-
|
|
5
|
-
import '../../chunk-
|
|
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":"
|
|
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-
|
|
797
|
-
//# sourceMappingURL=chunk-
|
|
798
|
+
//# sourceMappingURL=chunk-3JK66E3I.cjs.map
|
|
799
|
+
//# sourceMappingURL=chunk-3JK66E3I.cjs.map
|