UNPKG

cachified-adapter-sqlite

Version:

SQLite adapter for @epic-web/cachified. Compatible with better-sqlite3, sqlite, sqlite3, node:sqlite, and bun:sqlite.

99 lines (96 loc) 2.65 kB
import { b as buildCacheKey, t as totalTtl } from './cache-key-CFVg9mcK.js'; function sqlite3CacheAdapter(options) { return { name: options.name ?? "sqlite3", get: async (key) => { const cacheKey = buildCacheKey(key, options.keyPrefix); return new Promise((resolve, reject) => { options.database.get( `SELECT value, metadata FROM ${options.tableName} WHERE key = ?`, cacheKey, (error, row) => { if (error) { reject(error); return; } if (!row) { resolve(null); return; } try { const entry = { value: JSON.parse(row.value), metadata: JSON.parse(row.metadata) }; if (!entry.value) { resolve(null); return; } resolve(entry); } catch (error2) { reject(error2); } } ); }); }, set: async (key, entry) => { const cacheKey = buildCacheKey(key, options.keyPrefix); const ttl = totalTtl(entry.metadata); return new Promise((resolve, reject) => { options.database.run( `INSERT OR REPLACE INTO ${options.tableName} (key, value, metadata) VALUES (?, ?, ?)`, cacheKey, JSON.stringify(entry.value), JSON.stringify({ ...entry.metadata, ttl: ttl === Number.POSITIVE_INFINITY ? null : ttl }), (error) => { if (error) { reject(error); return; } resolve(entry.value); } ); }); }, delete: async (key) => { const cacheKey = buildCacheKey(key, options.keyPrefix); return new Promise((resolve, reject) => { options.database.run( `DELETE FROM ${options.tableName} WHERE key = ?`, cacheKey, (error) => { if (error) { reject(error); return; } resolve(void 0); } ); }); } }; } async function createSqlite3CacheTable(database, tableName) { return new Promise((resolve, reject) => { database.run( `CREATE TABLE IF NOT EXISTS ${tableName} ( key TEXT PRIMARY KEY, value TEXT, metadata TEXT )`, (error) => { if (error) { reject(error); return; } resolve(); } ); }); } export { createSqlite3CacheTable, sqlite3CacheAdapter }; //# sourceMappingURL=sqlite3.js.map