https://github.com/greguz/mutent-migration
Data migration plugin for Mutent
https://github.com/greguz/mutent-migration
Last synced: 4 months ago
JSON representation
Data migration plugin for Mutent
- Host: GitHub
- URL: https://github.com/greguz/mutent-migration
- Owner: greguz
- License: mit
- Created: 2021-10-18T21:31:35.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-11T07:56:18.000Z (almost 2 years ago)
- Last Synced: 2024-11-15T17:08:59.390Z (over 1 year ago)
- Language: JavaScript
- Size: 27.3 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mutent-migration
[](https://www.npmjs.com/package/mutent-migration)
[](https://standardjs.com)
[](https://github.com/greguz/mutent-migration/actions/workflows/ci.yaml)
This plugin for [Mutent](https://github.com/greguz/mutent) provides an easy way to declare migration strategies for data versioning.
## API
### `migration(options)`
Returns a new Mutent's Plugin that will monitor all fetched Entites and applies the correct migration strategy when needed.
- `options` ``
- `[options.explicitVersion]` `` Do not set the latest version automatically during Entities' creation.
- `[options.forceUpdate]` `` Force Entity's update any time is handled.
- `[options.key]` `` Name of the key that holds the Entity's version number.
- `[options.strategies]` `` Collection of migration functions.
- `options.version` `` The wanted Entity's version.
- Returns: ``
### 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
```javascript
import { Store } from 'mutent'
import ArrayAdapter from 'mutent-array'
import migration from 'mutent-migration'
const items = [
{ id: 1, oldFieldName: 'Calvin' } // implicit "v: 0"
]
const store = new Store({
adapter: new ArrayAdapter({
items
}),
plugins: [
migration({
// Required version
version: 1,
// Version field name
key: 'v',
// Migration strategies
strategies: {
// Migrate from v0 (no version) to v1
1: ({ oldFieldName, ...data }) => {
return {
...data,
v: 1,
newFieldname: oldFieldName
}
}
}
})
]
})
// Read and upgrade (in memory)
const calvin = await store
.find(item => item.id === 1)
.unwrap()
// { id: 1, v: 1, newFieldname: 'Calvin' }
console.log(calvin)
// Create (set latest version if not defined during creation only)
const hobbes = await store
.create({ id: 2, newFieldname: 'Hobbes' })
.unwrap()
// { id: 2, v: 1, newFieldname: 'Hobbes' }
console.log(hobbes)
// Create from an explicit version
const prof = await store
.create({ id: 3, v: 0, oldFieldName: 'Miss Wormwood' })
.unwrap()
// { id: 3, v: 1, newFieldname: 'Miss Wormwood' }
console.log(prof)
```