3.0.0 • Published 4 months ago

async-idb-orm v3.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
4 months ago

async-idb-orm

Async wrapper for IndexedDB with an ORM-like API

Usage

import { idb, collection } from "async-idb-orm"

export type Pet = {
  id: string
  name: string
  age: number
  species?: string
}
export type User = {
  id: string
  name: string
  age: number
  pets: Pet[]
  alive?: boolean
}
export type UserDTO = {
  name?: string
  age: number
  pets: Pet[]
  alive?: boolean
}

const users = collection<User, UserDTO>({
  keyPath: "id", // string | string[] | null | undefined
  autoIncrement: true,
  indexes: [
    {
      keyPath: "age",
      name: "idx_users_age",
      options: { unique: false },
    },
  ],
  transform: {
    create: (dto) => ({
      ...dto,
      id: crypto.randomUUID(),
      name: dto.name ?? "John Doe",
    }),
    update: (record, dto) => ({ ...record, ...dto }),
  },
})

export const db = idb("users", { users }, 1)

const user = await db.users.create({ name: "John Doe", age: 69, pets: [] })
const user2 = await db.users.create({ name: "Jane Doe", age: 42, pets: [] })
console.log(user, user2)

const updatedUser = await db.users.update({ ...user, age: 65 })
console.log(updatedUser)

const foundUser = await db.users.find(user.id)
const foundUser2 = await db.users.find((user) => user.name === "Jane Doe")
console.log(foundUser)

const deletedUser = await db.users.delete(user.id)
const otherDeletedUser = await db.users.delete((user) => user.name === "Jane Doe")
console.log(deletedUser)

const allUsers = await db.users.all()
console.log(allUsers)

const filteredUsers = await db.users.find((user) => user.age > 25)
console.log(filteredUsers)

const maxAge = await db.users.max("age")
console.log(maxAge)

const minAge = await db.users.min("age")
console.log(minAge)
3.0.0

4 months ago

2.0.3

9 months ago

2.0.2

10 months ago

2.0.1

11 months ago

1.0.4

1 year ago

2.0.0

1 year ago

1.0.3

1 year ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago