@kanian77/choux 0.2.4 → 0.2.6
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/dist/core/ChouxFacade.d.ts +5 -1
- package/dist/core/ChouxFacade.d.ts.map +1 -1
- package/dist/core/ChouxFacade.js +14 -0
- package/dist/core/ChouxFacade.js.map +1 -1
- package/dist/core/ChouxModule.d.ts.map +1 -1
- package/dist/core/ChouxModule.js +6 -1
- package/dist/core/ChouxModule.js.map +1 -1
- package/dist/core/HookRegistry.d.ts +27 -1
- package/dist/core/HookRegistry.d.ts.map +1 -1
- package/dist/core/HookRegistry.js +59 -0
- package/dist/core/HookRegistry.js.map +1 -1
- package/dist/core/HookRegistry.spec.js +67 -0
- package/dist/core/HookRegistry.spec.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/decorators/hookDecorator.d.ts.map +1 -1
- package/dist/decorators/hookDecorator.js +3 -24
- package/dist/decorators/hookDecorator.js.map +1 -1
- package/dist/decorators/requestHookDecorator.d.ts +21 -0
- package/dist/decorators/requestHookDecorator.d.ts.map +1 -0
- package/dist/decorators/requestHookDecorator.js +43 -0
- package/dist/decorators/requestHookDecorator.js.map +1 -0
- package/dist/decorators/requestHookDecorator.spec.d.ts +2 -0
- package/dist/decorators/requestHookDecorator.spec.d.ts.map +1 -0
- package/dist/decorators/requestHookDecorator.spec.js +131 -0
- package/dist/decorators/requestHookDecorator.spec.js.map +1 -0
- package/dist/lib/functions/addHookMetadata.d.ts +5 -0
- package/dist/lib/functions/addHookMetadata.d.ts.map +1 -0
- package/dist/lib/functions/addHookMetadata.js +25 -0
- package/dist/lib/functions/addHookMetadata.js.map +1 -0
- package/dist/lib/functions/registerInstanceHooks.d.ts.map +1 -1
- package/dist/lib/functions/registerInstanceHooks.js +8 -2
- package/dist/lib/functions/registerInstanceHooks.js.map +1 -1
- package/dist/lib/functions/registerRequestHookHandler.d.ts +2 -0
- package/dist/lib/functions/registerRequestHookHandler.d.ts.map +1 -0
- package/dist/lib/functions/registerRequestHookHandler.js +7 -0
- package/dist/lib/functions/registerRequestHookHandler.js.map +1 -0
- package/dist/lib/functions/registerStaticHooks.d.ts.map +1 -1
- package/dist/lib/functions/registerStaticHooks.js +8 -2
- package/dist/lib/functions/registerStaticHooks.js.map +1 -1
- package/dist/lib/test-related/plugins/plugin-b/module.d.ts.map +1 -1
- package/dist/lib/test-related/plugins/plugin-b/module.js.map +1 -1
- package/dist/lib/types/IHookMetadata.d.ts +1 -0
- package/dist/lib/types/IHookMetadata.d.ts.map +1 -1
- package/dist/lib/types/IHookRegistry.d.ts +6 -0
- package/dist/lib/types/IHookRegistry.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HookFn, LoadedPlugin, PluginModule } from '../lib/types';
|
|
1
|
+
import { HookFn, LoadedPlugin, PluginModule, RequestHookFn } from '../lib/types';
|
|
2
2
|
import { IChouxFacade } from './IChouxFacade';
|
|
3
3
|
export declare class ChouxFacade implements IChouxFacade {
|
|
4
4
|
private readonly pluginManager;
|
|
@@ -10,8 +10,12 @@ export declare class ChouxFacade implements IChouxFacade {
|
|
|
10
10
|
getAllPlugins(): LoadedPlugin[];
|
|
11
11
|
register(name: string, fn: HookFn): void;
|
|
12
12
|
trigger(name: string, ...args: any[]): Promise<void>;
|
|
13
|
+
request<T = any>(name: string, ...args: any[]): Promise<T | undefined>;
|
|
14
|
+
registerRequest(name: string, fn: RequestHookFn): void;
|
|
13
15
|
unregister(name: string, fn?: HookFn): void;
|
|
16
|
+
unregisterRequest(name: string): void;
|
|
14
17
|
getHooks(name: string): HookFn[];
|
|
18
|
+
getRequestHook(name: string): RequestHookFn | undefined;
|
|
15
19
|
clear(): void;
|
|
16
20
|
}
|
|
17
21
|
//# sourceMappingURL=ChouxFacade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChouxFacade.d.ts","sourceRoot":"","sources":["../../src/core/ChouxFacade.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAGN,YAAY,EAEZ,YAAY,
|
|
1
|
+
{"version":3,"file":"ChouxFacade.d.ts","sourceRoot":"","sources":["../../src/core/ChouxFacade.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAGN,YAAY,EAEZ,YAAY,EACZ,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBACa,WAAY,YAAW,YAAY;IAE9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAGxC,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAInE,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,aAAa,IAAI,YAAY,EAAE;IAK/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI5E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI;IAItD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIvD,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/core/ChouxFacade.js
CHANGED
|
@@ -90,12 +90,26 @@ let ChouxFacade = (() => {
|
|
|
90
90
|
return yield this.hookRegistry.trigger(name, ...args);
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
+
request(name, ...args) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
return yield this.hookRegistry.request(name, ...args);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
registerRequest(name, fn) {
|
|
99
|
+
this.hookRegistry.registerRequest(name, fn);
|
|
100
|
+
}
|
|
93
101
|
unregister(name, fn) {
|
|
94
102
|
return this.hookRegistry.unregister(name, fn);
|
|
95
103
|
}
|
|
104
|
+
unregisterRequest(name) {
|
|
105
|
+
this.hookRegistry.unregisterRequest(name);
|
|
106
|
+
}
|
|
96
107
|
getHooks(name) {
|
|
97
108
|
return this.hookRegistry.getHooks(name);
|
|
98
109
|
}
|
|
110
|
+
getRequestHook(name) {
|
|
111
|
+
return this.hookRegistry.getRequestHook(name);
|
|
112
|
+
}
|
|
99
113
|
clear() {
|
|
100
114
|
return this.hookRegistry.clear();
|
|
101
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChouxFacade.js","sourceRoot":"","sources":["../../src/core/ChouxFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EAKnB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"ChouxFacade.js","sourceRoot":"","sources":["../../src/core/ChouxFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EAKnB,oBAAoB,GAGrB,MAAM,cAAc,CAAC;IAIT,WAAW;4BADvB,OAAO,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;;;;;;;;;;;QAO7D,yBAAyB;QACnB,gBAAgB,CAAC,YAA0B;;gBAC/C,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACjE,CAAC;SAAA;QAEK,iBAAiB,CAAC,aAA6B;;gBACnD,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YACnE,CAAC;SAAA;QAEK,QAAQ;;gBACZ,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC7C,CAAC;SAAA;QAED,SAAS,CAAC,IAAY;YACpB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,aAAa;YACX,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC;QAED,wBAAwB;QACxB,QAAQ,CAAC,IAAY,EAAE,EAAU;YAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAEK,OAAO,CAAC,IAAY,EAAE,GAAG,IAAW;;gBACxC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YACxD,CAAC;SAAA;QAEK,OAAO,CAAU,IAAY,EAAE,GAAG,IAAW;;gBACjD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAI,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YAC3D,CAAC;SAAA;QAED,eAAe,CAAC,IAAY,EAAE,EAAiB;YAC7C,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,UAAU,CAAC,IAAY,EAAE,EAAW;YAClC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,iBAAiB,CAAC,IAAY;YAC5B,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,QAAQ,CAAC,IAAY;YACnB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,cAAc,CAAC,IAAY;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,KAAK;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;;YA5DgB;;;;;eAA+B;YAE/B;;;;;eAA6B;;;;;;;qCAH7C,MAAM,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;oCAEvC,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QADvC,yLAAiB,aAAa,6BAAb,aAAa,qGAAkB;QAEhD,sLAAiB,YAAY,6BAAZ,YAAY,mGAAiB;QAJhD,6KA+DC;;;QA/DY,uDAAW;;;;SAAX,WAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChouxModule.d.ts","sourceRoot":"","sources":["../../src/core/ChouxModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChouxModule.d.ts","sourceRoot":"","sources":["../../src/core/ChouxModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAUzC,eAAO,MAAM,WAAW,QAetB,CAAC"}
|
package/dist/core/ChouxModule.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Module } from '@kanian77/tject';
|
|
2
2
|
import { HookRegistry } from './HookRegistry';
|
|
3
3
|
import { PluginManager } from './PluginManager';
|
|
4
|
-
import { HOOK_REGISTRY_TOKEN, PLUGIN_MANAGER_TOKEN } from '../lib/types/tokens';
|
|
4
|
+
import { CHOUX_FACADE_TOKEN, HOOK_REGISTRY_TOKEN, PLUGIN_MANAGER_TOKEN, } from '../lib/types/tokens';
|
|
5
|
+
import { ChouxFacade } from './ChouxFacade';
|
|
5
6
|
export const ChouxModule = new Module({
|
|
6
7
|
providers: [
|
|
7
8
|
{
|
|
@@ -12,6 +13,10 @@ export const ChouxModule = new Module({
|
|
|
12
13
|
provide: PLUGIN_MANAGER_TOKEN,
|
|
13
14
|
useClass: PluginManager,
|
|
14
15
|
},
|
|
16
|
+
{
|
|
17
|
+
provide: CHOUX_FACADE_TOKEN,
|
|
18
|
+
useClass: ChouxFacade,
|
|
19
|
+
},
|
|
15
20
|
],
|
|
16
21
|
});
|
|
17
22
|
//# sourceMappingURL=ChouxModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChouxModule.js","sourceRoot":"","sources":["../../src/core/ChouxModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"ChouxModule.js","sourceRoot":"","sources":["../../src/core/ChouxModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC;IACpC,SAAS,EAAE;QACT;YACE,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,YAAY;SACvB;QACD;YACE,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,aAAa;SACxB;QACD;YACE,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,WAAW;SACtB;KACF;CACF,CAAC,CAAC"}
|
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
import type { HookFn, IHookRegistry } from '../lib/types';
|
|
1
|
+
import type { HookFn, IHookRegistry, RequestHookFn } from '../lib/types';
|
|
2
2
|
/**
|
|
3
3
|
* Registry for application hooks.
|
|
4
4
|
*/
|
|
5
5
|
export declare class HookRegistry implements IHookRegistry {
|
|
6
6
|
private hooks;
|
|
7
|
+
private requestHooks;
|
|
7
8
|
/**
|
|
8
9
|
* Register a hook handler.
|
|
9
10
|
* @param name The name of the hook to register the function for.
|
|
10
11
|
* @param fn The hook handler function.
|
|
11
12
|
*/
|
|
12
13
|
register(name: string, fn: HookFn): void;
|
|
14
|
+
/**
|
|
15
|
+
* Register a hook handler.
|
|
16
|
+
* @param name The name of the hook to register the function for.
|
|
17
|
+
* @param fn The hook handler function.
|
|
18
|
+
*/
|
|
19
|
+
registerRequest(name: string, fn: RequestHookFn): void;
|
|
13
20
|
/**
|
|
14
21
|
* Trigger a hook, calling all registered handlers.
|
|
15
22
|
* @param name The name of the hook to trigger.
|
|
16
23
|
* @param args Arguments to pass to the hook handlers.
|
|
17
24
|
*/
|
|
18
25
|
trigger(name: string, ...args: any[]): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Executes a request hook, calling all its handler.
|
|
28
|
+
* @param name The name of the hook to execute.
|
|
29
|
+
* @param args Arguments to pass to the hook handler.
|
|
30
|
+
*/
|
|
31
|
+
request<T = any>(name: string, ...args: any[]): Promise<T | undefined>;
|
|
19
32
|
/**
|
|
20
33
|
* Unregister a hook handler.
|
|
21
34
|
* If no function is provided, all handlers for the hook will be removed.
|
|
@@ -23,12 +36,25 @@ export declare class HookRegistry implements IHookRegistry {
|
|
|
23
36
|
* @param fn Optional specific handler to remove.
|
|
24
37
|
*/
|
|
25
38
|
unregister(name: string, fn?: HookFn): void;
|
|
39
|
+
/**
|
|
40
|
+
* Unregister a request hook handler.
|
|
41
|
+
* If no callerName is provided, all handlers for the hook will be removed.
|
|
42
|
+
* @param name The name of the hook to unregister from.
|
|
43
|
+
* @param callerName Optional specific handler to remove.
|
|
44
|
+
*/
|
|
45
|
+
unregisterRequest(name: string): void;
|
|
26
46
|
/**
|
|
27
47
|
* Get all registered handlers for a specific hook.
|
|
28
48
|
* @param name The name of the hook to retrieve handlers for.
|
|
29
49
|
* @returns An array of hook handler functions.
|
|
30
50
|
*/
|
|
31
51
|
getHooks(name: string): HookFn[];
|
|
52
|
+
/**
|
|
53
|
+
* Get registered request handler for a specific request hook.
|
|
54
|
+
* @param name The name of the hook to retrieve a handler for.
|
|
55
|
+
* @returns A hook handler function or undefined.
|
|
56
|
+
*/
|
|
57
|
+
getRequestHook(name: string): RequestHookFn | undefined;
|
|
32
58
|
/**
|
|
33
59
|
* Clear all registered hooks.
|
|
34
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookRegistry.d.ts","sourceRoot":"","sources":["../../src/core/HookRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"HookRegistry.d.ts","sourceRoot":"","sources":["../../src/core/HookRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,MAAM,EAEN,aAAa,EACb,aAAa,EAEd,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,qBACa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI;IAQtD;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D;;;;OAIG;IACU,OAAO,CAAC,CAAC,GAAG,GAAG,EAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAkBzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAW3C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIhC;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIvD;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC"}
|
|
@@ -63,6 +63,12 @@ let HookRegistry = (() => {
|
|
|
63
63
|
writable: true,
|
|
64
64
|
value: new Map()
|
|
65
65
|
});
|
|
66
|
+
Object.defineProperty(this, "requestHooks", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
configurable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value: new Map()
|
|
71
|
+
});
|
|
66
72
|
}
|
|
67
73
|
/**
|
|
68
74
|
* Register a hook handler.
|
|
@@ -73,6 +79,18 @@ let HookRegistry = (() => {
|
|
|
73
79
|
const list = this.hooks.get(name) || [];
|
|
74
80
|
this.hooks.set(name, [...list, fn]);
|
|
75
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Register a hook handler.
|
|
84
|
+
* @param name The name of the hook to register the function for.
|
|
85
|
+
* @param fn The hook handler function.
|
|
86
|
+
*/
|
|
87
|
+
registerRequest(name, fn) {
|
|
88
|
+
const handler = this.requestHooks.get(name) || undefined;
|
|
89
|
+
if (this.requestHooks.has(name)) {
|
|
90
|
+
console.warn('You are possibly overwritting a request hook.');
|
|
91
|
+
}
|
|
92
|
+
this.requestHooks.set(name, fn);
|
|
93
|
+
}
|
|
76
94
|
/**
|
|
77
95
|
* Trigger a hook, calling all registered handlers.
|
|
78
96
|
* @param name The name of the hook to trigger.
|
|
@@ -86,6 +104,29 @@ let HookRegistry = (() => {
|
|
|
86
104
|
}
|
|
87
105
|
});
|
|
88
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Executes a request hook, calling all its handler.
|
|
109
|
+
* @param name The name of the hook to execute.
|
|
110
|
+
* @param args Arguments to pass to the hook handler.
|
|
111
|
+
*/
|
|
112
|
+
request(name, ...args) {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
const handler = this.getRequestHook(name);
|
|
115
|
+
if (!handler) {
|
|
116
|
+
console.warn(`No handler registered for requested hook: ${name}`);
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
// Execute the first handler and return its value
|
|
120
|
+
try {
|
|
121
|
+
const result = yield handler(...args);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(`Error during hook request '${name}':`, error);
|
|
126
|
+
throw error; // Re-throw the error so the caller can handle it
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
89
130
|
/**
|
|
90
131
|
* Unregister a hook handler.
|
|
91
132
|
* If no function is provided, all handlers for the hook will be removed.
|
|
@@ -101,6 +142,15 @@ let HookRegistry = (() => {
|
|
|
101
142
|
const filtered = list.filter((registeredFn) => registeredFn !== fn);
|
|
102
143
|
this.hooks.set(name, filtered);
|
|
103
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Unregister a request hook handler.
|
|
147
|
+
* If no callerName is provided, all handlers for the hook will be removed.
|
|
148
|
+
* @param name The name of the hook to unregister from.
|
|
149
|
+
* @param callerName Optional specific handler to remove.
|
|
150
|
+
*/
|
|
151
|
+
unregisterRequest(name) {
|
|
152
|
+
this.requestHooks.delete(name);
|
|
153
|
+
}
|
|
104
154
|
/**
|
|
105
155
|
* Get all registered handlers for a specific hook.
|
|
106
156
|
* @param name The name of the hook to retrieve handlers for.
|
|
@@ -109,11 +159,20 @@ let HookRegistry = (() => {
|
|
|
109
159
|
getHooks(name) {
|
|
110
160
|
return this.hooks.get(name) || [];
|
|
111
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Get registered request handler for a specific request hook.
|
|
164
|
+
* @param name The name of the hook to retrieve a handler for.
|
|
165
|
+
* @returns A hook handler function or undefined.
|
|
166
|
+
*/
|
|
167
|
+
getRequestHook(name) {
|
|
168
|
+
return this.requestHooks.get(name);
|
|
169
|
+
}
|
|
112
170
|
/**
|
|
113
171
|
* Clear all registered hooks.
|
|
114
172
|
*/
|
|
115
173
|
clear() {
|
|
116
174
|
this.hooks.clear();
|
|
175
|
+
this.requestHooks.clear();
|
|
117
176
|
}
|
|
118
177
|
};
|
|
119
178
|
__setFunctionName(_classThis, "HookRegistry");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookRegistry.js","sourceRoot":"","sources":["../../src/core/HookRegistry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"HookRegistry.js","sourceRoot":"","sources":["../../src/core/HookRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,5 +83,72 @@ describe('HookRegistry', () => {
|
|
|
83
83
|
yield registry.trigger('test:hook');
|
|
84
84
|
expect(result).toBe('ab');
|
|
85
85
|
}));
|
|
86
|
+
// --- New Request/Response Hook Tests ---
|
|
87
|
+
describe('HookRegistry - Request/Response', () => {
|
|
88
|
+
it('registers and executes a request hook', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
|
+
const fn = () => 'test data';
|
|
90
|
+
registry.registerRequest('req:hook', fn);
|
|
91
|
+
const result = yield registry.request('req:hook', 'testProvider');
|
|
92
|
+
expect(result).toBe('test data');
|
|
93
|
+
}));
|
|
94
|
+
it('registers and executes a request hook with payload', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
+
const payload = { id: 1 };
|
|
96
|
+
const fn = (p) => {
|
|
97
|
+
expect(p).toEqual(payload);
|
|
98
|
+
return 'got payload';
|
|
99
|
+
};
|
|
100
|
+
registry.registerRequest('req:hook', fn);
|
|
101
|
+
const result = yield registry.request('req:hook', payload);
|
|
102
|
+
expect(result).toBe('got payload');
|
|
103
|
+
}));
|
|
104
|
+
it('returns undefined if hook name does not match', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
|
+
const fn = () => 'test data';
|
|
106
|
+
registry.registerRequest('req:hook', fn);
|
|
107
|
+
const result = yield registry.request('req:wrong-hook', 'testProvider');
|
|
108
|
+
expect(result).toBeUndefined();
|
|
109
|
+
}));
|
|
110
|
+
it('unregisters a specific request handler', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
const fn = () => 'test data';
|
|
112
|
+
registry.registerRequest('req:hook', fn);
|
|
113
|
+
// Ensure it's there
|
|
114
|
+
const result1 = yield registry.request('req:hook', 'testProvider');
|
|
115
|
+
expect(result1).toBe('test data');
|
|
116
|
+
// Unregister and test
|
|
117
|
+
registry.unregisterRequest('req:hook');
|
|
118
|
+
const result2 = yield registry.request('req:hook', 'testProvider');
|
|
119
|
+
expect(result2).toBeUndefined();
|
|
120
|
+
}));
|
|
121
|
+
it('unregisters all request handlers for a hook name if no fn provided', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
122
|
+
const fn1 = () => 'data 1';
|
|
123
|
+
const fn2 = () => 'data 2';
|
|
124
|
+
registry.registerRequest('req:hook', fn1);
|
|
125
|
+
registry.registerRequest('req:hook', fn2);
|
|
126
|
+
// Unregister all for 'req:hook'
|
|
127
|
+
registry.unregisterRequest('req:hook');
|
|
128
|
+
const result1 = yield registry.request('req:hook');
|
|
129
|
+
const result2 = yield registry.request('req:hook');
|
|
130
|
+
expect(result1).toBeUndefined();
|
|
131
|
+
expect(result2).toBeUndefined();
|
|
132
|
+
}));
|
|
133
|
+
it('getRequestHook returns the correct handler', () => {
|
|
134
|
+
const fn = () => { };
|
|
135
|
+
registry.registerRequest('req:hook', fn);
|
|
136
|
+
const hook = registry.getRequestHook('req:hook');
|
|
137
|
+
expect(hook).toBe(fn);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
// --- Updated Clear Test ---
|
|
141
|
+
it('clear removes all event and request hooks', () => {
|
|
142
|
+
// Register one of each
|
|
143
|
+
const fn = () => { };
|
|
144
|
+
const reqFn = () => { };
|
|
145
|
+
registry.register('test:hook', fn);
|
|
146
|
+
registry.registerRequest('req:hook', reqFn);
|
|
147
|
+
// Clear all
|
|
148
|
+
registry.clear();
|
|
149
|
+
// Check both are gone
|
|
150
|
+
expect(registry.getHooks('test:hook').length).toBe(0);
|
|
151
|
+
expect(registry.getRequestHook('req:hook')).toBeUndefined();
|
|
152
|
+
});
|
|
86
153
|
});
|
|
87
154
|
//# sourceMappingURL=HookRegistry.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookRegistry.spec.js","sourceRoot":"","sources":["../../src/core/HookRegistry.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HookRegistry.spec.js","sourceRoot":"","sources":["../../src/core/HookRegistry.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
package/dist/core/index.js
CHANGED
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hookDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,IAClB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,UACxC,CAAC,WACA,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,KAC3C,CAAC,GAAG,IAAI,CAwBZ"}
|
|
@@ -1,26 +1,5 @@
|
|
|
1
1
|
// File: src/decorators/hookDecorator.ts (or wherever you have it)
|
|
2
|
-
import {
|
|
3
|
-
/**
|
|
4
|
-
* Helper function to idempotently add metadata to a class constructor.
|
|
5
|
-
*/
|
|
6
|
-
function addHookMetadata(ctor, hookName, methodName, isStatic = false) {
|
|
7
|
-
if (!Object.hasOwnProperty.call(ctor, HOOK_METADATA_KEY)) {
|
|
8
|
-
const parentMetadata = ctor[HOOK_METADATA_KEY];
|
|
9
|
-
ctor[HOOK_METADATA_KEY] = parentMetadata ? [...parentMetadata] : [];
|
|
10
|
-
}
|
|
11
|
-
const metadata = ctor[HOOK_METADATA_KEY];
|
|
12
|
-
// Prevent duplicates
|
|
13
|
-
const exists = metadata.some((m) => m.hookName === hookName &&
|
|
14
|
-
m.methodName === methodName &&
|
|
15
|
-
m.isStatic === isStatic);
|
|
16
|
-
if (!exists) {
|
|
17
|
-
metadata.push({
|
|
18
|
-
hookName,
|
|
19
|
-
methodName,
|
|
20
|
-
isStatic,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
}
|
|
2
|
+
import { addHookMetadata } from '../lib/functions/addHookMetadata';
|
|
24
3
|
/**
|
|
25
4
|
* @Hook decorator
|
|
26
5
|
* Attaches metadata to a class to register a method as a hook handler.
|
|
@@ -35,14 +14,14 @@ export function Hook(hookName) {
|
|
|
35
14
|
// For static methods, initializer runs ONCE on class definition
|
|
36
15
|
context.addInitializer(function () {
|
|
37
16
|
// 'this' is the class constructor
|
|
38
|
-
addHookMetadata(this, hookName, methodNameStr, true);
|
|
17
|
+
addHookMetadata(this, hookName, methodNameStr, false, true);
|
|
39
18
|
});
|
|
40
19
|
}
|
|
41
20
|
else {
|
|
42
21
|
// For instance methods, initializer runs PER INSTANCE creation
|
|
43
22
|
context.addInitializer(function () {
|
|
44
23
|
// 'this' is the class instance, get constructor from it
|
|
45
|
-
addHookMetadata(this.constructor, hookName, methodNameStr);
|
|
24
|
+
addHookMetadata(this.constructor, hookName, methodNameStr, false, false);
|
|
46
25
|
});
|
|
47
26
|
}
|
|
48
27
|
// We are not changing the method, so return void
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookDecorator.js","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hookDecorator.js","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAKnE;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,QAAgB;IACnC,OAAO,UACL,MAAS,EACT,OAA4C;QAE5C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,gEAAgE;YAChE,OAAO,CAAC,cAAc,CAAC;gBACrB,kCAAkC;gBAClC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,OAAO,CAAC,cAAc,CAAC;gBACrB,wDAAwD;gBACxD,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iDAAiD;QACjD,OAAO;IACT,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decorator to mark a method as a query hook handler.
|
|
3
|
+
* Request hooks return values and should have only one handler per hook name.
|
|
4
|
+
*
|
|
5
|
+
* Must be used with @EnableHooks on the class.
|
|
6
|
+
*
|
|
7
|
+
* @param hookName - The name of the query hook
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @EnableHooks
|
|
12
|
+
* class ConfigPlugin {
|
|
13
|
+
* @RequestHook(CONFIG_INTERFACE_HOOKS.GET_CONFIG)
|
|
14
|
+
* async getConfig(): Promise<ConfigData> {
|
|
15
|
+
* return this.configService.getConfig();
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function RequestHook(hookName: string): <T extends (...args: any[]) => any>(target: T, context: ClassMethodDecoratorContext<any, T>) => T | void;
|
|
21
|
+
//# sourceMappingURL=requestHookDecorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestHookDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/requestHookDecorator.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IACzB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,UACxC,CAAC,WACA,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,KAC3C,CAAC,GAAG,IAAI,CAoBZ"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { addHookMetadata } from '../lib/functions/addHookMetadata';
|
|
2
|
+
/**
|
|
3
|
+
* Decorator to mark a method as a query hook handler.
|
|
4
|
+
* Request hooks return values and should have only one handler per hook name.
|
|
5
|
+
*
|
|
6
|
+
* Must be used with @EnableHooks on the class.
|
|
7
|
+
*
|
|
8
|
+
* @param hookName - The name of the query hook
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* @EnableHooks
|
|
13
|
+
* class ConfigPlugin {
|
|
14
|
+
* @RequestHook(CONFIG_INTERFACE_HOOKS.GET_CONFIG)
|
|
15
|
+
* async getConfig(): Promise<ConfigData> {
|
|
16
|
+
* return this.configService.getConfig();
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function RequestHook(hookName) {
|
|
22
|
+
return function (target, context) {
|
|
23
|
+
if (context.kind !== 'method') {
|
|
24
|
+
throw new Error('@Hook decorator can only be applied to methods.');
|
|
25
|
+
}
|
|
26
|
+
const methodNameStr = context.name.toString();
|
|
27
|
+
if (context.static) {
|
|
28
|
+
// For static methods, initializer runs ONCE on class definition
|
|
29
|
+
context.addInitializer(function () {
|
|
30
|
+
// 'this' is the class constructor
|
|
31
|
+
addHookMetadata(this, hookName, methodNameStr, true, true);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// For instance methods, initializer runs PER INSTANCE creation
|
|
36
|
+
context.addInitializer(function () {
|
|
37
|
+
// 'this' is the class instance, get constructor from it
|
|
38
|
+
addHookMetadata(this.constructor, hookName, methodNameStr, true, false);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=requestHookDecorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestHookDecorator.js","sourceRoot":"","sources":["../../src/decorators/requestHookDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,UACL,MAAS,EACT,OAA4C;QAE5C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,gEAAgE;YAChE,OAAO,CAAC,cAAc,CAAC;gBACrB,kCAAkC;gBAClC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,OAAO,CAAC,cAAc,CAAC;gBACrB,wDAAwD;gBACxD,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestHookDecorator.spec.d.ts","sourceRoot":"","sources":["../../src/decorators/requestHookDecorator.spec.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
45
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
46
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
47
|
+
};
|
|
48
|
+
import 'reflect-metadata';
|
|
49
|
+
import { describe, it, expect, beforeAll } from 'bun:test';
|
|
50
|
+
import { HookRegistry } from '../core';
|
|
51
|
+
import { bootstrap, inject, Module } from '@kanian77/tject';
|
|
52
|
+
import { HOOK_REGISTRY_TOKEN } from '../lib/types';
|
|
53
|
+
import { EnableHooks } from './enableHooksDecorator';
|
|
54
|
+
import { RequestHook } from './requestHookDecorator';
|
|
55
|
+
describe('request hook decorators', () => {
|
|
56
|
+
let registry;
|
|
57
|
+
beforeAll(() => {
|
|
58
|
+
const RegistryModule = new Module({
|
|
59
|
+
providers: [
|
|
60
|
+
{
|
|
61
|
+
provide: HOOK_REGISTRY_TOKEN,
|
|
62
|
+
useClass: HookRegistry,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
bootstrap(RegistryModule);
|
|
67
|
+
});
|
|
68
|
+
it('registers a hook', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
let TestClass = (() => {
|
|
70
|
+
let _classDecorators = [EnableHooks];
|
|
71
|
+
let _classDescriptor;
|
|
72
|
+
let _classExtraInitializers = [];
|
|
73
|
+
let _classThis;
|
|
74
|
+
let _instanceExtraInitializers = [];
|
|
75
|
+
let _testMethod_decorators;
|
|
76
|
+
var TestClass = _classThis = class {
|
|
77
|
+
testMethod() {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
constructor() {
|
|
81
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
__setFunctionName(_classThis, "TestClass");
|
|
85
|
+
(() => {
|
|
86
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
87
|
+
_testMethod_decorators = [RequestHook('test:hook')];
|
|
88
|
+
__esDecorate(_classThis, null, _testMethod_decorators, { kind: "method", name: "testMethod", static: false, private: false, access: { has: obj => "testMethod" in obj, get: obj => obj.testMethod }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
89
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
90
|
+
TestClass = _classThis = _classDescriptor.value;
|
|
91
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
92
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
93
|
+
})();
|
|
94
|
+
return TestClass = _classThis;
|
|
95
|
+
})();
|
|
96
|
+
const instance = new TestClass();
|
|
97
|
+
const called = yield inject(HOOK_REGISTRY_TOKEN).request('test:hook');
|
|
98
|
+
expect(called).toBe(true);
|
|
99
|
+
}));
|
|
100
|
+
it('registers a hook on static method', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
+
let TestClass = (() => {
|
|
102
|
+
let _classDecorators = [EnableHooks];
|
|
103
|
+
let _classDescriptor;
|
|
104
|
+
let _classExtraInitializers = [];
|
|
105
|
+
let _classThis;
|
|
106
|
+
let _staticExtraInitializers = [];
|
|
107
|
+
let _static_testMethod_decorators;
|
|
108
|
+
var TestClass = _classThis = class {
|
|
109
|
+
static testMethod() {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
__setFunctionName(_classThis, "TestClass");
|
|
114
|
+
(() => {
|
|
115
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
116
|
+
_static_testMethod_decorators = [RequestHook('test:hook')];
|
|
117
|
+
__esDecorate(_classThis, null, _static_testMethod_decorators, { kind: "method", name: "testMethod", static: true, private: false, access: { has: obj => "testMethod" in obj, get: obj => obj.testMethod }, metadata: _metadata }, null, _staticExtraInitializers);
|
|
118
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
119
|
+
TestClass = _classThis = _classDescriptor.value;
|
|
120
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
121
|
+
__runInitializers(_classThis, _staticExtraInitializers);
|
|
122
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
123
|
+
})();
|
|
124
|
+
return TestClass = _classThis;
|
|
125
|
+
})();
|
|
126
|
+
const instance = new TestClass();
|
|
127
|
+
const called = yield inject(HOOK_REGISTRY_TOKEN).request('test:hook');
|
|
128
|
+
expect(called).toBe(true);
|
|
129
|
+
}));
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=requestHookDecorator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestHookDecorator.spec.js","sourceRoot":"","sources":["../../src/decorators/requestHookDecorator.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,QAAsB,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC;YAChC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mBAAmB;oBAC5B,QAAQ,EAAE,YAAY;iBACvB;aACF;SACF,CAAC,CAAC;QACH,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAS,EAAE;YAE1B,SAAS;oCADd,WAAW;;;;;;;gBAGV,UAAU;oBACR,OAAO,IAAI,CAAC;gBACd,CAAC;;oBAJG,mDAAS;;;;;;0CACZ,WAAW,CAAC,WAAW,CAAC;gBACzB,uLAAA,UAAU,6DAET;gBAJH,6KAKC;;;gBALK,uDAAS;;;;QAMf,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAe,mBAAmB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAA,CAAC,CAAC;IACH,EAAE,CAAC,mCAAmC,EAAE,GAAS,EAAE;YAE3C,SAAS;oCADd,WAAW;;;;;;;gBAGV,MAAM,CAAC,UAAU;oBAChB,OAAO,IAAI,CAAC;gBACb,CAAC;;;;;iDAHA,WAAW,CAAC,WAAW,CAAC;gBACzB,6LAAO,UAAU,2DAEhB;gBAJH,6KAKC;;;gBALK,uDAAS,CAAA;gBAAT,uDAAS;;;;QAMf,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAe,mBAAmB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addHookMetadata.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/addHookMetadata.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,OAAe,QA0B1B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HOOK_METADATA_KEY } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Helper function to idempotently add metadata to a class constructor.
|
|
4
|
+
*/
|
|
5
|
+
export function addHookMetadata(ctor, hookName, methodName, isRequest, isStatic = false) {
|
|
6
|
+
if (!Object.hasOwnProperty.call(ctor, HOOK_METADATA_KEY)) {
|
|
7
|
+
const parentMetadata = ctor[HOOK_METADATA_KEY];
|
|
8
|
+
ctor[HOOK_METADATA_KEY] = parentMetadata ? [...parentMetadata] : [];
|
|
9
|
+
}
|
|
10
|
+
const metadata = ctor[HOOK_METADATA_KEY];
|
|
11
|
+
// Prevent duplicates
|
|
12
|
+
const exists = metadata.some((m) => m.hookName === hookName &&
|
|
13
|
+
m.methodName === methodName &&
|
|
14
|
+
m.isStatic === isStatic &&
|
|
15
|
+
m.isRequest === isRequest);
|
|
16
|
+
if (!exists) {
|
|
17
|
+
metadata.push({
|
|
18
|
+
hookName,
|
|
19
|
+
methodName,
|
|
20
|
+
isStatic,
|
|
21
|
+
isRequest,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=addHookMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addHookMetadata.js","sourceRoot":"","sources":["../../../src/lib/functions/addHookMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAS,EACT,QAAgB,EAChB,UAAkB,EAClB,SAAkB,EAClB,WAAoB,KAAK;IAEzB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAoB,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE1D,qBAAqB;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,QAAQ;QACvB,CAAC,CAAC,UAAU,KAAK,UAAU;QAC3B,CAAC,CAAC,QAAQ,KAAK,QAAQ;QACvB,CAAC,CAAC,SAAS,KAAK,SAAS,CAC5B,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerInstanceHooks.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/registerInstanceHooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registerInstanceHooks.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/registerInstanceHooks.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,aAAc,GAAG,KAAG,IA0CrD,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { HOOK_METADATA_KEY } from '../types';
|
|
2
2
|
import { registerHookHandler } from './registerHookHandler';
|
|
3
|
+
import { registerRequestHookHandler } from './registerRequestHookHandler';
|
|
3
4
|
export const registerInstanceHooks = (instance) => {
|
|
4
5
|
try {
|
|
5
6
|
// Get the metadata
|
|
6
7
|
const hookMetadata = (instance.constructor[HOOK_METADATA_KEY] ||
|
|
7
8
|
[]);
|
|
8
|
-
for (const { hookName, methodName, isStatic } of hookMetadata) {
|
|
9
|
+
for (const { hookName, methodName, isStatic, isRequest, } of hookMetadata) {
|
|
9
10
|
// Only register INSTANCE methods here
|
|
10
11
|
if (!isStatic) {
|
|
11
12
|
// Get method from the instance
|
|
@@ -13,7 +14,12 @@ export const registerInstanceHooks = (instance) => {
|
|
|
13
14
|
if (typeof method === 'function') {
|
|
14
15
|
const originalMethod = method.__original || method;
|
|
15
16
|
// Bind to the instance
|
|
16
|
-
|
|
17
|
+
if (!isRequest) {
|
|
18
|
+
registerHookHandler(hookName, originalMethod.bind(instance));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
registerRequestHookHandler(hookName, originalMethod.bind(instance));
|
|
22
|
+
}
|
|
17
23
|
}
|
|
18
24
|
else {
|
|
19
25
|
console.warn(`Instance @Hook method "${methodName}" not found on instance of ${instance.constructor.name}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerInstanceHooks.js","sourceRoot":"","sources":["../../../src/lib/functions/registerInstanceHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registerInstanceHooks.js","sourceRoot":"","sources":["../../../src/lib/functions/registerInstanceHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAa,EAAQ,EAAE;IAC3D,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC;YAC3D,EAAE,CAAoB,CAAC;QAEzB,KAAK,MAAM,EACT,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,GACV,IAAI,YAAY,EAAE,CAAC;YAClB,sCAAsC;YACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAEpC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;oBACnD,uBAAuB;oBACvB,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC/D,CAAC;yBAAM,CAAC;wBAEN,0BAA0B,CACxB,QAAQ,EACR,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC9B,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,0BAA0B,UAAU,8BAA8B,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAC/F,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,yCAAyC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,EACrE,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerRequestHookHandler.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/registerRequestHookHandler.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,0BAA0B,aAC3B,MAAM,WACP,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAIlD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { inject } from '@kanian77/tject';
|
|
2
|
+
import { HOOK_REGISTRY_TOKEN } from '../types/tokens';
|
|
3
|
+
export const registerRequestHookHandler = (hookName, handler) => {
|
|
4
|
+
const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
|
|
5
|
+
hookRegistry.registerRequest(hookName, handler);
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=registerRequestHookHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerRequestHookHandler.js","sourceRoot":"","sources":["../../../src/lib/functions/registerRequestHookHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,QAAgB,EAChB,OAAiD,EACjD,EAAE;IACF,MAAM,YAAY,GAAG,MAAM,CAAgB,mBAAmB,CAAC,CAAC;IAChE,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerStaticHooks.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/registerStaticHooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registerStaticHooks.d.ts","sourceRoot":"","sources":["../../../src/lib/functions/registerStaticHooks.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,gBAAiB,GAAG,KAAG,IA0CtD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HOOK_METADATA_KEY } from '../types';
|
|
2
2
|
import { registerHookHandler } from './registerHookHandler';
|
|
3
|
+
import { registerRequestHookHandler } from './registerRequestHookHandler';
|
|
3
4
|
// A unique symbol to track if static hooks are already registered for a class
|
|
4
5
|
const STATIC_HOOKS_REGISTERED = Symbol.for('staticHooksRegistered');
|
|
5
6
|
export const registerStaticHooks = (constructor) => {
|
|
@@ -10,12 +11,17 @@ export const registerStaticHooks = (constructor) => {
|
|
|
10
11
|
// Get the metadata
|
|
11
12
|
const hookMetadata = (constructor[HOOK_METADATA_KEY] ||
|
|
12
13
|
[]);
|
|
13
|
-
for (const { hookName, methodName, isStatic } of hookMetadata) {
|
|
14
|
+
for (const { hookName, methodName, isStatic, isRequest } of hookMetadata) {
|
|
14
15
|
if (isStatic) {
|
|
15
16
|
const method = constructor[methodName];
|
|
16
17
|
if (typeof method === 'function') {
|
|
17
18
|
const originalMethod = method.__original || method;
|
|
18
|
-
|
|
19
|
+
if (!isRequest) {
|
|
20
|
+
registerHookHandler(hookName, originalMethod.bind(constructor));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
registerRequestHookHandler(hookName, originalMethod.bind(constructor));
|
|
24
|
+
}
|
|
19
25
|
}
|
|
20
26
|
else {
|
|
21
27
|
console.warn(`Static @Hook method "${methodName}" not found on class ${constructor.name}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerStaticHooks.js","sourceRoot":"","sources":["../../../src/lib/functions/registerStaticHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registerStaticHooks.js","sourceRoot":"","sources":["../../../src/lib/functions/registerStaticHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8EAA8E;AAC9E,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAgB,EAAQ,EAAE;IAC5D,IAAI,WAAW,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,YAAY,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC;YAClD,EAAE,CAAoB,CAAC;QAEzB,KAAK,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,YAAY,EAAE,CAAC;YACzE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBAEvC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;oBACnD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBAClE,CAAC;yBAAM,CAAC;wBACN,0BAA0B,CACxB,QAAQ,EACR,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CACjC,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,wBAAwB,UAAU,wBAAwB,WAAW,CAAC,IAAI,GAAG,CAC9E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,EAAE;YAC1D,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,uCAAuC,WAAW,CAAC,IAAI,GAAG,EAC1D,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/lib/test-related/plugins/plugin-b/module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAEL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,MAAM;IAQ7B,OAAO,CAAC,eAAe;IAPnC,QAAQ,CAAC,QAAQ;;;;;MAKf;gBAEkB,eAAe,EAAE,eAAe;IAIrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAU3B,kBAAkB;YAKlB,kBAAkB;YAKlB,kBAAkB;IAIhC,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/lib/test-related/plugins/plugin-b/module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAEL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,MAAM;IAQ7B,OAAO,CAAC,eAAe;IAPnC,QAAQ,CAAC,QAAQ;;;;;MAKf;gBAEkB,eAAe,EAAE,eAAe;IAIrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAU3B,kBAAkB;YAKlB,kBAAkB;YAKlB,kBAAkB;IAIhC,OAAO,CAAC,uBAAuB;YAQjB,iBAAiB;CAGhC;AAED,eAAO,MAAM,aAAa,cAcxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/lib/test-related/plugins/plugin-b/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,uBAAuB,EAEvB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;;4BAC9C,OAAO,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAClC,WAAW;;;;sBACyB,MAAM;;;;;oCAAd,SAAQ,WAAM;QAQzC,YAAoB,eAAgC;YAClD,KAAK,EAAE,CAAC;YADE;;;;wBARO,mDAAO,EAQN,eAAe;eAAiB;YAP3C;;;;uBAAW;oBAClB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,mBAAmB;oBAChC,YAAY,EAAE,EAAE,EAAE,qCAAqC;iBACxD;eAAC;QAIF,CAAC;QAEc,MAAM;;gBACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;SAAA;QAEc,MAAM;;gBACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBAEpC,gDAAgD;gBAChD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,CAAC;SAAA;QAEc,SAAS;;gBACtB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;SAAA;QAED,mDAAmD;QACnD,yDAAyD;QACzD,IAAI;QAEJ,kEAAkE;QAEpD,kBAAkB,CAAC,IAAS;;gBACxC,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;SAAA;QAGa,kBAAkB;;gBAC9B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACvE,CAAC;SAAA;QAGa,kBAAkB,CAAC,UAAkB;;gBACjD,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC;YAC9D,CAAC;SAAA;QAEO,uBAAuB;YAC7B,MAAM,YAAY,GAAG,MAAM,CAAgB,mBAAmB,CAAC,CAAC;YAChE,YAAY,CAAC,QAAQ,CACnB,qBAAqB,EACrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;QACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/lib/test-related/plugins/plugin-b/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IHookMetadata.d.ts","sourceRoot":"","sources":["../../../src/lib/types/IHookMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"IHookMetadata.d.ts","sourceRoot":"","sources":["../../../src/lib/types/IHookMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export type HookFn = (...args: any[]) => void | Promise<void>;
|
|
2
|
+
export type RequestHookFn<T = any> = (...args: any[]) => Promise<T> | T;
|
|
2
3
|
export type HookMap = Map<string, HookFn[]>;
|
|
4
|
+
export type RequestHookMap = Map<string, RequestHookFn>;
|
|
3
5
|
export interface IHookRegistry {
|
|
4
6
|
register(name: string, fn: HookFn): void;
|
|
7
|
+
registerRequest(name: string, fn: RequestHookFn): void;
|
|
5
8
|
trigger(name: string, ...args: any[]): Promise<void>;
|
|
9
|
+
request<T = any>(name: string, ...args: any[]): Promise<T | undefined> | T | undefined;
|
|
6
10
|
unregister(name: string, fn?: HookFn): void;
|
|
11
|
+
unregisterRequest(name?: string): void;
|
|
7
12
|
getHooks(name: string): HookFn[];
|
|
13
|
+
getRequestHook(name: string): RequestHookFn | undefined;
|
|
8
14
|
clear(): void;
|
|
9
15
|
}
|
|
10
16
|
//# sourceMappingURL=IHookRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IHookRegistry.d.ts","sourceRoot":"","sources":["../../../src/lib/types/IHookRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"IHookRegistry.d.ts","sourceRoot":"","sources":["../../../src/lib/types/IHookRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAExE,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5C,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACxD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAG,EAAE,EAAE,aAAa,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,CAAC,GAAG,GAAG,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACxD,KAAK,IAAI,IAAI,CAAC;CACf"}
|