Skip to content

almin/migration-tools

Repository files navigation

migration-tools Build Status

Migration scripts for Almin.

Screen Shot GIF

Install

Install with npm:

npm install -g @almin/migration-tools

Usage

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"

Migrations

0.17.x → 0.18.x

How to migrate?

Run following command and select 0.17.x → 0.18.x

$ almin-migration-tools

What is changed?

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");

0.13.x → 0.15.x

How to migrate?

Run following command and select 0.13.x → 0.15.x

$ almin-migration-tools

What is changed?

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();
    }
}

0.12.x → 0.13.x

How to migrate?

Run following command and select 0.12.x → 0.13.x

$ almin-migration-tools

What is changed?

  • Renaming: context.on* to context.events.on* without context.onChange
    • Context.onChange is still on Context 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) => {});

0.11.x → 0.12.x

How to migrate?

Notes: Sadly, this old migration script is not automated...

Please do following steps.

Convert Store#getState scripts

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).

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)
});
Options
  • mapping: path to almin-store-state-mapping.json.
    • Default: using almin-store-state-mapping.json in current directory.

Changelog

See Releases page.

Running tests

Install devDependencies and Run npm test:

npm i -d && npm test

Contributing

Pull requests and stars are always welcome.

For bugs and feature requests, please create an issue.

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

License

MIT © azu

Thanks

avajs/ava-codemods: Codemods for AVA