Skip to content

✍ Easy to use local JSON database. Ready to use in Browser (localStorage, sessionStorage), Nest.js and Node.js.

License

Notifications You must be signed in to change notification settings

crashmax-dev/stenodb

Repository files navigation

stenodb

✍ Easy to use local JSON database.

Install

npm install stenodb
yarn add stenodb
pnpm add stenodb
Package Version Description
@stenodb/node Node.js
@stenodb/browser Browser (localStorage, sessionStorage)
@stenodb/nest Nest.js module
@stenodb/fastify Fastify plugin
@stenodb/lodash Lodash wrapper for Node.js and Browser
@stenodb/logger Logger

Examples

Note
You can find more detailed examples here

class-transformer entity
// entities.ts import { Type } from 'class-transformer' export class Users { @Type(() => User) users: User[] constructor(...users: User[]) { this.users = users } } export class User { username: string @Type(() => Post) posts: Post[] constructor(username: string, ...posts: Post[]) { this.username = username this.posts = posts } addPost(post: Post) { this.posts.push(post) } } export class Post { title: string constructor(text: string) { this.title = title } }
@stenodb/node
import 'reflect-metadata' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import { AsyncAdapter, NodeProvider } from '@stenodb/node' import { Users, User, Post } from './entities.js' const path = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'db') const initialData = new Users(new User('John Doe')) const adapter = new AsyncAdapter('users', Users, initialData) const provider = new NodeProvider({ path }) const db = await provider.create(adapter) await db.read() db.data?.users[0]?.addPost(new Post('Lorem ipsum')) await db.write()
@stenodb/browser
import 'reflect-metadata' import { LocalStorage, BrowserProvider } from '@stenodb/browser' import { Users, User, Post } from './entities.js' const initialData = new Users(new User('John Doe')) const adapter = new LocalStorage('users', Users, initialData) const provider = new BrowserProvider() const db = provider.create(adapter) db.read() db.data?.users[0]?.addPost(new Post('Lorem ipsum')) db.write()
@stenodb/nest
// users.dto.ts import { Exclude, Type } from 'class-transformer' import { Length, Max, Min } from 'class-validator' export class Users { @Type(() => CreateUserDto) users: CreateUserDto[] = [] constructor(...users: CreateUserDto[]) { this.users = users } } export class CreateUserDto { @Exclude({ toPlainOnly: true }) id: number @Length(1, 20) name: string @Min(12) @Max(100) age: number constructor(id: number, name: string, age: number) { this.id = id this.name = name this.age = age } } // app.module.ts import { resolve } from 'node:path' import { Module } from '@nestjs/common' import { StenoModule } from '@stenodb/nest' @Module({ imports: [ StenoModule.register({ path: resolve(process.cwd(), 'db') }) ] }) export class AppModule {} // users.service.ts import { Injectable, OnModuleInit } from '@nestjs/common' import { Steno, StenoService } from '@stenodb/nest' import { Users, CreateUserDto } from './users.dto' @Injectable() export class UsersService implements OnModuleInit { private usersProvider: Steno.NodeProvider<Users> constructor(private readonly stenoService: StenoService) {} async onModuleInit(): Promise<void> { this.usersProvider = await this.stenoService.create( 'users', Users, new Users( new CreateUserDto(1, 'John', 22) ) ) await this.usersProvider.read() } get users(): CreateUserDto[] { return this.usersProvider.data.users } }

Credits

  • steno - Specialized fast async file writer.
  • fastify-plugin - Plugin helper for Fastify.
  • nest - A progressive Node.js framework for building efficient and scalable server-side applications.
  • class-transformer - Decorator-based transformation, serialization, and deserialization between objects and classes.
  • class-validator - Decorator-based property validation for classes.
  • class-validator-jsonschema - Convert class-validator decorated classes into JSON schema.
  • json-difference - A simple way to find the difference between two objects or json diff.
  • tslog - Universal Logger for TypeScript and JavaScript.

License

MIT - crashmax

About

✍ Easy to use local JSON database. Ready to use in Browser (localStorage, sessionStorage), Nest.js and Node.js.

Topics

Resources

License

Stars

Watchers

Forks