-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Matteo Collina <[email protected]>
- Loading branch information
Showing
2 changed files
with
84 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,70 @@ | ||
# semgrator | ||
|
||
Run migrations code based on semantic version rules | ||
`semgrator` provides an utility to support backward compatibility when building frameworks and runtimes | ||
that do not introduce breaking changes via new options. | ||
|
||
## What is a compatibility option/flag/mode? | ||
|
||
If you want to create a product that is configurable, but you do not want to break your users on behavior changes, | ||
you can introduce a _new option_ that turns on and off the new behavior, and turn the new behavior by default. | ||
Users of the previous behavior _would be required_ to change their configuration to keep using the software. | ||
|
||
### How semgrator helps | ||
|
||
`semgrator` run migrations code based on semantic version rules. So on a breaking/behavior change that results in a new | ||
compatibility option in your configuration file, you can add a new migration rule that set the new option to `false` | ||
automatically. | ||
|
||
## Install | ||
|
||
```js | ||
npm i semgrator | ||
``` | ||
|
||
## Usage | ||
|
||
### Writing migrations | ||
|
||
```ts | ||
import type { Migration } from 'semgrator' | ||
import type { Config } from '../your-config-meta.js' | ||
|
||
export const migration: Migration<Config> = { | ||
version: '1.0.0', | ||
toVersion: '1.42.0', | ||
up: (input: Config) => { | ||
// Do something with Config | ||
return input | ||
}, | ||
} | ||
``` | ||
|
||
The `version` peroperty specifies the _minimum version_ that do not need the change. | ||
In other terms, all versions _before_ the specified one will trigger the migration. | ||
|
||
The `toVersion` property will be used by `semgrator` as the resulting version after the change. | ||
This is useful in case you want to have a _final_ version that is higher than `version`. | ||
|
||
### Running semgrator | ||
|
||
```ts | ||
import { semgrator } from 'semgrator' | ||
|
||
type MyConfig = { | ||
result: unknown | ||
} | ||
|
||
const res = await semgrator<MyConfig, MyConfig>({ | ||
version: '1.0.0', | ||
path: 'path/to/migrations', | ||
input: { | ||
result: { foo: 'bar' } as unknown, | ||
}, | ||
}) | ||
|
||
console.log(res.result) | ||
``` | ||
|
||
## License | ||
|
||
Apache-2.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters