@nicia-ai/typegraph 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/{ast-CXFx6bF6.d.ts → ast-CG87Zr6p.d.ts} +2 -2
- package/dist/{ast-D-3bOanX.d.cts → ast-Cq9qrnNP.d.cts} +2 -2
- package/dist/backend/postgres/index.cjs +295 -23
- package/dist/backend/postgres/index.cjs.map +1 -1
- package/dist/backend/postgres/index.d.cts +33 -10
- package/dist/backend/postgres/index.d.ts +33 -10
- package/dist/backend/postgres/index.js +285 -5
- package/dist/backend/postgres/index.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +21 -90
- package/dist/backend/sqlite/index.cjs.map +1 -1
- package/dist/backend/sqlite/index.d.cts +22 -58
- package/dist/backend/sqlite/index.d.ts +22 -58
- package/dist/backend/sqlite/index.js +3 -78
- package/dist/backend/sqlite/index.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +83 -0
- package/dist/backend/sqlite/local.cjs.map +1 -0
- package/dist/backend/sqlite/local.d.cts +66 -0
- package/dist/backend/sqlite/local.d.ts +66 -0
- package/dist/backend/sqlite/local.js +77 -0
- package/dist/backend/sqlite/local.js.map +1 -0
- package/dist/chunk-23NGZHUN.cjs +2132 -0
- package/dist/chunk-23NGZHUN.cjs.map +1 -0
- package/dist/{chunk-ZO2FRJ2U.js → chunk-2DKSQNPW.js} +3 -4
- package/dist/chunk-2DKSQNPW.js.map +1 -0
- package/dist/chunk-JPO7W262.js +2093 -0
- package/dist/chunk-JPO7W262.js.map +1 -0
- package/dist/{chunk-NYDXJGA3.cjs → chunk-K5O7TOJO.cjs} +15 -16
- package/dist/chunk-K5O7TOJO.cjs.map +1 -0
- package/dist/{backend/drizzle/schema/postgres.d.ts → ddl-Bcyb4DW1.d.cts} +17 -17
- package/dist/{backend/drizzle/schema/postgres.d.cts → ddl-D7DQx8w8.d.ts} +17 -17
- package/dist/{index-DyrR_d-H.d.cts → index-QTnQwakS.d.cts} +1 -1
- package/dist/{index-DyrR_d-H.d.ts → index-QTnQwakS.d.ts} +1 -1
- package/dist/index.cjs +238 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -12
- package/dist/index.d.ts +11 -12
- package/dist/index.js +238 -1
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.d.cts +5 -6
- package/dist/indexes/index.d.ts +5 -6
- package/dist/interchange/index.d.cts +5 -6
- package/dist/interchange/index.d.ts +5 -6
- package/dist/{manager-0NysX4s6.d.cts → manager-BImRiYwz.d.cts} +3 -3
- package/dist/{manager-DFKe7ql3.d.ts → manager-DGQ9UF18.d.ts} +3 -3
- package/dist/profiler/index.d.cts +7 -8
- package/dist/profiler/index.d.ts +7 -8
- package/dist/schema/index.d.cts +6 -7
- package/dist/schema/index.d.ts +6 -7
- package/dist/{backend/drizzle/schema/sqlite.d.ts → sqlite-CSJ-fgIm.d.ts} +2 -25
- package/dist/{backend/drizzle/schema/sqlite.d.cts → sqlite-FWGZLwDd.d.cts} +2 -25
- package/dist/{store-SiovWEYA.d.ts → store-CscQUG-S.d.ts} +57 -6
- package/dist/{store-DhoA5uRc.d.cts → store-DNv1yd3n.d.cts} +57 -6
- package/dist/{types-DHRsi6j9.d.cts → types-BbMn2Ycv.d.cts} +2 -2
- package/dist/{types-ZT5mlism.d.ts → types-C2rhqkg7.d.ts} +2 -2
- package/dist/{types-6EKrWTs9.d.ts → types-D5ggX07j.d.ts} +7 -3
- package/dist/{types-BL1GyVku.d.cts → types-DEMAqkA1.d.cts} +1 -1
- package/dist/{types-DCGa53O2.d.ts → types-DJZoHy5R.d.ts} +1 -1
- package/dist/{types-DTJEu_-h.d.ts → types-DolHw9pJ.d.cts} +14 -1
- package/dist/{types-DTJEu_-h.d.cts → types-DolHw9pJ.d.ts} +14 -1
- package/dist/{types-BUy-pHKH.d.cts → types-SVDEKnU6.d.cts} +7 -3
- package/package.json +6 -46
- package/dist/backend/drizzle/index.cjs +0 -40
- package/dist/backend/drizzle/index.cjs.map +0 -1
- package/dist/backend/drizzle/index.d.cts +0 -13
- package/dist/backend/drizzle/index.d.ts +0 -13
- package/dist/backend/drizzle/index.js +0 -11
- package/dist/backend/drizzle/index.js.map +0 -1
- package/dist/backend/drizzle/postgres.cjs +0 -26
- package/dist/backend/drizzle/postgres.cjs.map +0 -1
- package/dist/backend/drizzle/postgres.d.cts +0 -35
- package/dist/backend/drizzle/postgres.d.ts +0 -35
- package/dist/backend/drizzle/postgres.js +0 -9
- package/dist/backend/drizzle/postgres.js.map +0 -1
- package/dist/backend/drizzle/schema/postgres.cjs +0 -39
- package/dist/backend/drizzle/schema/postgres.cjs.map +0 -1
- package/dist/backend/drizzle/schema/postgres.js +0 -6
- package/dist/backend/drizzle/schema/postgres.js.map +0 -1
- package/dist/backend/drizzle/schema/sqlite.cjs +0 -39
- package/dist/backend/drizzle/schema/sqlite.cjs.map +0 -1
- package/dist/backend/drizzle/schema/sqlite.js +0 -6
- package/dist/backend/drizzle/schema/sqlite.js.map +0 -1
- package/dist/backend/drizzle/sqlite.cjs +0 -26
- package/dist/backend/drizzle/sqlite.cjs.map +0 -1
- package/dist/backend/drizzle/sqlite.d.cts +0 -35
- package/dist/backend/drizzle/sqlite.d.ts +0 -35
- package/dist/backend/drizzle/sqlite.js +0 -9
- package/dist/backend/drizzle/sqlite.js.map +0 -1
- package/dist/chunk-3PURVEA4.js +0 -193
- package/dist/chunk-3PURVEA4.js.map +0 -1
- package/dist/chunk-7RVSDXT3.cjs +0 -1509
- package/dist/chunk-7RVSDXT3.cjs.map +0 -1
- package/dist/chunk-LUARLSYT.cjs +0 -289
- package/dist/chunk-LUARLSYT.cjs.map +0 -1
- package/dist/chunk-NU2XNMVI.cjs +0 -201
- package/dist/chunk-NU2XNMVI.cjs.map +0 -1
- package/dist/chunk-NYDXJGA3.cjs.map +0 -1
- package/dist/chunk-OGGLFYFA.js +0 -177
- package/dist/chunk-OGGLFYFA.js.map +0 -1
- package/dist/chunk-Q6PXIKRQ.js +0 -287
- package/dist/chunk-Q6PXIKRQ.js.map +0 -1
- package/dist/chunk-SMLIWLS7.js +0 -236
- package/dist/chunk-SMLIWLS7.js.map +0 -1
- package/dist/chunk-UYMT4LO2.cjs +0 -241
- package/dist/chunk-UYMT4LO2.cjs.map +0 -1
- package/dist/chunk-XZL6MCZJ.cjs +0 -185
- package/dist/chunk-XZL6MCZJ.cjs.map +0 -1
- package/dist/chunk-ZO2FRJ2U.js.map +0 -1
- package/dist/chunk-ZQGOBVXZ.js +0 -1488
- package/dist/chunk-ZQGOBVXZ.js.map +0 -1
- package/dist/test-helpers-CIq1Hhj1.d.ts +0 -26
- package/dist/test-helpers-DPRFVky4.d.cts +0 -26
- package/dist/types-BRzHlhKC.d.cts +0 -14
- package/dist/types-BRzHlhKC.d.ts +0 -14
|
@@ -1,72 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
export { b as generateSqliteDDL, c as getSqliteMigrationSQL } from '../../test-helpers-CIq1Hhj1.js';
|
|
7
|
-
import 'drizzle-orm/sqlite-core';
|
|
1
|
+
import { G as GraphBackend } from '../../types-D5ggX07j.js';
|
|
2
|
+
import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-CSJ-fgIm.js';
|
|
4
|
+
export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-CSJ-fgIm.js';
|
|
5
|
+
export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-D7DQx8w8.js';
|
|
8
6
|
import 'drizzle-orm';
|
|
9
|
-
import '../../types-
|
|
7
|
+
import '../../types-DolHw9pJ.js';
|
|
10
8
|
import 'zod';
|
|
11
|
-
import '../../types-
|
|
12
|
-
import '../../
|
|
13
|
-
import '../../ast-CXFx6bF6.js';
|
|
14
|
-
import '../drizzle/schema/postgres.js';
|
|
9
|
+
import '../../types-C2rhqkg7.js';
|
|
10
|
+
import '../../ast-CG87Zr6p.js';
|
|
15
11
|
import 'drizzle-orm/pg-core';
|
|
16
12
|
|
|
13
|
+
type SqliteExecutionProfileHints = Readonly<{
|
|
14
|
+
isD1?: boolean;
|
|
15
|
+
isSync?: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
type AnySqliteDatabase = BaseSQLiteDatabase<"sync" | "async", unknown>;
|
|
18
|
+
|
|
17
19
|
/**
|
|
18
|
-
* Options for creating a
|
|
20
|
+
* Options for creating a SQLite backend.
|
|
19
21
|
*/
|
|
20
|
-
type
|
|
21
|
-
/**
|
|
22
|
-
* Path to the SQLite database file.
|
|
23
|
-
* Defaults to ":memory:" for an in-memory database.
|
|
24
|
-
*/
|
|
25
|
-
path?: string;
|
|
22
|
+
type SqliteBackendOptions = Readonly<{
|
|
26
23
|
/**
|
|
27
|
-
* Custom table definitions.
|
|
24
|
+
* Custom table definitions. Use createSqliteTables() to customize table names.
|
|
28
25
|
* Defaults to standard TypeGraph table names.
|
|
29
26
|
*/
|
|
30
27
|
tables?: SqliteTables;
|
|
31
|
-
}>;
|
|
32
|
-
/**
|
|
33
|
-
* Result of creating a local SQLite backend.
|
|
34
|
-
*/
|
|
35
|
-
type LocalSqliteBackendResult = Readonly<{
|
|
36
|
-
/**
|
|
37
|
-
* The GraphBackend instance for use with createStore.
|
|
38
|
-
*/
|
|
39
|
-
backend: GraphBackend;
|
|
40
28
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
29
|
+
* Optional execution profile hints used to avoid runtime driver reflection.
|
|
30
|
+
* Set `isD1: true` when using Cloudflare D1.
|
|
43
31
|
*/
|
|
44
|
-
|
|
32
|
+
executionProfile?: SqliteExecutionProfileHints;
|
|
45
33
|
}>;
|
|
46
|
-
|
|
47
|
-
* Creates a SQLite backend with minimal configuration.
|
|
48
|
-
*
|
|
49
|
-
* This is a convenience function for local development and testing.
|
|
50
|
-
* It handles database creation, schema migration, and backend setup.
|
|
51
|
-
*
|
|
52
|
-
* For production deployments or custom configurations, use createSqliteBackend
|
|
53
|
-
* directly with your own Drizzle database instance.
|
|
54
|
-
*
|
|
55
|
-
* @param options - Configuration options
|
|
56
|
-
* @returns Backend and database instances
|
|
57
|
-
*
|
|
58
|
-
* @example In-memory database (default)
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const { backend } = createLocalSqliteBackend();
|
|
61
|
-
* const store = createStore(graph, backend);
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @example File-based database
|
|
65
|
-
* ```typescript
|
|
66
|
-
* const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
|
|
67
|
-
* const store = createStore(graph, backend);
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
|
|
34
|
+
declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
|
|
71
35
|
|
|
72
|
-
export { type
|
|
36
|
+
export { type SqliteBackendOptions, SqliteTables, createSqliteBackend };
|
|
@@ -1,83 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
export { generateSqliteDDL,
|
|
3
|
-
import
|
|
4
|
-
export { createSqliteBackend } from '../../chunk-ZO2FRJ2U.js';
|
|
5
|
-
import '../../chunk-ZQGOBVXZ.js';
|
|
6
|
-
import { tables } from '../../chunk-OGGLFYFA.js';
|
|
7
|
-
export { createSqliteTables, edges, nodes, schemaVersions, tables, uniques } from '../../chunk-OGGLFYFA.js';
|
|
8
|
-
import '../../chunk-3PURVEA4.js';
|
|
9
|
-
import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
|
|
1
|
+
export { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
|
|
2
|
+
export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-JPO7W262.js';
|
|
3
|
+
import '../../chunk-SJ2QMDXY.js';
|
|
10
4
|
import '../../chunk-U3452TEU.js';
|
|
11
5
|
import '../../chunk-54WJF3DW.js';
|
|
12
6
|
import '../../chunk-K7SQ3SWP.js';
|
|
13
|
-
import Database from 'better-sqlite3';
|
|
14
|
-
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
15
|
-
|
|
16
|
-
function getUnknownErrorMessage(error) {
|
|
17
|
-
if (error instanceof Error) return error.message;
|
|
18
|
-
return String(error);
|
|
19
|
-
}
|
|
20
|
-
function parseNodeModuleVersionMismatchMessage(message) {
|
|
21
|
-
const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
|
|
22
|
-
const match = regexp.exec(message);
|
|
23
|
-
if (!match?.groups) return void 0;
|
|
24
|
-
const compiled = Number(match.groups.compiled);
|
|
25
|
-
const required = Number(match.groups.required);
|
|
26
|
-
if (!Number.isFinite(compiled) || !Number.isFinite(required))
|
|
27
|
-
return void 0;
|
|
28
|
-
return { compiled, required };
|
|
29
|
-
}
|
|
30
|
-
function createDatabase(path) {
|
|
31
|
-
try {
|
|
32
|
-
return new Database(path);
|
|
33
|
-
} catch (error) {
|
|
34
|
-
const message = getUnknownErrorMessage(error);
|
|
35
|
-
const mismatch = parseNodeModuleVersionMismatchMessage(message);
|
|
36
|
-
if (!mismatch) throw error;
|
|
37
|
-
throw new ConfigurationError(
|
|
38
|
-
[
|
|
39
|
-
"Failed to load better-sqlite3 native addon.",
|
|
40
|
-
`It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
|
|
41
|
-
"This usually happens after switching Node versions without rebuilding native dependencies.",
|
|
42
|
-
"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
|
|
43
|
-
].join(" "),
|
|
44
|
-
{
|
|
45
|
-
nodeVersion: process.version,
|
|
46
|
-
nodeModuleVersion: process.versions.modules,
|
|
47
|
-
compiledNodeModuleVersion: mismatch.compiled,
|
|
48
|
-
requiredNodeModuleVersion: mismatch.required
|
|
49
|
-
},
|
|
50
|
-
{ cause: error }
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function createLocalSqliteBackend(options = {}) {
|
|
55
|
-
const path = options.path ?? ":memory:";
|
|
56
|
-
const tables2 = options.tables ?? tables;
|
|
57
|
-
const sqlite = createDatabase(path);
|
|
58
|
-
const db = drizzle(sqlite);
|
|
59
|
-
const ddlStatements = generateSqliteDDL(tables2);
|
|
60
|
-
for (const statement of ddlStatements) {
|
|
61
|
-
sqlite.exec(statement);
|
|
62
|
-
}
|
|
63
|
-
const backend = createSqliteBackend(db, {
|
|
64
|
-
executionProfile: {
|
|
65
|
-
isD1: false,
|
|
66
|
-
isSync: true
|
|
67
|
-
},
|
|
68
|
-
tables: tables2
|
|
69
|
-
});
|
|
70
|
-
let isClosed = false;
|
|
71
|
-
function close() {
|
|
72
|
-
if (isClosed) return Promise.resolve();
|
|
73
|
-
isClosed = true;
|
|
74
|
-
sqlite.close();
|
|
75
|
-
return Promise.resolve();
|
|
76
|
-
}
|
|
77
|
-
const managedBackend = { ...backend, close };
|
|
78
|
-
return { backend: managedBackend, db };
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export { createLocalSqliteBackend };
|
|
82
7
|
//# sourceMappingURL=index.js.map
|
|
83
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkK5O7TOJO_cjs = require('../../chunk-K5O7TOJO.cjs');
|
|
4
|
+
var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
|
|
5
|
+
var chunk44SXEVF4_cjs = require('../../chunk-44SXEVF4.cjs');
|
|
6
|
+
require('../../chunk-JQDWEX6V.cjs');
|
|
7
|
+
require('../../chunk-2WVFEIHR.cjs');
|
|
8
|
+
require('../../chunk-P5CNM325.cjs');
|
|
9
|
+
var Database = require('better-sqlite3');
|
|
10
|
+
var betterSqlite3 = require('drizzle-orm/better-sqlite3');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var Database__default = /*#__PURE__*/_interopDefault(Database);
|
|
15
|
+
|
|
16
|
+
function getUnknownErrorMessage(error) {
|
|
17
|
+
if (error instanceof Error) return error.message;
|
|
18
|
+
return String(error);
|
|
19
|
+
}
|
|
20
|
+
function parseNodeModuleVersionMismatchMessage(message) {
|
|
21
|
+
const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
|
|
22
|
+
const match = regexp.exec(message);
|
|
23
|
+
if (!match?.groups) return void 0;
|
|
24
|
+
const compiled = Number(match.groups.compiled);
|
|
25
|
+
const required = Number(match.groups.required);
|
|
26
|
+
if (!Number.isFinite(compiled) || !Number.isFinite(required))
|
|
27
|
+
return void 0;
|
|
28
|
+
return { compiled, required };
|
|
29
|
+
}
|
|
30
|
+
function createDatabase(path) {
|
|
31
|
+
try {
|
|
32
|
+
return new Database__default.default(path);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
const message = getUnknownErrorMessage(error);
|
|
35
|
+
const mismatch = parseNodeModuleVersionMismatchMessage(message);
|
|
36
|
+
if (!mismatch) throw error;
|
|
37
|
+
throw new chunk44SXEVF4_cjs.ConfigurationError(
|
|
38
|
+
[
|
|
39
|
+
"Failed to load better-sqlite3 native addon.",
|
|
40
|
+
`It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
|
|
41
|
+
"This usually happens after switching Node versions without rebuilding native dependencies.",
|
|
42
|
+
"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
|
|
43
|
+
].join(" "),
|
|
44
|
+
{
|
|
45
|
+
nodeVersion: process.version,
|
|
46
|
+
nodeModuleVersion: process.versions.modules,
|
|
47
|
+
compiledNodeModuleVersion: mismatch.compiled,
|
|
48
|
+
requiredNodeModuleVersion: mismatch.required
|
|
49
|
+
},
|
|
50
|
+
{ cause: error }
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function createLocalSqliteBackend(options = {}) {
|
|
55
|
+
const path = options.path ?? ":memory:";
|
|
56
|
+
const tables2 = options.tables ?? chunk23NGZHUN_cjs.tables;
|
|
57
|
+
const sqlite = createDatabase(path);
|
|
58
|
+
const db = betterSqlite3.drizzle(sqlite);
|
|
59
|
+
const ddlStatements = chunk23NGZHUN_cjs.generateSqliteDDL(tables2);
|
|
60
|
+
for (const statement of ddlStatements) {
|
|
61
|
+
sqlite.exec(statement);
|
|
62
|
+
}
|
|
63
|
+
const backend = chunkK5O7TOJO_cjs.createSqliteBackend(db, {
|
|
64
|
+
executionProfile: {
|
|
65
|
+
isD1: false,
|
|
66
|
+
isSync: true
|
|
67
|
+
},
|
|
68
|
+
tables: tables2
|
|
69
|
+
});
|
|
70
|
+
let isClosed = false;
|
|
71
|
+
function close() {
|
|
72
|
+
if (isClosed) return Promise.resolve();
|
|
73
|
+
isClosed = true;
|
|
74
|
+
sqlite.close();
|
|
75
|
+
return Promise.resolve();
|
|
76
|
+
}
|
|
77
|
+
const managedBackend = { ...backend, close };
|
|
78
|
+
return { backend: managedBackend, db };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
exports.createLocalSqliteBackend = createLocalSqliteBackend;
|
|
82
|
+
//# sourceMappingURL=local.cjs.map
|
|
83
|
+
//# sourceMappingURL=local.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"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","file":"local.cjs","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups.compiled);\n const required = Number(match.groups.required);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: GraphBackend;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isD1: false,\n isSync: true,\n },\n tables,\n });\n let isClosed = false;\n\n function close(): Promise<void> {\n if (isClosed) return Promise.resolve();\n isClosed = true;\n sqlite.close();\n return Promise.resolve();\n }\n\n const managedBackend: GraphBackend = { ...backend, close };\n\n return { backend: managedBackend, db };\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
+
import { G as GraphBackend } from '../../types-SVDEKnU6.cjs';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-FWGZLwDd.cjs';
|
|
4
|
+
import 'drizzle-orm';
|
|
5
|
+
import '../../types-DolHw9pJ.cjs';
|
|
6
|
+
import 'zod';
|
|
7
|
+
import 'drizzle-orm/sqlite-core';
|
|
8
|
+
import '../../types-BbMn2Ycv.cjs';
|
|
9
|
+
import '../../ast-Cq9qrnNP.cjs';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Options for creating a local SQLite backend.
|
|
13
|
+
*/
|
|
14
|
+
type LocalSqliteBackendOptions = Readonly<{
|
|
15
|
+
/**
|
|
16
|
+
* Path to the SQLite database file.
|
|
17
|
+
* Defaults to ":memory:" for an in-memory database.
|
|
18
|
+
*/
|
|
19
|
+
path?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Custom table definitions.
|
|
22
|
+
* Defaults to standard TypeGraph table names.
|
|
23
|
+
*/
|
|
24
|
+
tables?: SqliteTables;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Result of creating a local SQLite backend.
|
|
28
|
+
*/
|
|
29
|
+
type LocalSqliteBackendResult = Readonly<{
|
|
30
|
+
/**
|
|
31
|
+
* The GraphBackend instance for use with createStore.
|
|
32
|
+
*/
|
|
33
|
+
backend: GraphBackend;
|
|
34
|
+
/**
|
|
35
|
+
* The underlying Drizzle database instance.
|
|
36
|
+
* Useful for direct SQL access or cleanup.
|
|
37
|
+
*/
|
|
38
|
+
db: BetterSQLite3Database;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a SQLite backend with minimal configuration.
|
|
42
|
+
*
|
|
43
|
+
* This is a convenience function for local development and testing.
|
|
44
|
+
* It handles database creation, schema migration, and backend setup.
|
|
45
|
+
*
|
|
46
|
+
* For production deployments or custom configurations, use createSqliteBackend
|
|
47
|
+
* directly with your own Drizzle database instance.
|
|
48
|
+
*
|
|
49
|
+
* @param options - Configuration options
|
|
50
|
+
* @returns Backend and database instances
|
|
51
|
+
*
|
|
52
|
+
* @example In-memory database (default)
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const { backend } = createLocalSqliteBackend();
|
|
55
|
+
* const store = createStore(graph, backend);
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @example File-based database
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
|
|
61
|
+
* const store = createStore(graph, backend);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
|
|
65
|
+
|
|
66
|
+
export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, createLocalSqliteBackend };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
+
import { G as GraphBackend } from '../../types-D5ggX07j.js';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-CSJ-fgIm.js';
|
|
4
|
+
import 'drizzle-orm';
|
|
5
|
+
import '../../types-DolHw9pJ.js';
|
|
6
|
+
import 'zod';
|
|
7
|
+
import 'drizzle-orm/sqlite-core';
|
|
8
|
+
import '../../types-C2rhqkg7.js';
|
|
9
|
+
import '../../ast-CG87Zr6p.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Options for creating a local SQLite backend.
|
|
13
|
+
*/
|
|
14
|
+
type LocalSqliteBackendOptions = Readonly<{
|
|
15
|
+
/**
|
|
16
|
+
* Path to the SQLite database file.
|
|
17
|
+
* Defaults to ":memory:" for an in-memory database.
|
|
18
|
+
*/
|
|
19
|
+
path?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Custom table definitions.
|
|
22
|
+
* Defaults to standard TypeGraph table names.
|
|
23
|
+
*/
|
|
24
|
+
tables?: SqliteTables;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Result of creating a local SQLite backend.
|
|
28
|
+
*/
|
|
29
|
+
type LocalSqliteBackendResult = Readonly<{
|
|
30
|
+
/**
|
|
31
|
+
* The GraphBackend instance for use with createStore.
|
|
32
|
+
*/
|
|
33
|
+
backend: GraphBackend;
|
|
34
|
+
/**
|
|
35
|
+
* The underlying Drizzle database instance.
|
|
36
|
+
* Useful for direct SQL access or cleanup.
|
|
37
|
+
*/
|
|
38
|
+
db: BetterSQLite3Database;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a SQLite backend with minimal configuration.
|
|
42
|
+
*
|
|
43
|
+
* This is a convenience function for local development and testing.
|
|
44
|
+
* It handles database creation, schema migration, and backend setup.
|
|
45
|
+
*
|
|
46
|
+
* For production deployments or custom configurations, use createSqliteBackend
|
|
47
|
+
* directly with your own Drizzle database instance.
|
|
48
|
+
*
|
|
49
|
+
* @param options - Configuration options
|
|
50
|
+
* @returns Backend and database instances
|
|
51
|
+
*
|
|
52
|
+
* @example In-memory database (default)
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const { backend } = createLocalSqliteBackend();
|
|
55
|
+
* const store = createStore(graph, backend);
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @example File-based database
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
|
|
61
|
+
* const store = createStore(graph, backend);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
|
|
65
|
+
|
|
66
|
+
export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, createLocalSqliteBackend };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
|
|
2
|
+
import { tables, generateSqliteDDL } from '../../chunk-JPO7W262.js';
|
|
3
|
+
import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
|
|
4
|
+
import '../../chunk-U3452TEU.js';
|
|
5
|
+
import '../../chunk-54WJF3DW.js';
|
|
6
|
+
import '../../chunk-K7SQ3SWP.js';
|
|
7
|
+
import Database from 'better-sqlite3';
|
|
8
|
+
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
9
|
+
|
|
10
|
+
function getUnknownErrorMessage(error) {
|
|
11
|
+
if (error instanceof Error) return error.message;
|
|
12
|
+
return String(error);
|
|
13
|
+
}
|
|
14
|
+
function parseNodeModuleVersionMismatchMessage(message) {
|
|
15
|
+
const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
|
|
16
|
+
const match = regexp.exec(message);
|
|
17
|
+
if (!match?.groups) return void 0;
|
|
18
|
+
const compiled = Number(match.groups.compiled);
|
|
19
|
+
const required = Number(match.groups.required);
|
|
20
|
+
if (!Number.isFinite(compiled) || !Number.isFinite(required))
|
|
21
|
+
return void 0;
|
|
22
|
+
return { compiled, required };
|
|
23
|
+
}
|
|
24
|
+
function createDatabase(path) {
|
|
25
|
+
try {
|
|
26
|
+
return new Database(path);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
const message = getUnknownErrorMessage(error);
|
|
29
|
+
const mismatch = parseNodeModuleVersionMismatchMessage(message);
|
|
30
|
+
if (!mismatch) throw error;
|
|
31
|
+
throw new ConfigurationError(
|
|
32
|
+
[
|
|
33
|
+
"Failed to load better-sqlite3 native addon.",
|
|
34
|
+
`It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
|
|
35
|
+
"This usually happens after switching Node versions without rebuilding native dependencies.",
|
|
36
|
+
"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
|
|
37
|
+
].join(" "),
|
|
38
|
+
{
|
|
39
|
+
nodeVersion: process.version,
|
|
40
|
+
nodeModuleVersion: process.versions.modules,
|
|
41
|
+
compiledNodeModuleVersion: mismatch.compiled,
|
|
42
|
+
requiredNodeModuleVersion: mismatch.required
|
|
43
|
+
},
|
|
44
|
+
{ cause: error }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function createLocalSqliteBackend(options = {}) {
|
|
49
|
+
const path = options.path ?? ":memory:";
|
|
50
|
+
const tables2 = options.tables ?? tables;
|
|
51
|
+
const sqlite = createDatabase(path);
|
|
52
|
+
const db = drizzle(sqlite);
|
|
53
|
+
const ddlStatements = generateSqliteDDL(tables2);
|
|
54
|
+
for (const statement of ddlStatements) {
|
|
55
|
+
sqlite.exec(statement);
|
|
56
|
+
}
|
|
57
|
+
const backend = createSqliteBackend(db, {
|
|
58
|
+
executionProfile: {
|
|
59
|
+
isD1: false,
|
|
60
|
+
isSync: true
|
|
61
|
+
},
|
|
62
|
+
tables: tables2
|
|
63
|
+
});
|
|
64
|
+
let isClosed = false;
|
|
65
|
+
function close() {
|
|
66
|
+
if (isClosed) return Promise.resolve();
|
|
67
|
+
isClosed = true;
|
|
68
|
+
sqlite.close();
|
|
69
|
+
return Promise.resolve();
|
|
70
|
+
}
|
|
71
|
+
const managedBackend = { ...backend, close };
|
|
72
|
+
return { backend: managedBackend, db };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { createLocalSqliteBackend };
|
|
76
|
+
//# sourceMappingURL=local.js.map
|
|
77
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"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","file":"local.js","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups.compiled);\n const required = Number(match.groups.required);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: GraphBackend;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isD1: false,\n isSync: true,\n },\n tables,\n });\n let isClosed = false;\n\n function close(): Promise<void> {\n if (isClosed) return Promise.resolve();\n isClosed = true;\n sqlite.close();\n return Promise.resolve();\n }\n\n const managedBackend: GraphBackend = { ...backend, close };\n\n return { backend: managedBackend, db };\n}\n"]}
|