@nodetool-ai/database-sqlite 0.0.0-stage → 0.8.9-bootstrap.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 +17 -2
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations.d.ts +4 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +81 -0
- package/dist/migrations.js.map +1 -0
- package/package.json +44 -4
package/README.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# SQLite persistence
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
SQLite adapter for the shared NodeTool repository. Uses the existing NodeTool
|
|
4
|
+
table names and JSON column codecs. The caller encrypts secret values before
|
|
5
|
+
persistence and closes the repository during shutdown. Startup applies the frozen
|
|
6
|
+
execution-table baseline and subsequent execution-table migrations atomically.
|
|
7
|
+
Historical asset timestamps and sketch links are preserved. The adapter records
|
|
8
|
+
its selected migrations separately from the full feature migration chain.
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
import { createSqliteRepository } from "@nodetool-ai/database-sqlite";
|
|
12
|
+
|
|
13
|
+
const repository = createSqliteRepository("nodetool.sqlite");
|
|
14
|
+
const workflows = await repository.list("workflows", "user-id");
|
|
15
|
+
repository.close();
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
See [backend standards](../AGENTS.md).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2026-10-30T19:33:34.334Z
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuD,KAAK,UAAU,EAA4C,MAAM,0BAA0B,CAAC;AAK1J,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA2D/D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import Database from "better-sqlite3";
|
|
3
|
+
import { and, eq, getTableColumns, sql } from "drizzle-orm";
|
|
4
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
5
|
+
import { getTableConfig } from "drizzle-orm/sqlite-core";
|
|
6
|
+
import { assets, jobs, secrets, workflows, resolveResourceId } from "@nodetool-ai/models-core";
|
|
7
|
+
import { migrateSqliteCore } from "./migrations.js";
|
|
8
|
+
const tables = { workflows, assets, jobs, secrets };
|
|
9
|
+
/** Open the lean repository using the same tables and codecs as the full server. */
|
|
10
|
+
export function createSqliteRepository(path) {
|
|
11
|
+
const client = new Database(path);
|
|
12
|
+
client.pragma("journal_mode = WAL");
|
|
13
|
+
client.pragma("busy_timeout = 5000");
|
|
14
|
+
const db = drizzle(client);
|
|
15
|
+
try {
|
|
16
|
+
migrateSqliteCore(client);
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
client.close();
|
|
20
|
+
throw new Error("SQLite execution database migration failed", { cause });
|
|
21
|
+
}
|
|
22
|
+
async function list(kind, userId) {
|
|
23
|
+
const table = tables[kind];
|
|
24
|
+
const rows = await db.select().from(table).where(eq(table.user_id, userId));
|
|
25
|
+
return rows;
|
|
26
|
+
}
|
|
27
|
+
async function get(kind, userId, id) {
|
|
28
|
+
const table = tables[kind];
|
|
29
|
+
if (!/^[0-9a-f]{12}$/.test(id)) {
|
|
30
|
+
const rows = await db.select().from(table).where(and(eq(table.user_id, userId), eq(table.id, id))).limit(1);
|
|
31
|
+
return rows[0] ?? null;
|
|
32
|
+
}
|
|
33
|
+
return resolveResourceId(await list(kind, userId), id);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
list, get,
|
|
37
|
+
async put(kind, userId, document) {
|
|
38
|
+
if (!userId) {
|
|
39
|
+
throw new Error("A resource owner is required");
|
|
40
|
+
}
|
|
41
|
+
const existing = document.id ? await get(kind, userId, document.id) : null;
|
|
42
|
+
const id = existing?.id ?? document.id ?? randomBytes(16).toString("hex");
|
|
43
|
+
const now = new Date().toISOString();
|
|
44
|
+
const data = { ...existing, ...document, id, user_id: userId, created_at: existing?.created_at ?? now, updated_at: now };
|
|
45
|
+
const table = tables[kind];
|
|
46
|
+
const columns = getTableColumns(table);
|
|
47
|
+
const values = [];
|
|
48
|
+
for (const [key, column] of Object.entries(columns)) {
|
|
49
|
+
if (!(key in data)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const value = data[key];
|
|
53
|
+
values.push({ name: column.name, value: value == null ? null : column.mapToDriverValue(value) });
|
|
54
|
+
}
|
|
55
|
+
// Dynamic documents use the schema's own column codecs, including JSON graph columns.
|
|
56
|
+
const names = sql.join(values.map(({ name }) => sql.identifier(name)), sql `, `);
|
|
57
|
+
const parameters = sql.join(values.map(({ value }) => sql `${value}`), sql `, `);
|
|
58
|
+
const updates = sql.join(values.filter(({ name }) => name !== "id" && name !== "created_at").map(({ name }) => sql `${sql.identifier(name)} = excluded.${sql.identifier(name)}`), sql `, `);
|
|
59
|
+
const tableName = getTableConfig(table).name;
|
|
60
|
+
await db.run(sql `INSERT INTO ${sql.identifier(tableName)} (${names}) VALUES (${parameters}) ON CONFLICT(id) DO UPDATE SET ${updates} WHERE ${sql.identifier(tableName)}.user_id = ${userId}`);
|
|
61
|
+
const saved = await get(kind, userId, id);
|
|
62
|
+
if (!saved) {
|
|
63
|
+
throw new Error("Resource ID is already owned by another user");
|
|
64
|
+
}
|
|
65
|
+
return saved;
|
|
66
|
+
},
|
|
67
|
+
async delete(kind, userId, id) {
|
|
68
|
+
const existing = await get(kind, userId, id);
|
|
69
|
+
if (!existing) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const table = tables[kind];
|
|
73
|
+
await db.delete(table).where(and(eq(table.id, existing.id), eq(table.user_id, userId)));
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
close() { client.close(); }
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA4CtC,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAoCjE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { SQLITE_CORE_BASELINE_SQL, JOB_TRACE_MARKER_DDL, ASSET_FAVORITE_DDL } from "@nodetool-ai/models-core";
|
|
3
|
+
const coreTables = ["nodetool_workflows", "nodetool_assets", "nodetool_jobs", "nodetool_secrets"];
|
|
4
|
+
function columns(sqlite, table) {
|
|
5
|
+
return sqlite.prepare(`PRAGMA table_info("${table}")`).all();
|
|
6
|
+
}
|
|
7
|
+
function hasColumn(sqlite, table, column) {
|
|
8
|
+
return columns(sqlite, table).some(({ name }) => name === column);
|
|
9
|
+
}
|
|
10
|
+
function hasTable(sqlite, table) {
|
|
11
|
+
return sqlite.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table) !== undefined;
|
|
12
|
+
}
|
|
13
|
+
function applyCoreBaseline(sqlite) {
|
|
14
|
+
const statements = SQLITE_CORE_BASELINE_SQL.split(";").map((statement) => statement.trim()).filter(Boolean);
|
|
15
|
+
sqlite.exec(statements.filter((statement) => statement.startsWith("CREATE TABLE")).join(";"));
|
|
16
|
+
const frozen = new Database(":memory:");
|
|
17
|
+
try {
|
|
18
|
+
frozen.exec(SQLITE_CORE_BASELINE_SQL);
|
|
19
|
+
for (const table of coreTables) {
|
|
20
|
+
const existing = new Set(columns(sqlite, table).map(({ name }) => name));
|
|
21
|
+
for (const column of columns(frozen, table)) {
|
|
22
|
+
if (existing.has(column.name)) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Match the full server's frozen additive compatibility repair: SQLite
|
|
26
|
+
// cannot add a required historical column without a constant default.
|
|
27
|
+
const definition = column.type + (column.notnull && column.dflt_value !== null ? ` NOT NULL DEFAULT ${column.dflt_value}` : "");
|
|
28
|
+
sqlite.exec(`ALTER TABLE "${table}" ADD COLUMN "${column.name}" ${definition}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
sqlite.exec(statements.filter((statement) => statement.startsWith("CREATE INDEX") || statement.startsWith("CREATE UNIQUE INDEX")).join(";"));
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
frozen.close();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Apply only execution-table compatibility work without claiming full feature migrations. */
|
|
38
|
+
export function migrateSqliteCore(sqlite) {
|
|
39
|
+
sqlite.transaction(() => {
|
|
40
|
+
sqlite.exec("CREATE TABLE IF NOT EXISTS _nodetool_core_migrations (version TEXT PRIMARY KEY, applied_at TEXT NOT NULL)");
|
|
41
|
+
const migrations = [
|
|
42
|
+
{
|
|
43
|
+
version: "20261001_000000",
|
|
44
|
+
up() {
|
|
45
|
+
applyCoreBaseline(sqlite);
|
|
46
|
+
sqlite.exec("UPDATE nodetool_assets SET updated_at = created_at WHERE updated_at IS NULL");
|
|
47
|
+
sqlite.exec(`UPDATE nodetool_assets SET sketch_document_id = json_extract(metadata, '$.sketchDocumentId')
|
|
48
|
+
WHERE sketch_document_id IS NULL AND metadata IS NOT NULL AND json_valid(metadata)
|
|
49
|
+
AND json_extract(metadata, '$.sketchDocumentId') IS NOT NULL`);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
version: "20261004_000003",
|
|
54
|
+
up() {
|
|
55
|
+
if (!hasColumn(sqlite, "nodetool_jobs", "has_run_trace")) {
|
|
56
|
+
sqlite.exec(JOB_TRACE_MARKER_DDL);
|
|
57
|
+
}
|
|
58
|
+
if (hasTable(sqlite, "nodetool_run_traces")) {
|
|
59
|
+
sqlite.exec("UPDATE nodetool_jobs SET has_run_trace = 1 WHERE EXISTS (SELECT 1 FROM nodetool_run_traces t WHERE t.kind = 'workflow' AND t.source_id = nodetool_jobs.id AND t.user_id = nodetool_jobs.user_id)");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
version: "20261006_000000",
|
|
65
|
+
up() {
|
|
66
|
+
if (!hasColumn(sqlite, "nodetool_assets", "favorite")) {
|
|
67
|
+
sqlite.exec(ASSET_FAVORITE_DDL);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
];
|
|
72
|
+
for (const migration of migrations) {
|
|
73
|
+
if (sqlite.prepare("SELECT version FROM _nodetool_core_migrations WHERE version = ?").get(migration.version)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
migration.up();
|
|
77
|
+
sqlite.prepare("INSERT INTO _nodetool_core_migrations (version, applied_at) VALUES (?, ?)").run(migration.version, new Date().toISOString());
|
|
78
|
+
}
|
|
79
|
+
})();
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodetool-ai/database-sqlite",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.8.9-bootstrap.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=24.22.1"
|
|
7
|
+
},
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"nodetool-dev": "./src/index.ts",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "node ../../scripts/build-typescript-workspace.mjs",
|
|
20
|
+
"test": "node ../../scripts/run-vitest.mjs run",
|
|
21
|
+
"lint": "node ../../scripts/run-tsc.mjs --noEmit"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@nodetool-ai/models-core": "0.8.9-bootstrap.0",
|
|
25
|
+
"better-sqlite3": "^12.8.0",
|
|
26
|
+
"drizzle-orm": "^0.45.2"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
30
|
+
"vitest": "^5.0.1",
|
|
31
|
+
"@types/better-sqlite3": "^7.6.13"
|
|
32
|
+
},
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/nodetool-ai/nodetool.git",
|
|
40
|
+
"directory": "packages/database-sqlite"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"README.md"
|
|
45
|
+
]
|
|
46
|
+
}
|