cachified-adapter-sqlite
is an adapter for @epic-web/cachified that allows you to use SQLite as a cache backend.
It supports better-sqlite3
, sqlite
, sqlite3
, bun:sqlite
, and node:sqlite
.
Install the package and @epic-web/cachified
(if you haven't already — it's a peer dependency).
npm i cachified-adapter-sqlite @epic-web/cachified
Other package managers
pnpm add cachified-adapter-sqlite @epic-web/cachified
yarn add cachified-adapter-sqlite @epic-web/cachified
bun add cachified-adapter-sqlite @epic-web/cachified
import { cachified } from "@epic-web/cachified"
import { betterSqlite3CacheAdapter, createBetterSqlite3CacheTable } from "cachified-adapter-sqlite/better-sqlite3" // better-sqlite3
import Database from "better-sqlite3"
// ---- OR ----
import { sqliteCacheAdapter, createSqliteCacheTable } from "cachified-adapter-sqlite/sqlite" // sqlite
import { sqlite3CacheAdapter, createSqlite3CacheTable } from "cachified-adapter-sqlite/sqlite3" // sqlite3
import { bunSqliteCacheAdapter, createBunSqliteCacheTable } from "cachified-adapter-sqlite/bun" // bun:sqlite
import { nodeSqliteCacheAdapter, createNodeSqliteCacheTable } from "cachified-adapter-sqlite/node-sqlite" // node:sqlite
const TABLE_NAME = "cache"
const database = new Database(":memory:") // create a database using your library of choice
createBetterSqlite3CacheTable(database, TABLE_NAME)
const cache = betterSqlite3CacheAdapter({
database,
tableName: TABLE_NAME,
keyPrefix: "my-app", // optionally specify a key prefix
name: "my-app-cache", // optionally specify a cache name
})
export async function getUserById(id: number) {
return cachified({
key: `user-${id}`,
cache,
async getFreshValue() {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
return response.json() as Promise<Record<string, unknown>>
},
ttl: 60_000, // 1 minute
staleWhileRevalidate: 300_000, // 5 minutes
})
}
Kent C. Dodds and contributors for the @epic-web/cachified library, and to Adishwar Rishi for his inspirational cachified-adapter-cloudflare-kv