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.onChange
Context.onChange
is still onContext
prototype.- 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.json
in 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