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
JavaScript
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