@3fv/dexie-orm
v1.0.12
Published
A sort-of ORM for Dexie
Downloads
41
Readme
Dexie ORM/Database Builder
Overview
Dexie Database Builder is a tool for quickly creating
dexie
database instances with class
based schema's
It takes dexie
, and applies a builder
pattern to
simplify configuration
(sans upgrade at the moment, but that's fairly straightforward given the existing dexie
support & the implementation of DexieDatabaseBuilder
).
Examples
Node Node with single & tuple key example is available
React React example is available
import assert from "assert"
import dexieDatabaseBuilder from "@3fv/dexie-orm"
export class ExampleObject {
id: string
constructor(o: Partial<ExampleObject> = {}) {
Object.assign(this, o)
}
}
/**
* Returns a promise with the value type
* as follows:
*
* Dexie & {
* objects: Dexie.Table<ExampleObject, "id">
* }
*/
export async function createExampleDatabase() {
const db = await dexieDatabaseBuilder("example", 1)
.table("objects", ExampleObject, "id" as const, "&id")
.open()
return db
}
/**
* Add & read an `ExampleObject`
*/
export async function run() {
const db = await createExampleDatabase()
// OBJECTS TABLE
const objectsTable = db.objects
// ADD
const obj1 = new ExampleObject({
id: "example-01"
})
const obj1Id = await objectsTable.add(obj1)
const obj1Read = await objectsTable.get(obj1Id)
assert(obj1Read instanceof ExampleObject, "not instance of ExampleObject")
assert(obj1Read?.id === obj1?.id, "id's do not match")
assert.deepEqual(obj1, obj1Read, "doesn't match deeply")
}
run().catch(err => {
console.error("failed", err)
})
Notes
It's a properly configured hybrid module,
so both commonjs
& module
/esm
runtimes
are fully supported & the resulting library will
support tree shaking as long as side-effects are not created.
Which means, it'll work in the browser, with webpack or without, in node, with webpack or without (you will need a polyfill for indexeddb
) AND
will only include the base minimum in additional resources,
because its modular implementation fully supports tree-shaking (I know I repeated myself).
Credit
Written with love in #NYC by @jglanz 3FV. Enjoy