1.0.4 • Published 1 year ago

lmdb-patch v1.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

lmdb-patch

Provides a patch method for LMDB to do partial object updates.

Installation

npm install lmdb-patch

Usage

lmdb-patch exports patch and a utility function to bind it to a database, e.g.

import {open} from "lmdb";
import {withExtensions} from "lmdb-patch";

const db = withExtensions(open("test", {create: true}));

API

async db.patch(key:lmdbKey,value:any,version:number,ifVersion:number) - returns boolean

From a call interface perspective, patch works the same way as the LMDB put function.

If value is a primitive and there is no existing value, the function returns false. Otherwise, the old value is potentially replaced using the same version semantics as put with these additional constraints:

  • If value is a function, it will be called with the existing value as an argument and the return value will be used as the patched value. You could use this for a counter.
  • If the existing value is not the same type as value or if the value is a primitive, the existing value will be replaced.
  • If the value is an object, it will be merged with the existing value via Object.assign. Then, the passed in value will be walked for any properties and child properties that are explicitly undefined and these properties will be deleted from the merged value.

For example:

// assume person1 = {name:"Joe",housing:{homeowner:true}}
await db.patch("person1",{housing:{homeowner:undefined,renter:true}})
// now person1 = {name:"Joe",housing:{renter:true}}

withExtensions(db:lmdbDatabase,extenstions:object) - returns lmdbDatabase`

Extends an LMDB database and any child databases it opens to have the extensions provided as well as any child databases it opens. This utility is common to other lmdb extensions like lmdb-copy, lmdb-move.

Automatically adds patch.

Testing

Testing is conducted using Jest.

File% Stmts% Branch% Funcs% LinesUncovered Line #s
All files100100100100
index.js100100100100

Release Notes (Reverse Chronological Order)

2023-04-27 v1.0.4 Simplified use of withExtensions.

2023-04-23 v1.0.3 Documentation formatting

2023-04-19 v1.0.2 Simplified database augmentation by adding withExtensions from lmdb-extend.

2023-04-19 v1.0.1 Documentation updates.

2023-04-14 v1.0.0 Updated documentation. 100% test coverage.

2023-04-14 v0.0.1 Initial release.

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

0.0.1

1 year ago