0.12.0 • Published 4 years ago

haki v0.12.0

Weekly downloads
4
License
MIT
Repository
-
Last release
4 years ago

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|Function See below
  • prompts: Array|Function See 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>
0.12.0

4 years ago

0.11.0

4 years ago

0.10.4

5 years ago

0.10.3

5 years ago

0.10.2

5 years ago

0.10.1

5 years ago

0.10.0

6 years ago

0.9.0

7 years ago

0.8.0

7 years ago

0.7.1

7 years ago

0.7.0

7 years ago

0.6.6

7 years ago

0.6.5

7 years ago

0.6.4

7 years ago

0.6.3

7 years ago

0.6.2

7 years ago

0.6.1

7 years ago

0.6.0

7 years ago

0.5.3

7 years ago

0.5.2

7 years ago

0.5.1

7 years ago

0.5.0

7 years ago

0.4.1

7 years ago

0.4.0

7 years ago

0.3.4

7 years ago

0.3.3

7 years ago

0.3.2

7 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago

0.0.0

8 years ago