0.0.7 • Published 12 months ago
@unjsio/kvdb v0.0.7
💧 kvdb
Tiny Database Layer based on Key-Value Storage.
Usage
Install Package
# npm
npm install @unjsio/kvdb
# yarn
yarn add @unjsio/kvdb
# pnpm
pnpm install @unjsio/kvdb
Simple Usage
import { createDatabase } from "@unjsio/kvdb";
// Create a database with in-memory storage
const db = createDatabase();
// Store few users
await db.users.insertMany([
{ name: "Alice" },
{ name: "Bob" },
{ name: "Charlie" },
]);
// Find by name
const charlie = await db.users.findOne((user) => user.name === "Charlie");
// Update model
charlie.value.name = "Charlie Brown";
await charlie.save();
// Delete model
await charlie.delete();
Store Data with unjs/unstorage
import { createStorage } from "unstorage";
import fsDriver from "unstorage/drivers/fs";
import { createDatabase } from "@unjsio/kvdb";
// Store data in filesystem
const storage = createStorage({ driver: fsDriver({ base: "./data" }) });
const db = createDatabase({ storage });
Well Defined and Typed Schemas
import { createDatabase, defineSchema } from "@unjsio/kvdb";
type Book = {
publisher: string;
title: string;
description: string;
body: string;
};
const db = createDatabase({
schema: {
books: defineSchema<Book>({
defaults: () => ({
publisher: "koala",
}),
validate: (article) => {
if (!article.title) {
throw new Error("Title is required!");
}
},
}),
},
});
// Create a book with defaults
const book = await db.books.findById("js");
// book.value = { publisher: "koala" }
// await book.save() // Throws an error!
book.title = "Javascript: An elegant language";
await book.save();
Using zod to Define Typed Schemas
import { createDatabase } from "@unjsio/kvdb";
import { z, defineZodSchema } from "k@unjs/vdb/zod";
const db = createDatabase({
schema: {
users: defineZodSchema({
username: z.string().min(1),
name: z.string().min(1),
email: z.string().email(),
}),
},
});
Development
- Clone this repository
- Install latest LTS version of Node.js
- Enable Corepack using
corepack enable
- Install dependencies using
pnpm install
- Run interactive tests using
pnpm dev
License
Made with 💛
Published under MIT License.
0.0.7
12 months ago