@verdict-ai/db 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +21 -2
  3. package/dist/auth.d.ts +34 -0
  4. package/dist/auth.js +80 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/d1.d.ts +1034 -0
  7. package/dist/d1.js +21 -0
  8. package/dist/d1.js.map +1 -0
  9. package/dist/dialects.d.ts +14 -0
  10. package/dist/dialects.js +66 -0
  11. package/dist/dialects.js.map +1 -0
  12. package/dist/documents.d.ts +87 -0
  13. package/dist/documents.js +45 -0
  14. package/dist/documents.js.map +1 -0
  15. package/dist/errors.d.ts +7 -0
  16. package/dist/errors.js +21 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.js +12 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/postgres.d.ts +1925 -0
  22. package/dist/postgres.js +63 -0
  23. package/dist/postgres.js.map +1 -0
  24. package/dist/queries.d.ts +31 -0
  25. package/dist/queries.js +68 -0
  26. package/dist/queries.js.map +1 -0
  27. package/dist/schema/pg.d.ts +1892 -0
  28. package/dist/schema/pg.js +90 -0
  29. package/dist/schema/pg.js.map +1 -0
  30. package/dist/schema/sqlite.d.ts +2050 -0
  31. package/dist/schema/sqlite.js +90 -0
  32. package/dist/schema/sqlite.js.map +1 -0
  33. package/dist/sqlite.d.ts +25 -0
  34. package/dist/sqlite.js +64 -0
  35. package/dist/sqlite.js.map +1 -0
  36. package/dist/store.d.ts +47 -0
  37. package/dist/store.js +149 -0
  38. package/dist/store.js.map +1 -0
  39. package/drizzle/0000_init.sql +66 -0
  40. package/drizzle/0001_idempotency.sql +12 -0
  41. package/drizzle/meta/0000_snapshot.json +452 -0
  42. package/drizzle/meta/0001_snapshot.json +527 -0
  43. package/drizzle/meta/_journal.json +20 -0
  44. package/drizzle/pg/0000_init.sql +78 -0
  45. package/drizzle/pg/meta/0000_snapshot.json +605 -0
  46. package/drizzle/pg/meta/_journal.json +13 -0
  47. package/package.json +81 -3
