0.0.7 • Published 12 months ago

@unjsio/kvdb v0.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

💧 kvdb

npm version npm downloads Codecov License

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.