Skip to content

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

License

Notifications You must be signed in to change notification settings

MonsterDeveloper/cachified-adapter-sqlite

Repository files navigation

cachified-adapter-sqlite

npm GitHub Workflow Status (with event) GitHub License

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.

Installation

Install the package and @epic-web/cachified (if you haven't already — it's a peer dependency).

npm

npm i cachified-adapter-sqlite @epic-web/cachified
Other package managers

pnpm

pnpm add cachified-adapter-sqlite @epic-web/cachified

Yarn

yarn add cachified-adapter-sqlite @epic-web/cachified

bun

bun add cachified-adapter-sqlite @epic-web/cachified

Usage

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 library, and to Adishwar Rishi for his inspirational cachified-adapter-cloudflare-kv

About

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

Resources

License

Stars

Watchers

Forks