@@ -0,0 +1,63 @@
1
+ import { storeOperation } from "./errors.js";
2
+ import { schema } from "./schema/pg.js";
3
+ import { PgStore } from "./store.js";
4
+ import { DrizzleAuth } from "./auth.js";
5
+ /** Node-only entry point. Drivers are loaded only when a connection is requested. */
6
+ export async function fromPostgres(connectionString, fallbackAuth, loadDriver = () => import("pg")) {
7
+ return storeOperation("fromPostgres", async () => {
8
+ const { Pool } = await loadDriver();
9
+ const { drizzle } = await import("drizzle-orm/node-postgres");
10
+ const pool = new Pool({ connectionString });
11
+ const db = drizzle(pool, { schema });
12
+ try {
13
+ await applyPgMigrations(db);
14
+ }
15
+ catch (cause) {
16
+ await pool.end();
17
+ throw new Error("Postgres initialization failed; check connectivity and migrations", { cause });
18
+ }
19
+ return { db, pool, store: new PgStore(db), auth: new DrizzleAuth(db, fallbackAuth, schema.apiKeys), close: () => pool.end() };
20
+ });
21
+ }
22
+ /** Embedded Postgres for offline tests and local development. */
23
+ export async function fromPglite(dataDir, fallbackAuth, loadDriver = () => import("@electric-sql/pglite")) {
24
+ return storeOperation("fromPglite", async () => {
25
+ const { PGlite } = await loadDriver();
26
+ const { drizzle } = await import("drizzle-orm/pglite");
27
+ const client = new PGlite(dataDir);
28
+ const db = drizzle(client, { schema });
29
+ try {
30
+ await applyPgMigrations(db);
31
+ }
32
+ catch (cause) {
33
+ await client.close();
34
+ throw new Error("PGlite initialization failed; check the data directory and migrations", { cause });
35
+ }
36
+ return { db, client, store: new PgStore(db), auth: new DrizzleAuth(db, fallbackAuth, schema.apiKeys), close: () => client.close() };
37
+ });
38
+ }
39
+ /** Apply generated migrations in order, tracking completed files. */
40
+ export async function applyPgMigrations(db, dir) {
41
+ return storeOperation("applyPgMigrations", async () => {
42
+ const { sql } = await import("drizzle-orm");
43
+ const { readdir, readFile } = await import("node:fs/promises");
44
+ const { dirname, join } = await import("node:path");
45
+ const { fileURLToPath } = await import("node:url");
46
+ dir ??= join(dirname(fileURLToPath(import.meta.url)), "..", "drizzle", "pg");
47
+ await db.execute(sql `create table if not exists __migrations (name text primary key, applied_at text not null)`);
48
+ const applied = new Set((await db.execute(sql `select name from __migrations`)).rows.map(r => r.name));
49
+ for (const file of (await readdir(dir)).filter(f => f.endsWith(".sql")).sort()) {
50
+ // why: lexical migration names encode generation order; tracked files must never run twice.
51
+ if (applied.has(file))
52
+ continue;
53
+ const text = await readFile(join(dir, file), "utf8");
54
+ // why: generated breakpoints separate complete SQL statements, including statements containing semicolons.
55
+ for (const statement of text.split("--> statement-breakpoint")) {
56
+ if (statement.trim())
57
+ await db.execute(sql.raw(statement.trim()));
58
+ }
59
+ await db.execute(sql `insert into __migrations (name, applied_at) values (${file}, ${new Date().toISOString()})`);
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type SQL } from "drizzle-orm";
2
+ import type { schema as sqliteSchema } from "./schema/sqlite.js";
3
+ import type { schema as pgSchema } from "./schema/pg.js";
4
+ import type { SqliteDb } from "./store.js";
5
+ import type { PgDb } from "./dialects.js";
6
+ type Tables = typeof sqliteSchema | typeof pgSchema;
7
+ type TableName = keyof Tables;
8
+ type Row<Name extends TableName> = (typeof sqliteSchema)[Name]["$inferSelect"];
9
+ type Insert<Name extends TableName> = (typeof sqliteSchema)[Name]["$inferInsert"];
10
+ type SelectOptions = {
11
+ where?: SQL;
12
+ orderBy?: SQL;
13
+ limit?: number;
14
+ };
15
+ /** SQL composition is shared; each driver retains its own tables and column codecs. */
16
+ export declare class DocumentQueries {
17
+ readonly tables: Tables;
18
+ private read;
19
+ private execute;
20
+ constructor(tables: Tables, read: (query: SQL) => Promise<unknown[]>, execute: (query: SQL) => Promise<unknown>);
21
+ select<Name extends TableName>(name: Name, options?: SelectOptions): Promise<Row<Name>[]>;
22
+ insert<Name extends TableName>(name: Name, rows: Insert<Name>[], conflict?: {
23
+ keys: Array<keyof Insert<Name>>;
24
+ set: Partial<Insert<Name>>;
25
+ }): Promise<void>;
26
+ update<Name extends TableName>(name: Name, set: Partial<Insert<Name>>, where: SQL): Promise<void>;
27
+ delete(name: TableName, where: SQL): Promise<void>;
28
+ }
29
+ export declare function sqliteQueries(db: SqliteDb, tables: typeof sqliteSchema): DocumentQueries;
30
+ export declare function postgresQueries(db: PgDb, tables: typeof pgSchema): DocumentQueries;
31
+ export {};
@@ -0,0 +1,68 @@
1
+ import { getTableColumns, sql } from "drizzle-orm";
2
+ /** SQL composition is shared; each driver retains its own tables and column codecs. */
3
+ export class DocumentQueries {
4
+ tables;
5
+ read;
6
+ execute;
7
+ constructor(tables, read, execute) {
8
+ this.tables = tables;
9
+ this.read = read;
10
+ this.execute = execute;
11
+ }
12
+ async select(name, options = {}) {
13
+ const table = this.tables[name];
14
+ const columns = getTableColumns(table);
15
+ const projection = Object.entries(columns).map(([key, column]) => sql `${column} as ${sql.identifier(key)}`);
16
+ const query = sql `select ${sql.join(projection, sql `, `)} from ${table}`;
17
+ if (options.where)
18
+ query.append(sql ` where ${options.where}`);
19
+ if (options.orderBy)
20
+ query.append(sql ` order by ${options.orderBy}`);
21
+ if (options.limit !== undefined)
22
+ query.append(sql ` limit ${options.limit}`);
23
+ return (await this.read(query)).map(value => decodeRow(value, columns));
24
+ }
25
+ async insert(name, rows, conflict) {
26
+ if (!rows.length)
27
+ return;
28
+ const table = this.tables[name];
29
+ const columns = getTableColumns(table);
30
+ // why: omit undefined values so schema defaults still apply; all rows in a projection share the same shape.
31
+ const keys = Object.keys(rows[0]).filter(key => rows[0][key] !== undefined);
32
+ const values = rows.map(row => sql `(${sql.join(keys.map(key => sql `${sql.param(row[key], columns[key])}`), sql `, `)})`);
33
+ const query = sql `insert into ${table} (${sql.join(keys.map(key => sql.identifier(columns[key].name)), sql `, `)}) values ${sql.join(values, sql `, `)}`;
34
+ if (conflict) {
35
+ const targets = conflict.keys.map(key => sql.identifier(columns[String(key)].name));
36
+ query.append(sql ` on conflict (${sql.join(targets, sql `, `)}) do update set ${assignments(conflict.set, columns)}`);
37
+ }
38
+ await this.execute(query);
39
+ }
40
+ async update(name, set, where) {
41
+ await this.execute(sql `update ${this.tables[name]} set ${assignments(set, getTableColumns(this.tables[name]))} where ${where}`);
42
+ }
43
+ async delete(name, where) {
44
+ await this.execute(sql `delete from ${this.tables[name]} where ${where}`);
45
+ }
46
+ }
47
+ function assignments(values, columns) {
48
+ return sql.join(Object.entries(values).filter(([, value]) => value !== undefined).map(([key, value]) => sql `${sql.identifier(columns[key].name)} = ${sql.param(value, columns[key])}`), sql `, `);
49
+ }
50
+ function decodeRow(value, columns) {
51
+ if (!value || typeof value !== "object")
52
+ throw new TypeError("driver returned a non-object row");
53
+ const row = value;
54
+ // why: raw SQL bypasses Drizzle's select mapper; reuse the actual dialect's JSON/boolean codecs.
55
+ return Object.fromEntries(Object.entries(columns).map(([key, column]) => [key, row[key] === null ? null : column.mapFromDriverValue(row[key])]));
56
+ }
57
+ export function sqliteQueries(db, tables) {
58
+ return new DocumentQueries(tables, async (query) => await db.all(query), async (query) => await db.run(query));
59
+ }
60
+ export function postgresQueries(db, tables) {
61
+ return new DocumentQueries(tables, async (query) => {
62
+ const result = await db.execute(query);
63
+ if (!result || typeof result !== "object" || !("rows" in result) || !Array.isArray(result.rows))
64
+ throw new TypeError("Postgres driver returned no rows");
65
+ return result.rows;
66
+ }, async (query) => await db.execute(query));
67
+ }
68
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}