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 CHANGED
@@ -1,6 +1,4 @@
1
- MIT License
2
-
3
- Copyright (c) Jared Wray
1
+ MIT License & © Jared Wray
4
2
 
5
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
4
  of this software and associated documentation files (the "Software"), to deal
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 for Your Libraries
3
+ # Async Event and Middleware Hooks
4
4
 
5
5
  [![tests](https://github.com/jaredwray/hookified/actions/workflows/tests.yaml/badge.svg)](https://github.com/jaredwray/hookified/actions/workflows/tests.yaml)
6
6
  [![GitHub license](https://img.shields.io/github/license/jaredwray/hookified)](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 with data passing
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): Promise<void>;
7
- removeHook(event: string, handler: Hook): Promise<void>;
8
- hook(event: string, data: any): Promise<void>;
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
- async onHook(event, handler) {
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
- async removeHook(event, handler) {
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, data) {
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(data);
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,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAa;QACxC,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,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAa;QAC5C,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,CAAC,KAAa,EAAE,IAAS;QAClC,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,IAAI,CAAC,CAAC;gBACrB,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;CACD"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hookified",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "Event and Middleware Hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",