haki

0.12.0 • Public • Published

Haki

Ryou Haki

NPM version travis-ci codecov

Small generator with will powers.

$ npx haki [-e FILE] [COMMAND] [...]
# or `npm i -g haki` 
# or `yarn global add haki` 

Run haki without arguments to get usage hints.

Example

Create a file named Hakifile.js in your project with this:

module.exports = haki => {
  haki.setGenerator('the:truth', {
    description: "Display if it's true, or not",
    arguments: ['verb', 'value'],
    abortOnFail: true,
    actions(input) {
      const { verb, value } = input;
 
      if (verb === 'is' && parseInt(value, 10) === 42) {
        console.log('Gotcha!');
        return;
      }
 
      throw new Error('Is not true');
    },
  });
}

Now you can execute this task through the CLI:

  • haki the:truth
  • haki the:truth is 42

API

Available methods:

  • load(filepath: String) — Load a Hakifile from given filepath
  • prompt(options: Object) — Generic prompting helper, see options below
  • getPrompts() — Returns Prompts instance
  • getLogger() — Returns LogPose instance
  • getPath(destName: String) — Returns a filepath for output
  • addHelper(name: String, callback: Function) — Register a Mustache helper for calling on templates
  • getHelperList() — Retrieve all registered helpers
  • renderString(value: String, data: Object) — Render template values
  • setGenerator(name: String[, options: Object]) — Register a generator definition, see options below
  • getGenerator(name: String) — Retrieve a registered generator
  • runGenerator(name: String|Object[, defaults: Object]) — Execute any given generator; given name can be an object, see options below
  • hasGenerator(name: String) — Returns true if given generator is defined
  • getGeneratorList([hints: Boolean]) — Retrieve all registered generators, if hints is given then descriptions are prefixed with their names
  • chooseGeneratorList([defaults: Object]) — Prompt to execute from registered generators, defaults are given as for runGenerator()

Generators

Those can be registered or executed directly.

Valid options are:

  • description: String — Displayed on --help
  • validate: Object|Function — To validate input
  • arguments: Array — Map extra argv as input
  • actions: Array|FunctionSee below
  • prompts: Array|FunctionSee below
  • defaults: Object — Initial values
  • quiet: Boolean — Hide output from logs
  • basePath: String — Resolve sources from here
  • abortOnFail: Boolean — Abort whole process on failure

Both prompts and arrays can be functions, once executed they should return an array to be used or nothing.

Actions

Enumerated actions can perform several tasks based on its definition.

Definitions can contain:

  • src: String — Relative to generator's basePath
  • type: String — Action type: add, copy, clean, etc.
  • dest: String — Relative to process.cwd() for output
  • template: String — Used when creating files
  • templateFile: String — Source file used when creating files
  • defaultContent: String — On modify, used if file does not exists yet
  • deleteContent: Boolean — On modify, remove matched code instead of replacing it
  • after: String|RegExp — As below, used to replace before the match
  • before: String|RegExp — As below, used to replace after the match (alias of pattern)
  • pattern: String|RegExp — On modify, used to match-and-replace
  • unless: String|RegExp — On modify, used to skip matching code
  • content: String — Like template but without Mustache support
  • gitUrl: String — Used on clone actions, relative to github
  • callback: Function — Used on extend actions to merge input
  • command: String — Used on exec actions, as shell command
  • quiet: Boolean — Override generator's quiet value
  • abortOnFail: Boolean — Override generator's abortOnFail value

Prompts

User input is being done by Prompts, so any syntax supported is valid, e.g.

  • type: String — Generator type 1
  • name: String — Input name
  • message: String — Optional label

1 Check which types are supported by default.

Global usage

By design haki will scan for immediately available Hakifiles from the current working and other special directories.

Say, we are at $HOME/path/to/project/name so paths below are used:

  • /etc/.config/haki
  • /etc/.hakirc
  • /etc/Hakifile.js
  • $HOME/.config/haki
  • $HOME/.hakirc
  • $HOME/Hakifile.js
  • $HOME/path/to/project/name/.config/haki
  • $HOME/path/to/project/name/.hakirc
  • $HOME/path/to/project/name/Hakifile.js
  • $HOME/path/to/project/.config/haki
  • $HOME/path/to/project/.hakirc
  • $HOME/path/to/project/Hakifile.js
  • $HOME/path/to/.config/haki
  • $HOME/path/to/.hakirc
  • $HOME/path/to/Hakifile.js
  • etc. — scanning stops when / or $HOME path is reached.

Gist usage

You can download and run remote gists too:

$ haki -g [SHA1]

List available gists with haki -g only.

GitHub usage

Download github repositories with:

$ haki <USER/REPO> <DEST>

Package Sidebar

Install

npm i haki

Weekly Downloads

54

Version

0.12.0

License

MIT

Unpacked Size

53.6 kB

Total Files

8

Last publish

Collaborators

  • pateketrueke