@bluelibs/runner 1.2.0 → 1.4.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 +310 -178
- package/dist/define.d.ts +2 -2
- package/dist/define.js +12 -9
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +45 -12
- package/dist/examples/express-mongo/index.d.ts +0 -0
- package/dist/examples/express-mongo/index.js +3 -0
- package/dist/examples/express-mongo/index.js.map +1 -0
- package/dist/globalEvents.d.ts +3 -1
- package/dist/globalEvents.js +1 -0
- package/dist/globalEvents.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/models/DependencyProcessor.d.ts +4 -2
- package/dist/models/DependencyProcessor.js +45 -20
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/EventManager.d.ts +2 -1
- package/dist/models/EventManager.js +47 -21
- package/dist/models/EventManager.js.map +1 -1
- package/dist/models/Logger.d.ts +15 -10
- package/dist/models/Logger.js +27 -15
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/ResourceInitializer.d.ts +4 -1
- package/dist/models/ResourceInitializer.js +39 -7
- package/dist/models/ResourceInitializer.js.map +1 -1
- package/dist/models/Store.d.ts +5 -1
- package/dist/models/Store.js +27 -3
- package/dist/models/Store.js.map +1 -1
- package/dist/models/TaskRunner.d.ts +3 -1
- package/dist/models/TaskRunner.js +13 -3
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/run.d.ts +0 -8
- package/dist/run.js +8 -6
- package/dist/run.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/index.ts +2 -0
- package/src/__tests__/models/EventManager.test.ts +338 -67
- package/src/__tests__/models/Logger.test.ts +44 -1
- package/src/__tests__/models/ResourceInitializer.test.ts +6 -4
- package/src/__tests__/models/Store.test.ts +4 -2
- package/src/__tests__/models/TaskRunner.test.ts +9 -4
- package/src/__tests__/run.middleware.test.ts +249 -0
- package/src/__tests__/run.test.ts +112 -131
- package/src/__tests__/typesafety.test.ts +127 -0
- package/src/define.ts +15 -11
- package/src/defs.ts +63 -21
- package/src/examples/express-mongo/index.ts +1 -0
- package/src/globalEvents.ts +5 -2
- package/src/models/DependencyProcessor.ts +77 -33
- package/src/models/EventManager.ts +55 -25
- package/src/models/Logger.ts +36 -16
- package/src/models/ResourceInitializer.ts +54 -8
- package/src/models/Store.ts +34 -3
- package/src/models/TaskRunner.ts +13 -3
- package/src/run.ts +16 -13
package/dist/define.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ITask, ITaskDefinition, IResource, IResourceWithConfig, IResourceDefinintion, IEventDefinition, IMiddlewareDefinition, DependencyMapType, IMiddleware } from "./defs";
|
|
2
|
-
export declare function defineTask<Input = undefined, Output extends Promise<any> = any, Deps extends DependencyMapType = any, Test = any>(
|
|
3
|
-
export declare function defineResource<TConfig = void, TValue = any, TDeps extends DependencyMapType = {}>(constConfig: IResourceDefinintion<TConfig, TValue, TDeps>): IResource<TConfig, TValue, TDeps>;
|
|
2
|
+
export declare function defineTask<Input = undefined, Output extends Promise<any> = any, Deps extends DependencyMapType = any, Test = any>(taskConfig: ITaskDefinition<Input, Output, Deps, Test>): ITask<Input, Output, Deps, Test>;
|
|
3
|
+
export declare function defineResource<TConfig = void, TValue = any, TDeps extends DependencyMapType = {}, THooks = any>(constConfig: IResourceDefinintion<TConfig, TValue, TDeps, THooks>): IResource<TConfig, TValue, TDeps>;
|
|
4
4
|
export declare function defineEvent<TPayload = any>(config: IEventDefinition<TPayload>): IEventDefinition<TPayload>;
|
|
5
5
|
export declare function defineMiddleware<TDeps extends DependencyMapType = {}>(config: IMiddlewareDefinition<TDeps>): IMiddleware<TDeps>;
|
|
6
6
|
export declare function isTask(definition: any): definition is ITask;
|
package/dist/define.js
CHANGED
|
@@ -11,25 +11,26 @@ exports.isEvent = isEvent;
|
|
|
11
11
|
exports.isMiddleware = isMiddleware;
|
|
12
12
|
const defs_1 = require("./defs");
|
|
13
13
|
const errors_1 = require("./errors");
|
|
14
|
-
function defineTask(
|
|
14
|
+
function defineTask(taskConfig) {
|
|
15
15
|
return {
|
|
16
16
|
[defs_1.symbols.task]: true,
|
|
17
|
-
id:
|
|
18
|
-
dependencies:
|
|
19
|
-
middleware:
|
|
20
|
-
run:
|
|
21
|
-
on:
|
|
17
|
+
id: taskConfig.id,
|
|
18
|
+
dependencies: taskConfig.dependencies || {},
|
|
19
|
+
middleware: taskConfig.middleware || [],
|
|
20
|
+
run: taskConfig.run,
|
|
21
|
+
on: taskConfig.on,
|
|
22
22
|
events: {
|
|
23
23
|
beforeRun: defineEvent({
|
|
24
|
-
id: `${
|
|
24
|
+
id: `${taskConfig.id}.beforeRun`,
|
|
25
25
|
}),
|
|
26
26
|
afterRun: defineEvent({
|
|
27
|
-
id: `${
|
|
27
|
+
id: `${taskConfig.id}.afterRun`,
|
|
28
28
|
}),
|
|
29
29
|
onError: defineEvent({
|
|
30
|
-
id: `${
|
|
30
|
+
id: `${taskConfig.id}.onError`,
|
|
31
31
|
}),
|
|
32
32
|
},
|
|
33
|
+
meta: taskConfig.meta || {},
|
|
33
34
|
// autorun,
|
|
34
35
|
};
|
|
35
36
|
}
|
|
@@ -61,6 +62,8 @@ function defineResource(constConfig) {
|
|
|
61
62
|
id: `${constConfig.id}.onError`,
|
|
62
63
|
}),
|
|
63
64
|
},
|
|
65
|
+
meta: constConfig.meta || {},
|
|
66
|
+
middleware: constConfig.middleware || [],
|
|
64
67
|
};
|
|
65
68
|
}
|
|
66
69
|
function defineEvent(config) {
|
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":";;AAiBA,
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
package/dist/defs.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare const symbols: {
|
|
|
9
9
|
export interface IMeta {
|
|
10
10
|
title?: string;
|
|
11
11
|
description?: string;
|
|
12
|
-
tags
|
|
12
|
+
tags?: string[];
|
|
13
13
|
}
|
|
14
14
|
export interface ITaskMeta extends IMeta {
|
|
15
15
|
}
|
|
@@ -20,18 +20,31 @@ export interface IEventMeta extends IMeta {
|
|
|
20
20
|
export interface IMiddlewareMeta extends IMeta {
|
|
21
21
|
}
|
|
22
22
|
export type DependencyMapType = Record<string, ITask | IResource | IEventDefinition | IResourceWithConfig<any, any>>;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
type ExtractTaskInput<T> = T extends ITask<infer I, any, infer D> ? I : never;
|
|
24
|
+
type ExtractTaskOutput<T> = T extends ITask<any, infer O, infer D> ? O : never;
|
|
25
|
+
type ExtractResourceValue<T> = T extends IResource<any, infer V, infer D> ? V : never;
|
|
26
|
+
type ExtractEventParams<T> = T extends IEventDefinition<infer P> ? P : never;
|
|
27
|
+
type TaskDependency<I, O> = (...args: I extends null | void ? [] : [I]) => O;
|
|
28
|
+
type ResourceDependency<V> = V;
|
|
29
|
+
type EventDependency<P> = (input: P) => Promise<void>;
|
|
30
|
+
export type DependencyValueType<T> = T extends ITask<any, any, any> ? TaskDependency<ExtractTaskInput<T>, ExtractTaskOutput<T>> : T extends IResource<any, any> ? ResourceDependency<ExtractResourceValue<T>> : T extends IEventDefinition<any> ? EventDependency<ExtractEventParams<T>> : never;
|
|
26
31
|
export type DependencyValuesType<T extends DependencyMapType> = {
|
|
27
32
|
[K in keyof T]: DependencyValueType<T[K]>;
|
|
28
33
|
};
|
|
29
|
-
export type RegisterableItems =
|
|
34
|
+
export type RegisterableItems = IResourceWithConfig<any> | IResource<any> | ITaskDefinition | IMiddlewareDefinition | IEventDefinition;
|
|
30
35
|
export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TEventDefinitionInput = null> {
|
|
31
36
|
id: string;
|
|
32
37
|
dependencies?: TDependencies | (() => TDependencies);
|
|
33
38
|
middleware?: IMiddlewareDefinition[];
|
|
39
|
+
/**
|
|
40
|
+
* Listen to events in a simple way
|
|
41
|
+
*/
|
|
34
42
|
on?: IEventDefinition<TEventDefinitionInput>;
|
|
43
|
+
/**
|
|
44
|
+
* This makes sense only when `on` is specified to provide the order of the execution.
|
|
45
|
+
* The event with the lowest order will be executed first.
|
|
46
|
+
*/
|
|
47
|
+
listenerOrder?: number;
|
|
35
48
|
meta?: ITaskMeta;
|
|
36
49
|
run: (input: TEventDefinitionInput extends null ? TInput : TEventDefinitionInput, dependencies: DependencyValuesType<TDependencies>) => TOutput;
|
|
37
50
|
}
|
|
@@ -44,6 +57,10 @@ export type AfterRunEventPayload<TInput, TOutput> = {
|
|
|
44
57
|
};
|
|
45
58
|
export type OnErrorEventPayload = {
|
|
46
59
|
error: any;
|
|
60
|
+
/**
|
|
61
|
+
* This function can be called to suppress the error from being thrown.
|
|
62
|
+
*/
|
|
63
|
+
suppress(): void;
|
|
47
64
|
};
|
|
48
65
|
export type BeforeInitEventPayload<TConfig> = {
|
|
49
66
|
config: TConfig;
|
|
@@ -68,10 +85,10 @@ export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDepend
|
|
|
68
85
|
onError: IEventDefinition<OnErrorEventPayload>;
|
|
69
86
|
};
|
|
70
87
|
}
|
|
71
|
-
export interface IResourceDefinintion<TConfig =
|
|
88
|
+
export interface IResourceDefinintion<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, THooks = any, TRegisterableItems = any> {
|
|
72
89
|
id: string;
|
|
73
90
|
dependencies?: TDependencies | ((config: TConfig) => TDependencies);
|
|
74
|
-
hooks?: IHookDefinition<TDependencies>[] | ((config: TConfig) => IHookDefinition<TDependencies>[]);
|
|
91
|
+
hooks?: IHookDefinition<TDependencies, THooks>[] | ((config: TConfig) => IHookDefinition<TDependencies, THooks>[]);
|
|
75
92
|
register?: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
|
|
76
93
|
init?: (config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
|
|
77
94
|
/**
|
|
@@ -85,6 +102,7 @@ export interface IResourceDefinintion<TConfig = void, TValue = unknown, TDepende
|
|
|
85
102
|
dispose?: (value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
|
|
86
103
|
meta?: IResourceMeta;
|
|
87
104
|
overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
105
|
+
middleware?: IMiddlewareDefinition[];
|
|
88
106
|
}
|
|
89
107
|
export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any> extends IResourceDefinintion<TConfig, TValue, TDependencies> {
|
|
90
108
|
with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies>;
|
|
@@ -99,6 +117,7 @@ export interface IResource<TConfig = void, TValue = any, TDependencies extends D
|
|
|
99
117
|
};
|
|
100
118
|
hooks: IHookDefinition<TDependencies>[] | ((config: TConfig) => IHookDefinition<TDependencies>[]);
|
|
101
119
|
overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
120
|
+
middleware: IMiddlewareDefinition[];
|
|
102
121
|
}
|
|
103
122
|
export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies extends DependencyMapType = any> {
|
|
104
123
|
resource: IResource<TConfig, TValue, TDependencies>;
|
|
@@ -107,6 +126,7 @@ export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies
|
|
|
107
126
|
export interface IEvent<TPayload = any> {
|
|
108
127
|
id: string;
|
|
109
128
|
data: TPayload;
|
|
129
|
+
timestamp: Date;
|
|
110
130
|
}
|
|
111
131
|
export type EventHandlerType<T = any> = (event: IEvent<T>) => any | Promise<any>;
|
|
112
132
|
export interface IEventDefinition<TPayload = void> {
|
|
@@ -129,10 +149,23 @@ export interface IMiddlewareDefinitionConfigured<C extends Record<string, any> =
|
|
|
129
149
|
}
|
|
130
150
|
export interface IMiddlewareExecutionInput {
|
|
131
151
|
taskDefinition?: ITask;
|
|
132
|
-
|
|
133
|
-
|
|
152
|
+
resourceDefinition?: IResource;
|
|
153
|
+
config?: any;
|
|
154
|
+
input?: any;
|
|
155
|
+
next: (taskInputOrResourceConfig?: any) => Promise<any>;
|
|
134
156
|
}
|
|
135
|
-
export interface IHookDefinition<D extends DependencyMapType = {}, T = any> {
|
|
136
|
-
event: IEventDefinition<T>;
|
|
137
|
-
|
|
157
|
+
export interface IHookDefinition<D extends DependencyMapType = {}, T = any, B extends boolean = false> {
|
|
158
|
+
event: "*" | IEventDefinition<T>;
|
|
159
|
+
/**
|
|
160
|
+
* The higher the number, the higher the priority.
|
|
161
|
+
* We recommend using numbers between -1000 and 1000.
|
|
162
|
+
*/
|
|
163
|
+
order?: number;
|
|
164
|
+
/**
|
|
165
|
+
* These are hooks that run before any resource instantiation.
|
|
166
|
+
* @param event
|
|
167
|
+
*/
|
|
168
|
+
early?: B;
|
|
169
|
+
run: (event: IEvent<T>, dependencies: T extends true ? void : DependencyValuesType<D>) => Promise<void> | void;
|
|
138
170
|
}
|
|
171
|
+
export {};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/examples/express-mongo/index.ts"],"names":[],"mappings":";AAAA,OAAO"}
|
package/dist/globalEvents.d.ts
CHANGED
|
@@ -15,7 +15,8 @@ export declare const globalEvents: {
|
|
|
15
15
|
output: any;
|
|
16
16
|
}>;
|
|
17
17
|
onError: import("./defs").IEventDefinition<{
|
|
18
|
-
error:
|
|
18
|
+
error: any;
|
|
19
|
+
suppress: () => void;
|
|
19
20
|
task: ITask<any, any, any>;
|
|
20
21
|
}>;
|
|
21
22
|
};
|
|
@@ -31,6 +32,7 @@ export declare const globalEvents: {
|
|
|
31
32
|
}>;
|
|
32
33
|
onError: import("./defs").IEventDefinition<{
|
|
33
34
|
error: Error;
|
|
35
|
+
suppress: () => void;
|
|
34
36
|
resource: IResource<any, any, any>;
|
|
35
37
|
}>;
|
|
36
38
|
};
|
package/dist/globalEvents.js
CHANGED
package/dist/globalEvents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalEvents.js","sourceRoot":"","sources":["../src/globalEvents.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAI1B,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE,IAAA,oBAAW,EAAC;QACtB,EAAE,EAAE,mBAAmB;KACxB,CAAC;IACF,SAAS,EAAE,IAAA,oBAAW,EAAC;QACrB,EAAE,EAAE,kBAAkB;KACvB,CAAC;IACF,GAAG,EAAE,IAAA,oBAAW,EAAO;QACrB,EAAE,EAAE,YAAY;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,IAAA,oBAAW,EAGnB;YACD,EAAE,EAAE,wBAAwB;SAC7B,CAAC;QACF,QAAQ,EAAE,IAAA,oBAAW,EAIlB;YACD,EAAE,EAAE,uBAAuB;SAC5B,CAAC;QACF,OAAO,EAAE,IAAA,oBAAW,
|
|
1
|
+
{"version":3,"file":"globalEvents.js","sourceRoot":"","sources":["../src/globalEvents.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAI1B,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE,IAAA,oBAAW,EAAC;QACtB,EAAE,EAAE,mBAAmB;KACxB,CAAC;IACF,SAAS,EAAE,IAAA,oBAAW,EAAC;QACrB,EAAE,EAAE,kBAAkB;KACvB,CAAC;IACF,GAAG,EAAE,IAAA,oBAAW,EAAO;QACrB,EAAE,EAAE,YAAY;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,IAAA,oBAAW,EAGnB;YACD,EAAE,EAAE,wBAAwB;SAC7B,CAAC;QACF,QAAQ,EAAE,IAAA,oBAAW,EAIlB;YACD,EAAE,EAAE,uBAAuB;SAC5B,CAAC;QACF,OAAO,EAAE,IAAA,oBAAW,EAIjB;YACD,EAAE,EAAE,sBAAsB;SAC3B,CAAC;KACH;IACD,SAAS,EAAE;QACT,UAAU,EAAE,IAAA,oBAAW,EAGpB;YACD,EAAE,EAAE,6BAA6B;SAClC,CAAC;QACF,SAAS,EAAE,IAAA,oBAAW,EAInB;YACD,EAAE,EAAE,4BAA4B;SACjC,CAAC;QACF,OAAO,EAAE,IAAA,oBAAW,EAIjB;YACD,EAAE,EAAE,0BAA0B;SAC/B,CAAC;KACH;CACF,CAAC;AAEW,QAAA,iBAAiB,GAAG;IAC/B,oBAAY,CAAC,GAAG;IAChB,oBAAY,CAAC,UAAU;IACvB,oBAAY,CAAC,SAAS;IACtB,oBAAY,CAAC,KAAK,CAAC,SAAS;IAC5B,oBAAY,CAAC,KAAK,CAAC,QAAQ;IAC3B,oBAAY,CAAC,KAAK,CAAC,OAAO;IAC1B,oBAAY,CAAC,SAAS,CAAC,UAAU;IACjC,oBAAY,CAAC,SAAS,CAAC,SAAS;IAChC,oBAAY,CAAC,SAAS,CAAC,OAAO;CAC/B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,8 @@ declare const globals: {
|
|
|
16
16
|
output: any;
|
|
17
17
|
}>;
|
|
18
18
|
onError: import("./defs").IEventDefinition<{
|
|
19
|
-
error:
|
|
19
|
+
error: any;
|
|
20
|
+
suppress: () => void;
|
|
20
21
|
task: import("./defs").ITask<any, any, any>;
|
|
21
22
|
}>;
|
|
22
23
|
};
|
|
@@ -32,6 +33,7 @@ declare const globals: {
|
|
|
32
33
|
}>;
|
|
33
34
|
onError: import("./defs").IEventDefinition<{
|
|
34
35
|
error: Error;
|
|
36
|
+
suppress: () => void;
|
|
35
37
|
resource: import("./defs").IResource<any, any, any>;
|
|
36
38
|
}>;
|
|
37
39
|
};
|
|
@@ -3,6 +3,7 @@ import { ResourceStoreElementType, Store } from "./Store";
|
|
|
3
3
|
import { EventManager } from "./EventManager";
|
|
4
4
|
import { ResourceInitializer } from "./ResourceInitializer";
|
|
5
5
|
import { TaskRunner } from "./TaskRunner";
|
|
6
|
+
import { Logger } from "./Logger";
|
|
6
7
|
/**
|
|
7
8
|
* This class is responsible of setting up dependencies with their respective computedValues.
|
|
8
9
|
* Note that all elements must have been previously registered otherwise errors will be thrown
|
|
@@ -12,12 +13,14 @@ export declare class DependencyProcessor {
|
|
|
12
13
|
protected readonly store: Store;
|
|
13
14
|
protected readonly eventManager: EventManager;
|
|
14
15
|
protected readonly taskRunner: TaskRunner;
|
|
16
|
+
protected readonly logger: Logger;
|
|
15
17
|
protected readonly resourceInitializer: ResourceInitializer;
|
|
16
|
-
constructor(store: Store, eventManager: EventManager, taskRunner: TaskRunner);
|
|
18
|
+
constructor(store: Store, eventManager: EventManager, taskRunner: TaskRunner, logger: Logger);
|
|
17
19
|
/**
|
|
18
20
|
* This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
|
|
19
21
|
*/
|
|
20
22
|
computeAllDependencies(): Promise<void>;
|
|
23
|
+
private computeTaskDependencies;
|
|
21
24
|
initializeUninitializedResources(): Promise<void>;
|
|
22
25
|
/**
|
|
23
26
|
* Processes dependencies and hooks
|
|
@@ -27,7 +30,6 @@ export declare class DependencyProcessor {
|
|
|
27
30
|
initializeRoot(): Promise<void>;
|
|
28
31
|
/**
|
|
29
32
|
* Processes all hooks, should run before emission of any event.
|
|
30
|
-
* @returns
|
|
31
33
|
*/
|
|
32
34
|
attachHooks(): void;
|
|
33
35
|
/**
|
|
@@ -13,12 +13,14 @@ class DependencyProcessor {
|
|
|
13
13
|
store;
|
|
14
14
|
eventManager;
|
|
15
15
|
taskRunner;
|
|
16
|
+
logger;
|
|
16
17
|
resourceInitializer;
|
|
17
|
-
constructor(store, eventManager, taskRunner) {
|
|
18
|
+
constructor(store, eventManager, taskRunner, logger) {
|
|
18
19
|
this.store = store;
|
|
19
20
|
this.eventManager = eventManager;
|
|
20
21
|
this.taskRunner = taskRunner;
|
|
21
|
-
this.
|
|
22
|
+
this.logger = logger;
|
|
23
|
+
this.resourceInitializer = new ResourceInitializer_1.ResourceInitializer(store, eventManager, logger);
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
24
26
|
* This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
|
|
@@ -29,21 +31,33 @@ class DependencyProcessor {
|
|
|
29
31
|
middleware.computedDependencies = await this.extractDependencies(deps);
|
|
30
32
|
}
|
|
31
33
|
for (const task of this.store.tasks.values()) {
|
|
32
|
-
|
|
33
|
-
task.computedDependencies = await this.extractDependencies(deps);
|
|
34
|
-
let eventDefinition = task.task.on;
|
|
35
|
-
if (eventDefinition) {
|
|
36
|
-
if (this.store.events.get(eventDefinition.id) === undefined) {
|
|
37
|
-
throw errors_1.Errors.eventNotFound(eventDefinition.id);
|
|
38
|
-
}
|
|
39
|
-
this.eventManager.addListener(eventDefinition, async (receivedEvent) => {
|
|
40
|
-
return this.taskRunner.run(task.task, receivedEvent, task.computedDependencies);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
34
|
+
await this.computeTaskDependencies(task);
|
|
43
35
|
}
|
|
44
36
|
for (const resource of this.store.resources.values()) {
|
|
45
37
|
await this.processResourceDependencies(resource);
|
|
46
38
|
}
|
|
39
|
+
// leftovers that were registered but not depended upon, except root
|
|
40
|
+
// they should still be initialized as they might extend other
|
|
41
|
+
await this.initializeUninitializedResources();
|
|
42
|
+
}
|
|
43
|
+
async computeTaskDependencies(task) {
|
|
44
|
+
const deps = task.task.dependencies;
|
|
45
|
+
task.computedDependencies = await this.extractDependencies(deps);
|
|
46
|
+
let eventDefinition = task.task.on;
|
|
47
|
+
if (eventDefinition) {
|
|
48
|
+
if (this.store.events.get(eventDefinition.id) === undefined) {
|
|
49
|
+
throw errors_1.Errors.eventNotFound(eventDefinition.id);
|
|
50
|
+
}
|
|
51
|
+
this.eventManager.addListener(eventDefinition, async (receivedEvent) => {
|
|
52
|
+
this.logger.debug({
|
|
53
|
+
message: `Task ${task.task.id} listened to event: ${eventDefinition.id}`,
|
|
54
|
+
event: receivedEvent,
|
|
55
|
+
});
|
|
56
|
+
return this.taskRunner.run(task.task, receivedEvent, task.computedDependencies);
|
|
57
|
+
}, {
|
|
58
|
+
order: task.task.listenerOrder || 0,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
47
61
|
}
|
|
48
62
|
// Most likely these are resources that no-one has dependencies towards
|
|
49
63
|
// We need to ensure they work too!
|
|
@@ -74,10 +88,8 @@ class DependencyProcessor {
|
|
|
74
88
|
}
|
|
75
89
|
/**
|
|
76
90
|
* Processes all hooks, should run before emission of any event.
|
|
77
|
-
* @returns
|
|
78
91
|
*/
|
|
79
92
|
attachHooks() {
|
|
80
|
-
// iterate through resources and send them to processHooks
|
|
81
93
|
for (const resource of this.store.resources.values()) {
|
|
82
94
|
if (resource.resource.hooks) {
|
|
83
95
|
this.attachHooksToResource(resource);
|
|
@@ -99,12 +111,24 @@ class DependencyProcessor {
|
|
|
99
111
|
}
|
|
100
112
|
for (const hook of hooks) {
|
|
101
113
|
const event = hook.event;
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
const order = hook.order || 0;
|
|
115
|
+
if (event === "*") {
|
|
116
|
+
this.eventManager.addGlobalListener(async (receivedEvent) => {
|
|
117
|
+
return hook.run(receivedEvent, resourceStoreElement.computedDependencies);
|
|
118
|
+
}, {
|
|
119
|
+
order,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
if (this.store.events.has(event.id) === false) {
|
|
124
|
+
throw errors_1.Errors.eventNotFound(event.id);
|
|
125
|
+
}
|
|
126
|
+
this.eventManager.addListener(event, async (receivedEvent) => {
|
|
127
|
+
return hook.run(receivedEvent, resourceStoreElement.computedDependencies);
|
|
128
|
+
}, {
|
|
129
|
+
order,
|
|
130
|
+
});
|
|
104
131
|
}
|
|
105
|
-
this.eventManager.addListener(event, async (receivedEvent) => {
|
|
106
|
-
return hook.run(receivedEvent, resourceStoreElement.computedDependencies);
|
|
107
|
-
});
|
|
108
132
|
}
|
|
109
133
|
}
|
|
110
134
|
async extractDependencies(map) {
|
|
@@ -135,6 +159,7 @@ class DependencyProcessor {
|
|
|
135
159
|
*/
|
|
136
160
|
extractEventDependency(object) {
|
|
137
161
|
return async (input) => {
|
|
162
|
+
this.logger.debug(`Emitting event ${object.id}`);
|
|
138
163
|
return this.eventManager.emit(object, input);
|
|
139
164
|
};
|
|
140
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":";;;AASA,mCAAmC;AAEnC,+DAA4D;AAE5D,sCAAmC;
|
|
1
|
+
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,9 @@ export declare class EventManager {
|
|
|
10
10
|
get isLocked(): boolean;
|
|
11
11
|
lock(): void;
|
|
12
12
|
checkLock(): void;
|
|
13
|
+
private mergeSortedListeners;
|
|
13
14
|
emit<TInput>(eventDefinition: IEventDefinition<TInput>, ...args: TInput extends void ? [] : [TInput]): Promise<void>;
|
|
15
|
+
private insertListener;
|
|
14
16
|
addListener<T>(event: IEventDefinition | Array<IEventDefinition>, handler: EventHandlerType<T>, options?: IEventHandlerOptions<T>): void;
|
|
15
17
|
addGlobalListener(handler: EventHandlerType, options?: IEventHandlerOptions): void;
|
|
16
|
-
private sortListeners;
|
|
17
18
|
}
|
|
@@ -18,39 +18,71 @@ class EventManager {
|
|
|
18
18
|
throw errors_1.Errors.locked("EventManager");
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
mergeSortedListeners(a, b) {
|
|
22
|
+
const result = [];
|
|
23
|
+
let i = 0, j = 0;
|
|
24
|
+
while (i < a.length && j < b.length) {
|
|
25
|
+
if (a[i].order <= b[j].order) {
|
|
26
|
+
result.push(a[i++]);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
result.push(b[j++]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
while (i < a.length)
|
|
33
|
+
result.push(a[i++]);
|
|
34
|
+
while (j < b.length)
|
|
35
|
+
result.push(b[j++]);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
21
38
|
async emit(eventDefinition, ...args) {
|
|
22
39
|
const data = args[0];
|
|
23
40
|
const eventListeners = this.listeners.get(eventDefinition.id) || [];
|
|
24
|
-
const allListeners = this.
|
|
25
|
-
...eventListeners,
|
|
26
|
-
...this.globalListeners,
|
|
27
|
-
]);
|
|
41
|
+
const allListeners = this.mergeSortedListeners(eventListeners, this.globalListeners);
|
|
28
42
|
const event = {
|
|
29
43
|
id: eventDefinition.id,
|
|
30
44
|
data,
|
|
45
|
+
timestamp: new Date(),
|
|
31
46
|
};
|
|
32
47
|
for (const listener of allListeners) {
|
|
33
|
-
|
|
34
|
-
if (ok) {
|
|
48
|
+
if (!listener.filter || listener.filter(event)) {
|
|
35
49
|
await listener.handler(event);
|
|
36
50
|
}
|
|
37
51
|
}
|
|
38
52
|
}
|
|
53
|
+
insertListener(listeners, newListener) {
|
|
54
|
+
let low = 0;
|
|
55
|
+
let high = listeners.length;
|
|
56
|
+
while (low < high) {
|
|
57
|
+
const mid = (low + high) >>> 1;
|
|
58
|
+
if (listeners[mid].order < newListener.order) {
|
|
59
|
+
low = mid + 1;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
high = mid;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
listeners.splice(low, 0, newListener);
|
|
66
|
+
}
|
|
39
67
|
addListener(event, handler, options = HandlerOptionsDefaults) {
|
|
40
68
|
this.checkLock();
|
|
69
|
+
const newListener = {
|
|
70
|
+
handler,
|
|
71
|
+
order: options.order || 0,
|
|
72
|
+
filter: options.filter,
|
|
73
|
+
};
|
|
41
74
|
if (Array.isArray(event)) {
|
|
42
75
|
event.forEach((id) => this.addListener(id, handler, options));
|
|
43
76
|
}
|
|
44
77
|
else {
|
|
45
78
|
const eventId = event.id;
|
|
46
|
-
const listeners = this.listeners.get(eventId)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.listeners.set(eventId, newListeners);
|
|
79
|
+
const listeners = this.listeners.get(eventId);
|
|
80
|
+
if (listeners) {
|
|
81
|
+
this.insertListener(listeners, newListener);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.listeners.set(eventId, [newListener]);
|
|
85
|
+
}
|
|
54
86
|
}
|
|
55
87
|
}
|
|
56
88
|
addGlobalListener(handler, options = HandlerOptionsDefaults) {
|
|
@@ -60,13 +92,7 @@ class EventManager {
|
|
|
60
92
|
order: options.order || 0,
|
|
61
93
|
filter: options.filter,
|
|
62
94
|
};
|
|
63
|
-
this.globalListeners
|
|
64
|
-
...this.globalListeners,
|
|
65
|
-
newListener,
|
|
66
|
-
]);
|
|
67
|
-
}
|
|
68
|
-
sortListeners(listeners) {
|
|
69
|
-
return [...listeners].sort((a, b) => a.order - b.order);
|
|
95
|
+
this.insertListener(this.globalListeners, newListener);
|
|
70
96
|
}
|
|
71
97
|
}
|
|
72
98
|
exports.EventManager = EventManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../../src/models/EventManager.ts"],"names":[],"mappings":";;;AACA,sCAAmC;
|
|
1
|
+
{"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../../src/models/EventManager.ts"],"names":[],"mappings":"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"}
|
package/dist/models/Logger.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export interface ILog {
|
|
|
7
7
|
timestamp: Date;
|
|
8
8
|
}
|
|
9
9
|
export declare class Logger {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
protected eventManager: EventManager;
|
|
11
|
+
printThreshold: LogLevels | null;
|
|
12
12
|
severity: {
|
|
13
13
|
trace: number;
|
|
14
14
|
debug: number;
|
|
@@ -22,12 +22,17 @@ export declare class Logger {
|
|
|
22
22
|
* @param level
|
|
23
23
|
* @param message
|
|
24
24
|
*/
|
|
25
|
-
log(level: LogLevels, data: any): Promise<void>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
log(level: LogLevels, data: any, source?: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Will print logs after that, use `null` to disable autoprinting.
|
|
28
|
+
* @param level
|
|
29
|
+
*/
|
|
30
|
+
setPrintThreshold(level: LogLevels | null): void;
|
|
31
|
+
print(log: ILog): void;
|
|
32
|
+
info(data: any, context?: string): Promise<void>;
|
|
33
|
+
error(data: any, context?: string): Promise<void>;
|
|
34
|
+
warn(data: any, context?: string): Promise<void>;
|
|
35
|
+
debug(data: any, context?: string): Promise<void>;
|
|
36
|
+
trace(data: any, context?: string): Promise<void>;
|
|
37
|
+
critical(data: any, context?: string): Promise<void>;
|
|
33
38
|
}
|