hookified 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -3
- package/README.md +71 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<img src="site/logo.svg" alt="Hookified" height="400" align="center">
|
|
2
2
|
|
|
3
|
-
# Event and Middleware Hooks
|
|
3
|
+
# Async Event and Middleware Hooks
|
|
4
4
|
|
|
5
5
|
[](https://github.com/jaredwray/hookified/actions/workflows/tests.yaml)
|
|
6
6
|
[](https://github.com/jaredwray/hookified/blob/master/LICENSE)
|
|
@@ -10,10 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
- Emit Events via [Emittery](https://npmjs.com/package/emittery)
|
|
13
|
-
- Middleware Hooks
|
|
13
|
+
- Async Middleware Hooks for Your Methods
|
|
14
14
|
- ESM and Nodejs 20+
|
|
15
15
|
- Maintained on a regular basis!
|
|
16
16
|
|
|
17
|
+
Special thanks to [@sindresorhus](https://github.com/sindresorhus) for the [Emittery](https://npmjs.com/package/emittery) library. 🍻
|
|
18
|
+
|
|
17
19
|
## Installation
|
|
18
20
|
```bash
|
|
19
21
|
npm install hookified --save
|
|
@@ -31,7 +33,7 @@ class MyClass extends Hookified {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
async myMethodEmittingEvent() {
|
|
34
|
-
await this.emit('message', 'Hello World');
|
|
36
|
+
await this.emit('message', 'Hello World'); //using Emittery
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
//with hooks you can pass data in and if they are subscribed via onHook they can modify the data
|
|
@@ -43,5 +45,71 @@ class MyClass extends Hookified {
|
|
|
43
45
|
return data;
|
|
44
46
|
}
|
|
45
47
|
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
You can even pass in multiple arguments to the hooks:
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
import { Hookified } from 'hookified';
|
|
54
|
+
|
|
55
|
+
class MyClass extends Hookified {
|
|
56
|
+
constructor() {
|
|
57
|
+
super();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async myMethodWithHooks() Promise<any> {
|
|
61
|
+
let data = { some: 'data' };
|
|
62
|
+
let data2 = { some: 'data2' };
|
|
63
|
+
// do something
|
|
64
|
+
await this.hook('before:myMethod2', data, data2);
|
|
65
|
+
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## API
|
|
72
|
+
|
|
73
|
+
Please see the [Emittery](https://npmjs.com/package/emittery) documentation for more information on the event emitter.
|
|
74
|
+
|
|
75
|
+
### .onHook(eventName, handler)
|
|
76
|
+
|
|
77
|
+
Subscribe to a hook event.
|
|
78
|
+
|
|
79
|
+
### .removeHook(eventName)
|
|
80
|
+
|
|
81
|
+
Unsubscribe from a hook event.
|
|
82
|
+
|
|
83
|
+
### .hook(eventName, ...args)
|
|
84
|
+
|
|
85
|
+
Run a hook event.
|
|
86
|
+
|
|
87
|
+
### .hooks
|
|
88
|
+
|
|
89
|
+
Get all hooks.
|
|
90
|
+
|
|
91
|
+
### .getHooks(eventName)
|
|
92
|
+
|
|
93
|
+
Get all hooks for an event.
|
|
94
|
+
|
|
95
|
+
### .clearHooks(eventName)
|
|
96
|
+
|
|
97
|
+
## Development and Testing
|
|
98
|
+
|
|
99
|
+
Hookified is written in TypeScript and tests are written in `vitest`. To run the tests, use the following command:
|
|
100
|
+
|
|
101
|
+
To setup the environment and run the tests:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm i && npm test
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
To contribute follow the [Contributing Guidelines](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
108
|
+
|
|
109
|
+
## License
|
|
110
|
+
|
|
111
|
+
[MIT & © Jared Wray](LICENSE)
|
|
112
|
+
|
|
113
|
+
|
|
46
114
|
|
|
47
115
|
|
package/dist/index.d.ts
CHANGED
|
@@ -3,8 +3,10 @@ export type Hook = (...arguments_: any[]) => Promise<void> | void;
|
|
|
3
3
|
export declare class Hookified extends Emittery {
|
|
4
4
|
_hooks: Map<string, Hook[]>;
|
|
5
5
|
constructor();
|
|
6
|
-
onHook(event: string, handler: Hook):
|
|
7
|
-
removeHook(event: string, handler: Hook):
|
|
8
|
-
hook(event: string,
|
|
6
|
+
onHook(event: string, handler: Hook): void;
|
|
7
|
+
removeHook(event: string, handler: Hook): void;
|
|
8
|
+
hook<T>(event: string, ...arguments_: T[]): Promise<void>;
|
|
9
9
|
get hooks(): Map<string, Hook[]>;
|
|
10
|
+
getHooks(event: string): Hook[] | undefined;
|
|
11
|
+
clearHooks(): void;
|
|
10
12
|
}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export class Hookified extends Emittery {
|
|
|
6
6
|
this._hooks = new Map();
|
|
7
7
|
}
|
|
8
8
|
// Adds a handler function for a specific event
|
|
9
|
-
|
|
9
|
+
onHook(event, handler) {
|
|
10
10
|
const eventHandlers = this._hooks.get(event);
|
|
11
11
|
if (eventHandlers) {
|
|
12
12
|
eventHandlers.push(handler);
|
|
@@ -16,7 +16,7 @@ export class Hookified extends Emittery {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
// Removes a specific handler function for a specific event
|
|
19
|
-
|
|
19
|
+
removeHook(event, handler) {
|
|
20
20
|
const eventHandlers = this._hooks.get(event);
|
|
21
21
|
if (eventHandlers) {
|
|
22
22
|
const index = eventHandlers.indexOf(handler);
|
|
@@ -26,13 +26,13 @@ export class Hookified extends Emittery {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
// Triggers all handlers for a specific event with provided data
|
|
29
|
-
async hook(event,
|
|
29
|
+
async hook(event, ...arguments_) {
|
|
30
30
|
const eventHandlers = this._hooks.get(event);
|
|
31
31
|
if (eventHandlers) {
|
|
32
32
|
for (const handler of eventHandlers) {
|
|
33
33
|
try {
|
|
34
34
|
// eslint-disable-next-line no-await-in-loop
|
|
35
|
-
await handler(
|
|
35
|
+
await handler(...arguments_);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
38
|
// eslint-disable-next-line no-await-in-loop
|
|
@@ -46,5 +46,11 @@ export class Hookified extends Emittery {
|
|
|
46
46
|
// Creating a new map to prevent external modifications to the original map
|
|
47
47
|
return this._hooks;
|
|
48
48
|
}
|
|
49
|
+
getHooks(event) {
|
|
50
|
+
return this._hooks.get(event);
|
|
51
|
+
}
|
|
52
|
+
clearHooks() {
|
|
53
|
+
this._hooks.clear();
|
|
54
|
+
}
|
|
49
55
|
}
|
|
50
56
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACtC,MAAM,CAAsB;IAE5B;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,+CAA+C;IAC/C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACtC,MAAM,CAAsB;IAE5B;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,+CAA+C;IAC/C,MAAM,CAAC,KAAa,EAAE,OAAa;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,aAAa,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IAED,2DAA2D;IAC3D,UAAU,CAAC,KAAa,EAAE,OAAa;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,aAAa,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;IACF,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,IAAI,CAAI,KAAa,EAAE,GAAG,UAAe;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,aAAa,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACJ,4CAA4C;oBAC5C,MAAM,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,4CAA4C;oBAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,oCAAoC,KAAK,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,oDAAoD;IACpD,IAAI,KAAK;QACR,2EAA2E;QAC3E,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACD"}
|