hable
Version:
Awaitable hooks for Node.js
129 lines (83 loc) • 2.79 kB
Markdown
# Hable
[](https://circleci.com/gh/jsless/hable)
[](https://codecov.io/gh/jsless/hable)
[](https://www.npmjs.com/package/hable)
[](https://www.npmjs.com/package/hable)
[](https://unpkg.com/hable)
> Awaitable hooks for Node.js
## Install
Using yarn:
```bash
yarn add hable
```
Using npm:
```bash
npm install hable
```
## Usage
**Extend your base class from Hable:**
```js
import Hookable from 'hable'
export default class Foo extends Hookable {
constructor() {
// Call to parent to initialize
super()
// Initialize Hookable with custom logger
// super(consola)
}
async someFunction() {
// Call and wait for `hook1` hooks (if any) sequential
await this.callHook('hook1')
// Call and wait for `hook2` hooks (if any) in parallel
await this.callHookParallel('hook2')
}
}
```
**Inside plugins, register for any hook:**
```js
const lib = newFooLib()
// Register a handler for `hook2`
lib.hook('hook2', async () => { /* ... */ })
// Register multiply handlers at once
lib.hookObj({
hook1: async () => { /* ... */ },
hook2: [ /* can be also an array */ ]
})
```
## Hookable class
### `constructor(logger)`
Custom logger. Default logger is `console` but you can use your own or [consola](https://github.com/nuxt/consola).
It should be an object implementing following functions:
- warn
- error
- fatal (optional)
### `hook (name, fn)`
Register a handler for a specific hook. `fn` can be a single function or an array.
### `addHooks(configHooks)`
Flatten and register hooks object.
Example:
```js
hookable.addHooks({
test: {
before: () => {},
after: () => {}
}
})
```
This registers `test:before` and `test:after` hooks at bulk.
### `async callHook (name, ...args)`
Used by class itself to **sequentially** call handlers of a specific hook.
### `deprecateHook (old, name)`
Deprecate hook called `old` in favor of `name` hook.
### `deprecateHooks (deprecatedHooks)`
Deprecate all hooks from an object (keys are old and values or newer ones).
### `clearHook (name)`
Clear all hooks for a specific hook.
### `clearHooks ()`
Clear all hooks registered in the class.
### `flatHooks (hooksObj)`
Register many hooks using an object.
## Credits
Extracted from [Nuxt.js](github.com/nuxt/nuxt.js) hooks system. Original author: [Sébastien Chopin](https://github.com/Atinux).
## License
MIT