-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
register-hooks.ts
32 lines (30 loc) · 956 Bytes
/
register-hooks.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { Container } from "../di/mod.ts";
import { HookMetadataArgs } from "../metadata/hook.ts";
import { BusinessType } from "../types/business.ts";
/**
* Register hooks and resolve hook instance by type in layer
* @param layer
* @param hooks
* @param type
*/
export function registerHooks<TState>(
layer: {
object: Function;
container?: Container;
hooks: HookMetadataArgs<TState, any>[];
},
hooks: HookMetadataArgs<TState, any>[] = [],
type: BusinessType = BusinessType.Controller,
) {
// TODO optimization improve: set hook map as resolved to metadata, ex notResolvedHooks
for (const hook of hooks) {
// TODO need tests target or object ??
// if (layer.object === hook.target && hook.type === type) {
if (layer.object === hook.object && hook.type === type) {
layer.hooks.push(hook);
if (!hook.instance) {
hook.instance = layer.container!.create(hook.hookClass as any);
}
}
}
}