@sweidos/sqlite-storage
v2.0.0
Published
SQLite-backed QueueStorage adapter for Eidos action() queues — Tauri (@tauri-apps/plugin-sql), better-sqlite3, or any compatible driver.
Maintainers
Readme
@sweidos/sqlite-storage
SQLite-backed QueueStorage adapter for @sweidos/eidos
action() queues. Use this when shipping a Tauri or Electron desktop app
where IndexedDB isn't available (or isn't durable) but a local SQLite
database is.
Install
npm install @sweidos/sqlite-storageUsage
Tauri (@tauri-apps/plugin-sql)
import Database from '@tauri-apps/plugin-sql';
import { setQueueStorage } from '@sweidos/eidos';
import { SqliteQueueStorage } from '@sweidos/sqlite-storage';
const db = await Database.load('sqlite:eidos.db');
setQueueStorage(new SqliteQueueStorage(db));@tauri-apps/plugin-sql's Database already implements execute() /
select() with the shapes this adapter expects — pass it straight through.
Electron / Node (better-sqlite3)
better-sqlite3 is synchronous, so wrap it in the SqliteLike interface:
import BetterSqlite3 from 'better-sqlite3';
import { setQueueStorage } from '@sweidos/eidos';
import { SqliteQueueStorage, type SqliteLike } from '@sweidos/sqlite-storage';
const raw = new BetterSqlite3('eidos.db');
const db: SqliteLike = {
execute: async (query, bindValues = []) => {
raw.prepare(query).run(...bindValues);
},
select: async (query, bindValues = []) => raw.prepare(query).all(...bindValues),
};
setQueueStorage(new SqliteQueueStorage(db));Options
new SqliteQueueStorage(db, { tableName: 'eidos_action_queue' });tableName defaults to eidos_action_queue. The table is created
automatically (CREATE TABLE IF NOT EXISTS) on first use — each row stores
the queue item as a JSON blob plus a denormalized status column so
getPending() can filter in SQL.
API
Implements the QueueStorage interface from @sweidos/eidos:
interface QueueStorage {
add(item: ActionQueueItem): Promise<void>;
getAll(): Promise<ActionQueueItem[]>;
getPending(): Promise<ActionQueueItem[]>;
update(id: string, patch: Partial<ActionQueueItem>): Promise<void>;
remove(id: string): Promise<void>;
clear(): Promise<void>;
}License
MIT
