diff options
| author | Adam Malczewski <[email protected]> | 2026-06-27 01:09:39 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-27 01:09:39 +0900 |
| commit | 61e45e60d699ed1ca46f94a8f181c92a940317c6 (patch) | |
| tree | 2892d9773c5a8e367e1e58cdb1e88d9c6ad3fe6d /packages/storage-sqlite/src/storage.ts | |
| parent | 63c7e64532e85e0bbdd6d9ac6825d8f86be98e7a (diff) | |
| parent | 727c98c9dae516a2070eb950410314380a20c974 (diff) | |
| download | dispatch-61e45e60d699ed1ca46f94a8f181c92a940317c6.tar.gz dispatch-61e45e60d699ed1ca46f94a8f181c92a940317c6.zip | |
Merge branch 'feature/indent-change' into dev
Diffstat (limited to 'packages/storage-sqlite/src/storage.ts')
| -rw-r--r-- | packages/storage-sqlite/src/storage.ts | 120 |
1 files changed, 60 insertions, 60 deletions
diff --git a/packages/storage-sqlite/src/storage.ts b/packages/storage-sqlite/src/storage.ts index 2499664..94a826d 100644 --- a/packages/storage-sqlite/src/storage.ts +++ b/packages/storage-sqlite/src/storage.ts @@ -3,17 +3,17 @@ import type { StorageNamespace } from "@dispatch/kernel"; import { computePending, type Migration } from "./migrate.js"; export interface SqliteStorageBackend { - readonly storage: (namespace: string) => StorageNamespace; - readonly migrate: (namespace: string, migrations: readonly Migration[]) => Promise<void>; - readonly close: () => void; + readonly storage: (namespace: string) => StorageNamespace; + readonly migrate: (namespace: string, migrations: readonly Migration[]) => Promise<void>; + readonly close: () => void; } export type StorageFactory = (opts: { path: string }) => SqliteStorageBackend; export function createSqliteStorage(opts: { path: string }): SqliteStorageBackend { - const db = new Database(opts.path); - db.exec("PRAGMA journal_mode = WAL;"); - db.exec(` + const db = new Database(opts.path); + db.exec("PRAGMA journal_mode = WAL;"); + db.exec(` CREATE TABLE IF NOT EXISTS kv ( namespace TEXT NOT NULL, key TEXT NOT NULL, @@ -21,7 +21,7 @@ export function createSqliteStorage(opts: { path: string }): SqliteStorageBacken PRIMARY KEY (namespace, key) ); `); - db.exec(` + db.exec(` CREATE TABLE IF NOT EXISTS _migrations ( namespace TEXT NOT NULL, version INTEGER NOT NULL, @@ -31,62 +31,62 @@ export function createSqliteStorage(opts: { path: string }): SqliteStorageBacken ); `); - const getStmt = db.prepare("SELECT value FROM kv WHERE namespace = ?1 AND key = ?2"); - const setStmt = db.prepare( - "INSERT OR REPLACE INTO kv (namespace, key, value) VALUES (?1, ?2, ?3)", - ); - const deleteStmt = db.prepare("DELETE FROM kv WHERE namespace = ?1 AND key = ?2"); - const hasStmt = db.prepare("SELECT 1 FROM kv WHERE namespace = ?1 AND key = ?2"); - const keysAllStmt = db.prepare("SELECT key FROM kv WHERE namespace = ?1"); - const keysPrefixStmt = db.prepare("SELECT key FROM kv WHERE namespace = ?1 AND key LIKE ?2"); - const appliedVersionsStmt = db.prepare("SELECT version FROM _migrations WHERE namespace = ?1"); - const recordMigrationStmt = db.prepare( - "INSERT INTO _migrations (namespace, version, name) VALUES (?1, ?2, ?3)", - ); + const getStmt = db.prepare("SELECT value FROM kv WHERE namespace = ?1 AND key = ?2"); + const setStmt = db.prepare( + "INSERT OR REPLACE INTO kv (namespace, key, value) VALUES (?1, ?2, ?3)", + ); + const deleteStmt = db.prepare("DELETE FROM kv WHERE namespace = ?1 AND key = ?2"); + const hasStmt = db.prepare("SELECT 1 FROM kv WHERE namespace = ?1 AND key = ?2"); + const keysAllStmt = db.prepare("SELECT key FROM kv WHERE namespace = ?1"); + const keysPrefixStmt = db.prepare("SELECT key FROM kv WHERE namespace = ?1 AND key LIKE ?2"); + const appliedVersionsStmt = db.prepare("SELECT version FROM _migrations WHERE namespace = ?1"); + const recordMigrationStmt = db.prepare( + "INSERT INTO _migrations (namespace, version, name) VALUES (?1, ?2, ?3)", + ); - function storage(namespace: string): StorageNamespace { - return { - get: async (key: string) => { - const row = getStmt.get(namespace, key) as { value: string } | null; - return row?.value ?? null; - }, - set: async (key: string, value: string) => { - setStmt.run(namespace, key, value); - }, - delete: async (key: string) => { - deleteStmt.run(namespace, key); - }, - has: async (key: string) => { - return hasStmt.get(namespace, key) !== null; - }, - keys: async (prefix?: string) => { - if (prefix !== undefined) { - const rows = keysPrefixStmt.all(namespace, `${prefix}%`) as { key: string }[]; - return rows.map((r) => r.key); - } - const rows = keysAllStmt.all(namespace) as { key: string }[]; - return rows.map((r) => r.key); - }, - }; - } + function storage(namespace: string): StorageNamespace { + return { + get: async (key: string) => { + const row = getStmt.get(namespace, key) as { value: string } | null; + return row?.value ?? null; + }, + set: async (key: string, value: string) => { + setStmt.run(namespace, key, value); + }, + delete: async (key: string) => { + deleteStmt.run(namespace, key); + }, + has: async (key: string) => { + return hasStmt.get(namespace, key) !== null; + }, + keys: async (prefix?: string) => { + if (prefix !== undefined) { + const rows = keysPrefixStmt.all(namespace, `${prefix}%`) as { key: string }[]; + return rows.map((r) => r.key); + } + const rows = keysAllStmt.all(namespace) as { key: string }[]; + return rows.map((r) => r.key); + }, + }; + } - async function migrate(namespace: string, migrations: readonly Migration[]): Promise<void> { - const rows = appliedVersionsStmt.all(namespace) as { version: number }[]; - const applied = new Set(rows.map((r) => r.version)); - const pending = computePending(applied, migrations); + async function migrate(namespace: string, migrations: readonly Migration[]): Promise<void> { + const rows = appliedVersionsStmt.all(namespace) as { version: number }[]; + const applied = new Set(rows.map((r) => r.version)); + const pending = computePending(applied, migrations); - for (const m of pending) { - const runInTransaction = db.transaction(() => { - db.exec(m.up); - recordMigrationStmt.run(namespace, m.version, m.name); - }); - runInTransaction(); - } - } + for (const m of pending) { + const runInTransaction = db.transaction(() => { + db.exec(m.up); + recordMigrationStmt.run(namespace, m.version, m.name); + }); + runInTransaction(); + } + } - function close(): void { - db.close(); - } + function close(): void { + db.close(); + } - return { storage, migrate, close }; + return { storage, migrate, close }; } |
