# @xesam/hook

> a simple javascript decorate/hook helper

Latest version **0.1.6** (published 2022-10-22) · ISC license · 0 weekly downloads

## Install

```sh
npm install @xesam/hook
pnpm add @xesam/hook
yarn add @xesam/hook
bun add @xesam/hook
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.6 |
| Published | 2022-10-22 |
| First published | 2020-08-31 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 8.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | xesam |
| Maintainers | xiaopingyuan |

## Links

- npm: https://www.npmjs.com/package/@xesam/hook
- Repository: https://github.com/xesam/hook
- Homepage: https://github.com/xesam/hook#readme
- Issues: https://github.com/xesam/hook/issues
- npm.io page: https://npm.io/package/@xesam/hook

## Recent versions

- 0.1.6 (latest) — 2022-10-22
- 0.1.5 — 2022-06-06
- 0.1.4 — 2022-05-24
- 0.1.3 — 2022-05-24
- 0.1.2 — 2021-07-31
- 0.1.1 — 2021-01-29
- 0.1.0 — 2021-01-28
- 0.0.2 — 2020-12-01
- 0.0.1 — 2020-08-31

## README

# js hook

a simple javascript decorate/hook library.

## usage

```shell script
    npm install @xesam/hook
```

## methods 

```javascript
    const {decorate, hook} = require('@xesam/hook');
    decorate(...); //decorate a function, and get a new function
    hook(...); //hook a object's functional attribute
```

### decorate function with another function

```javascript
    const {decorate} = require('@xesam/hook');
    function fn() {
        console.log('fn');
        return 'a';
    }
    const decorated = decorate(fn, function(srcFn) {
        console.log('before');
        const ret = srcFn();
        console.log('after');
        return ret;
    });
    decorated();
```

output:

```text
    before
    fn
    after
```

### decorate function with object

```javascript
    const {decorate} = require('@xesam/hook');
    function fn(a, b) {
        console.log('fn');
        return a + b;
    }
    const decorated = decorate(fn, {
        before(a, b) {
            console.log('before');
        },
        afterReturn(result, a, b) { // result = fn(100, 200)
            console.log('after');
            return result;
        },
        after(result, error, a, b) { 
            console.log('after');
            return res;
        }
    });
    decorated(100, 200);
```

output:

```text
    before
    fn
    after
```

### hook object attr

```javascript
    const {hook} = require('@xesam/hook');
   const target = {
       data: {
           name: 'hook'
       },
       onLoad(query) {
           console.log('onLoad', this.data.name);
       },
       onShow() {
       },
       methods: {
           onTap() {
           }
       }
   };
   const hook1 = hook(target, 'onLoad', {
       before(query) {
           console.log('before');
       },
       afterReturn(res, query) {
           console.log('after');
           return res;
       }
   });
   hook1.onLoad();
   
   const hook2 = hook(target, 'methods.onTap', {
       before(query) {
           console.log('before');
       },
       afterReturn(res, query) {
           console.log('after');
           return res;
       }
   });
   hook2.methods.onTap();
   
   const hook3 = hook(target, ['onLoad', 'onShow'], {
       before(query) {
           console.log('before');
       },
       afterReturn(res, query) {
           console.log('after');
           return res;
       }
   });
   hook3.onLoad();
   
   const hook4 = hook(target, {
       onLoad(host) {
           return {
               before(query) {
                   console.log('before');
               },
               afterReturn(res, query) {
                   console.log('after');
                   return res;
               }
           };
       },
       onShow(host) {
           return {
               before() {
                   console.log('before');
               },
               afterReturn(res) {
                   console.log('after');
                   return res;
               }
           };
       }
   });
   hook4.onLoad();
```

### ChangeLogs

#### 0.1.6

1. add afterReturn config.

---
_Source: https://npm.io/package/@xesam/hook · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
