migrate-versioned-log
v1.0.1
Published
transform semantically versioned append-only log entries
Downloads
2,856
Maintainers
Readme
This package helps you build transform streams that migrate, or upgrade, semantically versioned append-only log entries.
To create a transform, pass an Array
of Object
in the shape:
[
{
fromRange: SemVerRange,
toVersion: SemVer,
transform: function (entry, callback) {
callback(null, [/* transformed entries */])
}
}
]
toVersion
must be greater than all ranges that satisfy fromRange
.
The transforms expect and emit chunks in the shape:
{index: Number, version: SemVer, entry: Object}
Example
This example is run as a test for the package. It uses a few packages from the mississippi streams collection.
var assert = require('assert')
var collect = require('collect-stream')
var from2Array = require('from2-array')
var migrate = require('migrate-versioned-log')
var pump = require('pump')
var log = [
// A 1.0.0 set operation.
{index: 1, version: '1.0.0', entry: {key: 'a', value: 1}},
// From version 2.0.0, set operations are logged with two entries:
// One to initialize. One to set.
{index: 2, version: '2.0.0', entry: {type: 'init', key: 'b'}},
{index: 3, version: '2.0.0', entry: {type: 'set', key: 'b', value: 2}}
]
var migrated = [
// The old 1.0.0 entry is migrated to two 2.0.0 entries.
{index: 1, version: '2.0.0', entry: {type: 'init', key: 'a'}},
{index: 1, version: '2.0.0', entry: {type: 'set', key: 'a', value: 1}},
// The 2.0.0 entries remain the same.
{index: 2, version: '2.0.0', entry: {type: 'init', key: 'b'}},
{index: 3, version: '2.0.0', entry: {type: 'set', key: 'b', value: 2}}
]
collect(
pump(
from2Array.obj(log),
migrate([{
fromRange: '1.x',
toVersion: '2.0.0',
transform: function (entry, callback) {
callback(null, [
{type: 'init', key: entry.key},
{type: 'set', key: entry.key, value: entry.value}
])
}
}])
),
function (error, data) {
assert.ifError(error)
assert.deepEqual(data, migrated)
}
)