hookified 0.7.0 → 1.0.0
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/README.md +1 -1
- package/dist/index.cjs +89 -0
- package/dist/index.d.cts +15 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.js +50 -52
- package/package.json +14 -7
- package/dist/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
## Features
|
|
12
12
|
- Emit Events via [Emittery](https://npmjs.com/package/emittery)
|
|
13
13
|
- Async Middleware Hooks for Your Methods
|
|
14
|
-
- ESM and Nodejs 20+
|
|
14
|
+
- ESM / CJS and Nodejs 20+
|
|
15
15
|
- Maintained on a regular basis!
|
|
16
16
|
|
|
17
17
|
Special thanks to [@sindresorhus](https://github.com/sindresorhus) for the [Emittery](https://npmjs.com/package/emittery) library. 🍻
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
Hookified: () => Hookified
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(src_exports);
|
|
36
|
+
var import_emittery = __toESM(require("emittery"), 1);
|
|
37
|
+
var Hookified = class extends import_emittery.default {
|
|
38
|
+
_hooks;
|
|
39
|
+
constructor() {
|
|
40
|
+
super();
|
|
41
|
+
this._hooks = /* @__PURE__ */ new Map();
|
|
42
|
+
}
|
|
43
|
+
// Adds a handler function for a specific event
|
|
44
|
+
onHook(event, handler) {
|
|
45
|
+
const eventHandlers = this._hooks.get(event);
|
|
46
|
+
if (eventHandlers) {
|
|
47
|
+
eventHandlers.push(handler);
|
|
48
|
+
} else {
|
|
49
|
+
this._hooks.set(event, [handler]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Removes a specific handler function for a specific event
|
|
53
|
+
removeHook(event, handler) {
|
|
54
|
+
const eventHandlers = this._hooks.get(event);
|
|
55
|
+
if (eventHandlers) {
|
|
56
|
+
const index = eventHandlers.indexOf(handler);
|
|
57
|
+
if (index !== -1) {
|
|
58
|
+
eventHandlers.splice(index, 1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Triggers all handlers for a specific event with provided data
|
|
63
|
+
async hook(event, ...arguments_) {
|
|
64
|
+
const eventHandlers = this._hooks.get(event);
|
|
65
|
+
if (eventHandlers) {
|
|
66
|
+
for (const handler of eventHandlers) {
|
|
67
|
+
try {
|
|
68
|
+
await handler(...arguments_);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
await this.emit("error", new Error(`Error in hook handler for event "${event}": ${error.message}`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Provides read-only access to the current handlers
|
|
76
|
+
get hooks() {
|
|
77
|
+
return this._hooks;
|
|
78
|
+
}
|
|
79
|
+
getHooks(event) {
|
|
80
|
+
return this._hooks.get(event);
|
|
81
|
+
}
|
|
82
|
+
clearHooks() {
|
|
83
|
+
this._hooks.clear();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
87
|
+
0 && (module.exports = {
|
|
88
|
+
Hookified
|
|
89
|
+
});
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Emittery from 'emittery';
|
|
2
|
+
|
|
3
|
+
type Hook = (...arguments_: any[]) => Promise<void> | void;
|
|
4
|
+
declare class Hookified extends Emittery {
|
|
5
|
+
_hooks: Map<string, Hook[]>;
|
|
6
|
+
constructor();
|
|
7
|
+
onHook(event: string, handler: Hook): void;
|
|
8
|
+
removeHook(event: string, handler: Hook): void;
|
|
9
|
+
hook<T>(event: string, ...arguments_: T[]): Promise<void>;
|
|
10
|
+
get hooks(): Map<string, Hook[]>;
|
|
11
|
+
getHooks(event: string): Hook[] | undefined;
|
|
12
|
+
clearHooks(): void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { type Hook, Hookified };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import Emittery from 'emittery';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
type Hook = (...arguments_: any[]) => Promise<void> | void;
|
|
4
|
+
declare class Hookified extends Emittery {
|
|
4
5
|
_hooks: Map<string, Hook[]>;
|
|
5
6
|
constructor();
|
|
6
7
|
onHook(event: string, handler: Hook): void;
|
|
7
8
|
removeHook(event: string, handler: Hook): void;
|
|
8
|
-
hook(event: string, ...
|
|
9
|
+
hook<T>(event: string, ...arguments_: T[]): Promise<void>;
|
|
9
10
|
get hooks(): Map<string, Hook[]>;
|
|
10
11
|
getHooks(event: string): Hook[] | undefined;
|
|
11
12
|
clearHooks(): void;
|
|
12
13
|
}
|
|
14
|
+
|
|
15
|
+
export { type Hook, Hookified };
|
package/dist/index.js
CHANGED
|
@@ -1,56 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import Emittery from "emittery";
|
|
3
|
+
var Hookified = class extends Emittery {
|
|
4
|
+
_hooks;
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this._hooks = /* @__PURE__ */ new Map();
|
|
8
|
+
}
|
|
9
|
+
// Adds a handler function for a specific event
|
|
10
|
+
onHook(event, handler) {
|
|
11
|
+
const eventHandlers = this._hooks.get(event);
|
|
12
|
+
if (eventHandlers) {
|
|
13
|
+
eventHandlers.push(handler);
|
|
14
|
+
} else {
|
|
15
|
+
this._hooks.set(event, [handler]);
|
|
7
16
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
// Removes a specific handler function for a specific event
|
|
19
|
-
removeHook(event, handler) {
|
|
20
|
-
const eventHandlers = this._hooks.get(event);
|
|
21
|
-
if (eventHandlers) {
|
|
22
|
-
const index = eventHandlers.indexOf(handler);
|
|
23
|
-
if (index !== -1) {
|
|
24
|
-
eventHandlers.splice(index, 1);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
17
|
+
}
|
|
18
|
+
// Removes a specific handler function for a specific event
|
|
19
|
+
removeHook(event, handler) {
|
|
20
|
+
const eventHandlers = this._hooks.get(event);
|
|
21
|
+
if (eventHandlers) {
|
|
22
|
+
const index = eventHandlers.indexOf(handler);
|
|
23
|
+
if (index !== -1) {
|
|
24
|
+
eventHandlers.splice(index, 1);
|
|
25
|
+
}
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// eslint-disable-next-line no-await-in-loop
|
|
39
|
-
await this.emit('error', new Error(`Error in hook handler for event "${event}": ${error.message}`));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
27
|
+
}
|
|
28
|
+
// Triggers all handlers for a specific event with provided data
|
|
29
|
+
async hook(event, ...arguments_) {
|
|
30
|
+
const eventHandlers = this._hooks.get(event);
|
|
31
|
+
if (eventHandlers) {
|
|
32
|
+
for (const handler of eventHandlers) {
|
|
33
|
+
try {
|
|
34
|
+
await handler(...arguments_);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
await this.emit("error", new Error(`Error in hook handler for event "${event}": ${error.message}`));
|
|
42
37
|
}
|
|
38
|
+
}
|
|
43
39
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
40
|
+
}
|
|
41
|
+
// Provides read-only access to the current handlers
|
|
42
|
+
get hooks() {
|
|
43
|
+
return this._hooks;
|
|
44
|
+
}
|
|
45
|
+
getHooks(event) {
|
|
46
|
+
return this._hooks.get(event);
|
|
47
|
+
}
|
|
48
|
+
clearHooks() {
|
|
49
|
+
this._hooks.clear();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
Hookified
|
|
54
|
+
};
|
package/package.json
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hookified",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Event and Middleware Hooks",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/index.
|
|
7
|
-
"
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"require": "./dist/index.cjs",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
9
15
|
"engines": {
|
|
10
16
|
"node": ">=20"
|
|
11
17
|
},
|
|
@@ -13,7 +19,7 @@
|
|
|
13
19
|
"test": "xo --fix && vitest run --coverage",
|
|
14
20
|
"test:ci": "xo && vitest run --coverage",
|
|
15
21
|
"clean": "rimraf ./dist ./coverage ./site/dist",
|
|
16
|
-
"build": "rimraf ./dist &&
|
|
22
|
+
"build": "rimraf ./dist && tsup src/index.ts --format cjs,esm --dts --clean",
|
|
17
23
|
"website:build": "docula build",
|
|
18
24
|
"website:serve": "docula serve",
|
|
19
25
|
"prepare": "npm run build"
|
|
@@ -55,11 +61,12 @@
|
|
|
55
61
|
"emittery": "^1.0.3"
|
|
56
62
|
},
|
|
57
63
|
"devDependencies": {
|
|
58
|
-
"@vitest/coverage-v8": "^2.
|
|
64
|
+
"@vitest/coverage-v8": "^2.1.1",
|
|
59
65
|
"docula": "^0.9.0",
|
|
60
66
|
"rimraf": "^6.0.1",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
67
|
+
"tsup": "^8.3.0",
|
|
68
|
+
"typescript": "^5.6.2",
|
|
69
|
+
"vitest": "^2.1.1",
|
|
63
70
|
"xo": "^0.59.3"
|
|
64
71
|
},
|
|
65
72
|
"files": [
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,CAAC,KAAa,EAAE,GAAG,IAAW;QACvC,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,mFAAmF;oBACnF,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxB,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"}
|