npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

haki

v0.12.0

Published

Small generator with will powers

Downloads

173

Readme

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>