mutent-migration
TypeScript icon, indicating that this package has built-in type declarations

0.3.1 • Public • Published

mutent-migration

npm JavaScript Style Guide

This plugin for Mutent provides an easy way to declare migration strategies for data versioning.

API

mutentMigration(options)

Returns a new Mutent's Plugin that will monitor all fetched Entites and applies the correct migration strategy when needed.

  • options <Object>
  • [options.explicitVersion] <boolean> Do not set the latest version automatically during Entities' creation.
  • [options.forceUpdate] <boolean> Force Entity's update any time is handled.
  • [options.key] <string> Name of the key that holds the Entity's version number.
  • [options.strategies] <Object> Collection of migration functions.
  • options.version <number> The wanted Entity's version.
  • Returns: <Plugin>

Error codes

Those are the error codes (MutentError instances) that can be throwed by this plugin.

EMUT_INVALID_ENTITY_VERSION

The current Entity have an invalid version value.

EMUT_FUTURE_ENTITY

Found an Entity that has a future version.

EMUT_STRATEGY_EXPECTED

An upgrade is required, but the required strategy function is missing.

EMUT_INVALID_UPGRADE

A strategy was applied to an Entity, but the Entity does not contain the expected version.

Example

import { Store } from 'mutent'
import { ArrayAdapter } from 'mutent-array'
import { mutentMigration } from 'mutent-migration'

const items = [
  { id: 1, oldFieldName: 'Calvin' } // implicit "v: 0"
]

const store = new Store({
  adapter: new ArrayAdapter({ items }),
  plugins: [
    mutentMigration({
      // Required version
      version: 1,
      // Version field name
      key: 'v',
      // Migration strategies
      strategies: {
        // Migration strategy from version 0 (or no version) to version 1
        1: ({ oldFieldName, ...data }) => {
          return {
            ...data,
            v: 1,
            newFieldname: oldFieldName
          }
        }
      }
    })
  ]
})

async function foo () {
  // Read and upgrade (in memory)
  const calvin = await store.find(item => item.id === 1).unwrap()
  console.log(calvin) // { id: 1, v: 1, newFieldname: 'Calvin' }

  // Create (set latest version if not defined during creation only)
  const hobbes = await store.create({ id: 2, newFieldname: 'Hobbes' }).unwrap()
  console.log(hobbes) // { id: 2, v: 1, newFieldname: 'Hobbes' }

  // Create from an explicit version
  const prof = await store.create({ id: 3, v: 0, oldFieldName: 'Miss Wormwood' }).unwrap()
  console.log(prof) // { id: 3, v: 1, newFieldname: 'Miss Wormwood' }
}

foo()

Dependents (1)

Package Sidebar

Install

npm i mutent-migration

Weekly Downloads

29

Version

0.3.1

License

MIT

Unpacked Size

11.5 kB

Total Files

6

Last publish

Collaborators

  • greguz