node-sqlite-kv
v1.1.0
Published
Key-value store with node:sqlite
Readme
A simple key-value store with node:sqlite.
⚠️ Node.js v22 or higher is required.
Installation
npm install node-sqlite-kv
# or
yarn add node-sqlite-kv
# or
pnpm add node-sqlite-kv
# or
bun add node-sqlite-kvExample
import { JournalModes, KVSync } from "node-sqlite-kv"
// none of these options are required
const kv = new KVSync({
// sqlite journal mode; defaults to DELETE for
// in-memory stores, or WAL for persistent ones
journalMode: JournalModes.WAL,
// whether the database is open upon
// being instantiated; defaults to true
open: true,
// defaults to :memory: (in-memory storage)
path: "./data.sqlite",
// override the default table name of "kv"
// note: it's not recommended to use one file for
// multiple key value stores; this is only
// for the ability of changing the default name
tableName: "kv",
})
// set values
kv.set("number", 123)
kv.set("string", "hello world")
kv.set("boolean", true)
kv.set("null", null)
kv.set("array", [1, 2, 3])
kv.set("object", { settings: { theme: "dark" } })
kv.set("date", new Date())
// get values
kv.get("number") // 123
kv.get("string") // "hello world"
kv.get("boolean") // true
kv.get("null") // null
kv.get("array") // [1, 2, 3]
kv.get("object") // { settings: { theme: "dark" } }
kv.get("date") // Date
// update values
kv.set("number", 999)
kv.get("number") // 999
// delete values
kv.delete("array")
kv.get("array") // undefined
// list all entries
kv.all()
// [
// { key: "string", value: "hello world" },
// { key: "number", value: 999 },
// { key: "boolean", value: true },
// // ...
// ];
// check if a key exists
kv.exists("string") // true
kv.exists("nonexistent") // false
// get total number of entries
kv.size() // 6
// get all keys
kv.keys() // ["string", "number", "boolean", "null", "object", "date"]
// get all values
kv.values() // ["hello world", 999, true, null, { settings: { theme: "dark" } }, Date]
// transactions
kv.set("user:1", { name: "Andrew", age: 19 })
kv.set("user:2", { name: "Josh", age: 22 })
kv.set("user:3", { name: "Gabe", age: 20 })
// ...store what changed in transactions
const { oldValues, newValues } = kv.transaction((tx) => {
tx.set("user:1", { name: "Andrew", age: 20 })
tx.set("user:4", { name: "Kris", age: 21 })
tx.delete("user:2")
})
// delete all entries
kv.clear()
// close the database
kv.close()TS Generics Example
import { KVSync } from "node-sqlite-kv"
const kv = new KVSync({ path: "./data.sqlite" })
interface User {
name: string
}
kv.set("user", { name: "Andrew" })
kv.get<User>("user") // User | null
kv.set("example", 123)
kv.get<number>("example") // number | nullContributing
pnpm is used throughout this project for packages and scripts. Pull requests are always welcome. For more major changes, please open an issue to discuss what you wish to change.
