kek-db

1.2.0 • Public • Published

JavaScript In-Memory Database

Installation

npm i kek-db

Database

import { Database } from "kek-db"
 
const db = new Database()
 
repos.insert(doc)

Collection

const repos = db.addCollection("repos")

Indexes

repos.indexBy(field, index)
  • index = "multiple" | "unique" | "sorted"

Multiple

const coll = [
  { id: 1, age: 14 },
  { id: 2, age: 24 },
  { id: 3, age: 43 },
  { id: 4, age: 24 },
]
 
const indexByAge = {
  14: [{ id: 1, age: 14 }],
  24: [{ id: 2, age: 24 }, { id: 4, age: 24 }],
  43: [{ id: 3, age: 43 }],
}

Unique

const coll = [
  { id: 1, age: 14 },
  { id: 2, age: 24 },
  { id: 3, age: 43 },
  { id: 4, age: 24 },
]
 
const indexById = {
  1: { id: 1, age: 14 },
  2: { id: 2, age: 24 },
  3: { id: 3, age: 43 },
  4: { id: 4, age: 24 },
}

Sorted

const coll = [
  { id: 1, age: 14 },
  { id: 2, age: 24 },
  { id: 3, age: 43 },
  { id: 4, age: 24 },
]
 
const indexByAge = {
  keys: [14, 24, 43],
  documents: [
    [{ id: 1, age: 14 }],
    [{ id: 2, age: 24 }, { id: 4, age: 24 }],
    [{ id: 3, age: 43 }],
  ],
}

Querying

findOne

// find a single document via specified index
// (falls back to collection scan if no index found for a given key)
repos
  .by("unique")
  .findOne("id", 2)
  .value()
 
// same but first tries to find via unique index
// otherwise falls back to collection scan
repos.findOne("id", 2).value()

find

// find all documents via specified index
// (falls back to collection scan if no index found for a given key)
repos
  .by("sorted")
  .find("stars", 100)
  .value()
 
// same but performs scan over entire collection
repos.find("stars", 100).value()

findWhere

// filter over entire collection
repos.findWhere(r => r.stars > 100).value()

Query Transformation

offset

repos
  .by("sorted")
  .find("stars", 100)
  // shift results by 10 items
  .offset(10)
  .value()

limit

repos
  .by("sorted")
  .find("stars", 100)
  // limit results to 10 first items
  .limit(10)
  .value()

Altering Collections

remove

// find and delete matching documents
repos.find("stars", 0).remove()
 
// remove a document from a collection
repos.remove(doc)
 
// remove a set of documents from a collection
repos.remove(docs)
 
// clear entire collection
repos.remove()

update

const doc = repos.findOne("id", 88636757).value()
doc.stars = 100
 
// update a document in collection (matches by `__id`)
repos.update(doc)

Transactions History

// returns transactions history for a document with specified `__id`
repos.evolutionOf(9)

Persistence

// returns a snapshot of the database as plaing object
const snapshot1 = db.snapshot()
localStorage.setItem("db1", JSON.stringify(snapshot1))
 
const snapshot2 = JSON.parse(localStorage.getItem("db1"))
// populates database from a snapshot
const db2 = new Database(snapshot2)

Readme

Keywords

Package Sidebar

Install

npm i kek-db

Weekly Downloads

0

Version

1.2.0

License

MIT

Last publish

Collaborators

  • roman01la