Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

mol_db

Package Overview
Dependencies
Maintainers
0
Versions
1262
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mol_db

Static typed facade for [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) with simple API.

  • 0.0.1262
  • latest
  • npm
  • Socket score

Version published
Maintainers
0
Created
Source

$mol_db

Static typed facade for IndexedDB with simple API.

Teaser

type User = {
	name: string
	admin: boolean
}

// Static typed schema
type DB = {
	User: {
		Key: [ string ]
		Doc: User
		Indexes: {
			Name: [ string ]
		}
	}
}

// Automatic migrations
const db = await $mol_db< DB >( '$my_app',
	mig => mig.store_make( 'User' ),
	mig => {
		const { User } = mig.stores
		User.index_make( 'Name', [ 'name' ] )
	},
)

// Writing transaction
const { User } = db.change( 'User' ).stores
await User.put({ name: 'Jin', admin: true })

// Reading transaction
const { Name } = db.read( 'User' ).User.indexes
const jins = await Name.select([ 'Jin' ])

IndexedDB Structure

  • Database contains named Stores
    • Store contains Documents by primary keys and named Indexes
      • Document contains any data
      • Index points to Documents

DB life Cycle

DB Schema Example

type ACME = {
	Users: {
		Key: number
		Doc: {
			name: {
				first: string
				last: string
			}
			age: number
		}
		Indexes: {
			names: [ string, string ]
			ages: [ number ]
		}
	}
	Articles: {
		Key: string
		Doc: {
			title: string
			content: string
		}
		Indexes: {
			full: [ string, string ]
		}
	}
}

Open DB without Migrations

const db = await $$.$mol_db< ACME >( 'ACME' )

Open DB with automatic migrations

const db = await $$.$mol_db< ACME >( 'ACME',
	mig => mig.store_make( 'Users' ),
	mig => mig.stores.Users.index_make( 'ages', [ 'age' ] ),
	mig => mig.stores.Users.index_make( 'names', [ 'name.first', 'name.last' ], true ),
	mig => mig.store_make( 'Articles' ),
	mig => mig.stores.Articles.index_make( 'full', [ 'title', 'content' ] ),
	// mig => mig.stores.Articles.index_drop( 'full' ),
	// mig => mig.store_drop( 'Articles' ),
)

There is 5 migrations. And DB version is 6. After uncommenting last 2 rows, it applies 2 additional migrations and DB version will be 8.

Close DB Connection

db.destructor()

Delete DB

db.kill()

Transaction Life Cycle

Read Only Transactions

const { Users, Articles } = db.read( 'Users', 'Articles' )

Read/Write Trasactions

const trans = db.change( 'Users', 'Articles' )
const { Users, Articles } = trans.stores

// ...

trans.abort()
// or
await trans.commit()

Uncommitted transaction without errors will be committed automatically. Any modification error aborts transaction.

Documents Life Cycle

By Primary key

Insert with Auto Incremental Primary Key
const key = await Users.put({
	first: 'Jin',
	last: 'Nin',
	age: 36,
})
Put/Overwrite by Primary Key
await Users.put( {
	first: 'Jin',
	last: 'Nin',
	age: 37,
}, 1 )

Get One By Primary Key

const user = await Users.get( 1 )

Select 10 By Primary Keys

const users = await Users.get( $mol_dom_context.IDBKeyRange.bound( 10, 50 ), 10 )

Count By Primary Keys

const count = await Users.count( $mol_dom_context.IDBKeyRange.bound( 10, 50 ) )

By Index

const { names, ages } = users.indexes

Get One By Index

const user = await names.get([ 'Jin', 'Nin' ])

Select 10 By Index

const users = await ages.get( [ 18 ], 10 )

Count By Primary Keys

const count = await Users.count([ 18 ])

Usage from NPM

npm install mol_db

import { $mol_db } from 'mol_db'

Keywords

FAQs

Package last updated on 23 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc