Migration scripts for Almin.
Install with npm:
npm install -g @almin/migration-tools
Simply run almin-migration-tools in your terminal and answer a few questions.
You can pass a filename directly to the CLI. If you do not, you will be prompted for one.
Ensure you have a backup of your source code or commit the latest changes before running this.
Usage
$ almin-migration-tools [<file|glob>]
Options:
--script Run with specified migration script
--dry-run Enable dry run mode
--force, -f Bypass safety checks and forcibly run codemods
Examples
# Interactive mode
$ almin-migration-tools
# Interactive mode, but it has default targets
$ almin-migration-tools "src/**/*.js"
# Non interactive mode, specified script name
$ almin-migration-tools --script "store-group-arguments" "src/**/store/**/*.js"
Run following command and select 0.17.x → 0.18.x
$ almin-migration-tools
executor() is deprecated.
You should use UseCaseExecutor#execute instead of UseCaseExecutor#executor.
Before: executor()
import { UseCase, Context } from "almin";
class MyUseCaseA extends UseCase {
execute(_a: string) {}
}
const context = new Context({
store: createStore({ name: "test" })
});
// executor
context.useCase(new MyUseCaseA()).executor(useCase => useCase.execute("A")); After: execute()
import { UseCase, Context } from "almin";
class MyUseCaseA extends UseCase {
execute(_a: string) {}
}
const context = new Context({
store: createStore({ name: "test" })
});
//execute
context.useCase(new MyUseCaseA()).execute("A");Run following command and select 0.13.x → 0.15.x
$ almin-migration-tools
ChangedPayload has been removed.
import { UseCase, ChangedPayload } from "almin";
export class ExampleUseCase extends UseCase {
execute() {
this.context.useCase(new ChangedPayload()).execute();
}
}to
import { UseCase } from "almin";
export class ExampleUseCase extends UseCase {
execute() {
this.context.useCase({ type: "ChangedPayload" }).execute();
}
}Run following command and select 0.12.x → 0.13.x
$ almin-migration-tools
- Renaming:
context.on*tocontext.events.on*withoutcontext.onChangeContext.onChangeis still onContextprototype.- Because, it is not life-cycle events and it is optimized for updating UI.
context.onWillExecuteEachUseCase((payload, meta) => {});
context.onDispatch((payload, meta) => {});
context.onDidExecuteEachUseCase((payload, meta) => {});
context.onCompleteEachUseCase((payload, meta) => {});
context.onErrorDispatch((payload, meta) => {});to
context.events.onWillExecuteEachUseCase((payload, meta) => {});
context.events.onDispatch((payload, meta) => {});
context.events.onDidExecuteEachUseCase((payload, meta) => {});
context.events.onCompleteEachUseCase((payload, meta) => {});
context.events.onErrorDispatch((payload, meta) => {});Notes: Sadly, this old migration script is not automated...
Please do following steps.
Target: Store files
# Install to global
npm install -g @almin/migration-tools
# Run migration scripts
## Target: your almin store files
almin-migration-tools --script "store-get-state-return-object-to-flat" "src/**/store/**/*.js"Store#getState return value migration.
This script migrate following adn write stats to almin-store-state-mapping.json.
Found Following pattern and replace
class MyStore extends Store {
getState() {
return {
stateName: state
}
}
}to
class MyStore extends Store {
getState() {
return state;
}
}This script output stats as almin-store-state-mapping.json.
The almin-store-state-mapping.json is used with next script(Convert StoreGroup constructor).
Target: StoreGroup file
# Install to global
npm install -g @almin/migration-tools
# Run migration scripts
## Target: your almin StoreGroup file
almin-migration-tools --script "store-group-arguments" "src/**/store/**/*.js"Migrate StoreGroup constructor arguments.
This script migrate following using store-state-mapping.json.
new StoreGroup([
new CartStore(cartRepository),
new CustomerStore(customerRepository),
new ProductStore(productRepository)
])with
new StoreGroup({
"cart": new CartStore(cartRepository),
"customer": new CustomerStore(customerRepository),
"product": new ProductStore(productRepository)
});mapping: path toalmin-store-state-mapping.json.- Default: using
almin-store-state-mapping.jsonin current directory.
- Default: using
See Releases page.
Install devDependencies and Run npm test:
npm i -d && npm test
Pull requests and stars are always welcome.
For bugs and feature requests, please create an issue.
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin my-new-feature - Submit a pull request :D
MIT © azu