cachified-adapter-sqlite
Version:
SQLite adapter for @epic-web/cachified. Compatible with better-sqlite3, sqlite, sqlite3, node:sqlite, and bun:sqlite.
84 lines (61 loc) • 3.69 kB
Markdown
# cachified-adapter-sqlite
[](https://npmjs.com/package/cachified-adapter-sqlite)
[](https://github.com/MonsterDeveloper/cachified-adapter-sqlite/actions/workflows/publish.yml)
[](https://github.com/MonsterDeveloper/cachified-adapter-sqlite/blob/main/LICENSE)
`cachified-adapter-sqlite` is an adapter for [@epic-web/cachified](https://github.com/epicweb-dev/cachified) that allows you to use SQLite as a cache backend.
It supports [`better-sqlite3`](https://github.com/WiseLibs/better-sqlite3), [`sqlite`](https://github.com/kriasoft/node-sqlite), [`sqlite3`](https://github.com/TryGhost/node-sqlite3), [`bun:sqlite`](https://bun.sh/docs/api/sqlite), and [`node:sqlite`](https://nodejs.org/docs/latest-v22.x/api/sqlite.html).
## Installation
Install the package and `@epic-web/cachified` (if you haven't already — it's a peer dependency).
<img height="18" src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/icons/npm.svg"> npm
```bash
npm i cachified-adapter-sqlite @epic-web/cachified
```
<details>
<summary>Other package managers</summary>
<img height="18" src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/icons/pnpm.svg"> pnpm
```bash
pnpm add cachified-adapter-sqlite @epic-web/cachified
```
<img height="18" src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/icons/yarn.svg"> Yarn
```bash
yarn add cachified-adapter-sqlite @epic-web/cachified
```
<img height="18" src="https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/main/icons/bun.svg"> bun
```bash
bun add cachified-adapter-sqlite @epic-web/cachified
```
</details>
## Usage
```ts
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
})
}
```
## Many thanks to
Kent C. Dodds and contributors for the [@epic-web/cachified](https://github.com/epicweb-dev/cachified) library, and to Adishwar Rishi for his inspirational [cachified-adapter-cloudflare-kv](https://github.com/AdiRishi/cachified-adapter-cloudflare-kv)