level-patch-data
v0.3.0
Published
Store and read object patches (with metadata) in insert order
Downloads
3
Readme
level-patch-data
Store and read object patches (with metadata) in insert order
Example
var concat = require('concat-stream')
var assert = require('assert')
var level = require('level-test')()
var Patch = require('level-patch-data')
var db = level('patch-test', {valueEncoding: 'json'})
var patch = Patch(db)
patch.add('doc', {a: 'a'}, {user: 'lee'}, function (err, commit) {
patch.add('doc', {b: 'c'}, {user: 'kara'}, function (err, commit) {
patch.readStream('doc').pipe(concat(function (body) {
// body is
[ { ts: '2014-06-28T06:05:53.100Z', // timestamp
patch: { a: 'a' },
key: 'docÿ2014-06-28T06:05:53.100Z' }, // namespaced and sorted by ts
{ user: 'lee',
ts: '2014-06-28T06:05:53.113Z',
patch: { b: 'c' },
key: 'docÿ2014-06-28T06:05:53.113Z' } ]
}))
})
})
See tests for more examples.
Methods
var patch = Patch(db, opts)
db
: an instance oflevelup
or asublevel
to store patches and data.opts.separator
: the string to use as a separator for key fields. default:'\xff'
opts.timestampField
: the field to use to store thetimestamp
. default:ts
opts.keyField
: the field to use to store thekey
. default:key
opts.patchField
: the field to use to store thepatch
. default:patch
opts.key
: the function to use to generate each patch's key. Use a custom key to add some entropy if there is a chance you'll have two commits in the same millisecond.// default opts.key = function (meta, namespace, opts) { return [namespace, meta[opts.timestampField]].join(opts.separator) }
patch.add(namespace, patch, meta, callback)
alias: addPatch
namespace
: the string to identify this collections of patches. This module is designed for use with patcher patches for a single object per uniquenamespace
patch
: the object to store as the patchmeta
: key/value pairs to store with this patch. Note: the keysopts.timestampField
,opts.keyField
, andopts.patchField
will be overwritten if set.callback
: receives two arguments,err
which is only set if an error occurs andcommit
, which is the patch and its metadata exactly as it was saved.
patch.readStream(namespace, since)
aliases: createReadStream
, read
Returns a readable stream that emits patches for namespace
in insert order.
namespace
: the collection of patches to read. patches will be streamed in the order inserted.since
: optional. pass thekey
of the commit to read commits since. The commit withkey === since
will not be returned, only all commits after it.
License
MIT