@bluelibs/runner 1.1.0 → 1.2.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 +191 -13
- package/dist/DependencyProcessor.d.ts +2 -2
- package/dist/DependencyProcessor.js +3 -3
- package/dist/DependencyProcessor.js.map +1 -1
- package/dist/Store.d.ts +24 -1
- package/dist/Store.js +108 -34
- package/dist/Store.js.map +1 -1
- package/dist/TaskRunner.d.ts +3 -0
- package/dist/TaskRunner.js +3 -0
- package/dist/TaskRunner.js.map +1 -1
- package/dist/define.js +1 -0
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +6 -4
- package/dist/globalEvents.d.ts +2 -0
- package/dist/globalEvents.js +3 -0
- package/dist/globalEvents.js.map +1 -1
- package/dist/globalResources.d.ts +5 -3
- package/dist/globalResources.js +4 -0
- package/dist/globalResources.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.d.ts +49 -0
- package/dist/models/DependencyProcessor.js +178 -0
- package/dist/models/DependencyProcessor.js.map +1 -0
- package/dist/models/EventManager.d.ts +17 -0
- package/dist/models/EventManager.js +73 -0
- package/dist/models/EventManager.js.map +1 -0
- package/dist/models/Logger.d.ts +33 -0
- package/dist/models/Logger.js +76 -0
- package/dist/models/Logger.js.map +1 -0
- package/dist/models/ResourceInitializer.d.ts +13 -0
- package/dist/models/ResourceInitializer.js +54 -0
- package/dist/models/ResourceInitializer.js.map +1 -0
- package/dist/models/Store.d.ts +90 -0
- package/dist/models/Store.js +302 -0
- package/dist/models/Store.js.map +1 -0
- package/dist/models/TaskRunner.d.ts +25 -0
- package/dist/models/TaskRunner.js +96 -0
- package/dist/models/TaskRunner.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.js +22 -0
- package/dist/models/index.js.map +1 -0
- package/dist/run.d.ts +3 -3
- package/dist/run.js +12 -6
- package/dist/run.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/index.ts +8 -4
- package/src/__tests__/{EventManager.test.ts → models/EventManager.test.ts} +3 -3
- package/src/__tests__/models/Logger.test.ts +140 -0
- package/src/__tests__/{ResourceInitializer.test.ts → models/ResourceInitializer.test.ts} +4 -4
- package/src/__tests__/{Store.test.ts → models/Store.test.ts} +4 -4
- package/src/__tests__/{TaskRunner.test.ts → models/TaskRunner.test.ts} +5 -5
- package/src/__tests__/run.overrides.test.ts +392 -0
- package/src/define.ts +3 -0
- package/src/defs.ts +7 -4
- package/src/globalEvents.ts +4 -0
- package/src/globalResources.ts +8 -3
- package/src/index.ts +3 -3
- package/src/{DependencyProcessor.ts → models/DependencyProcessor.ts} +6 -6
- package/src/{EventManager.ts → models/EventManager.ts} +2 -2
- package/src/models/Logger.ts +100 -0
- package/src/{ResourceInitializer.ts → models/ResourceInitializer.ts} +2 -2
- package/src/{Store.ts → models/Store.ts} +145 -47
- package/src/{TaskRunner.ts → models/TaskRunner.ts} +6 -3
- package/src/models/index.ts +5 -0
- package/src/run.ts +13 -7
package/dist/TaskRunner.js
CHANGED
|
@@ -13,6 +13,9 @@ class TaskRunner {
|
|
|
13
13
|
/**
|
|
14
14
|
* Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
|
|
15
15
|
* This function can throw only if any of the event listeners or run function throws
|
|
16
|
+
* @param task the task to be run
|
|
17
|
+
* @param input the input to be passed to the task
|
|
18
|
+
* @param taskDependencies optional dependencies to be passed to the task, if not provided, the dependencies will be the ones already computed from the store.
|
|
16
19
|
*/
|
|
17
20
|
async run(task, input, taskDependencies) {
|
|
18
21
|
let runner = this.runnerStore.get(task.id);
|
package/dist/TaskRunner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../src/TaskRunner.ts"],"names":[],"mappings":";;;AAGA,iDAA8C;AAO9C,MAAa,UAAU;IAOA;IACA;IAPF,WAAW,GAAG,IAAI,GAAG,EAGrC,CAAC;IAEJ,YACqB,KAAY,EACZ,YAA0B;QAD1B,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAc;IAC5C,CAAC;IAEJ
|
|
1
|
+
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../src/TaskRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/define.js
CHANGED
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
package/dist/defs.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface IEventMeta extends IMeta {
|
|
|
19
19
|
}
|
|
20
20
|
export interface IMiddlewareMeta extends IMeta {
|
|
21
21
|
}
|
|
22
|
-
export type DependencyMapType = Record<string, ITask | IResource | IEventDefinition
|
|
22
|
+
export type DependencyMapType = Record<string, ITask | IResource | IEventDefinition | IResourceWithConfig<any, any>>;
|
|
23
23
|
export type DependencyValueType<T> = T extends ITask<infer I, infer O,
|
|
24
24
|
/** The infer D, while not used is crucial for making this work correctly, otherwise it forces input: unknown to a dependency that has a dependency. */
|
|
25
25
|
infer D> ? (...args: I extends unknown ? [] : [I]) => O : T extends IResource<any, infer V> ? V : T extends IEventDefinition<infer P> ? (input: P) => Promise<void> | never : never;
|
|
@@ -84,6 +84,7 @@ export interface IResourceDefinintion<TConfig = void, TValue = unknown, TDepende
|
|
|
84
84
|
*/
|
|
85
85
|
dispose?: (value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
|
|
86
86
|
meta?: IResourceMeta;
|
|
87
|
+
overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
87
88
|
}
|
|
88
89
|
export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any> extends IResourceDefinintion<TConfig, TValue, TDependencies> {
|
|
89
90
|
with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies>;
|
|
@@ -97,6 +98,7 @@ export interface IResource<TConfig = void, TValue = any, TDependencies extends D
|
|
|
97
98
|
onError: IEventDefinition<OnErrorEventPayload>;
|
|
98
99
|
};
|
|
99
100
|
hooks: IHookDefinition<TDependencies>[] | ((config: TConfig) => IHookDefinition<TDependencies>[]);
|
|
101
|
+
overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
100
102
|
}
|
|
101
103
|
export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies extends DependencyMapType = any> {
|
|
102
104
|
resource: IResource<TConfig, TValue, TDependencies>;
|
|
@@ -130,7 +132,7 @@ export interface IMiddlewareExecutionInput {
|
|
|
130
132
|
input: any;
|
|
131
133
|
next: (input?: any) => Promise<any>;
|
|
132
134
|
}
|
|
133
|
-
export interface IHookDefinition<D extends DependencyMapType = {}> {
|
|
134
|
-
event: IEventDefinition
|
|
135
|
-
run: (event: IEvent
|
|
135
|
+
export interface IHookDefinition<D extends DependencyMapType = {}, T = any> {
|
|
136
|
+
event: IEventDefinition<T>;
|
|
137
|
+
run: (event: IEvent<T>, dependencies: DependencyValuesType<D>) => Promise<void> | void;
|
|
136
138
|
}
|
package/dist/globalEvents.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ITask, IResource } from "./defs";
|
|
2
|
+
import { ILog } from "./models/Logger";
|
|
2
3
|
export declare const globalEvents: {
|
|
3
4
|
beforeInit: import("./defs").IEventDefinition<any>;
|
|
4
5
|
afterInit: import("./defs").IEventDefinition<any>;
|
|
6
|
+
log: import("./defs").IEventDefinition<ILog>;
|
|
5
7
|
tasks: {
|
|
6
8
|
beforeRun: import("./defs").IEventDefinition<{
|
|
7
9
|
task: ITask<any, any, any>;
|
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;
|
|
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,EAGjB;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,EAGjB;YACD,EAAE,EAAE,0BAA0B;SAC/B,CAAC;KACH;CACF,CAAC;AAEW,QAAA,iBAAiB,GAAG;IAC/B,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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { EventManager } from "./EventManager";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { EventManager } from "./models/EventManager";
|
|
2
|
+
import { Logger } from "./models/Logger";
|
|
3
|
+
import { Store } from "./models/Store";
|
|
4
|
+
import { TaskRunner } from "./models/TaskRunner";
|
|
4
5
|
export declare const globalResources: {
|
|
5
6
|
store: import("./defs").IResource<Store, Store, {}>;
|
|
6
7
|
eventManager: import("./defs").IResource<EventManager, EventManager, {}>;
|
|
7
8
|
taskRunner: import("./defs").IResource<TaskRunner, TaskRunner, {}>;
|
|
9
|
+
logger: import("./defs").IResource<Logger, Logger, {}>;
|
|
8
10
|
};
|
package/dist/globalResources.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalResources.js","sourceRoot":"","sources":["../src/globalResources.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;
|
|
1
|
+
{"version":3,"file":"globalResources.js","sourceRoot":"","sources":["../src/globalResources.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAM1C,MAAM,KAAK,GAAG,IAAA,uBAAc,EAAC;IAC3B,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,KAAK,EAAE,KAAY,EAAE,EAAE,CAAC,KAAK;CACpC,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG;IAC7B,KAAK;IACL,YAAY,EAAE,IAAA,uBAAc,EAAC;QAC3B,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,KAAK,EAAE,EAAgB,EAAE,EAAE,CAAC,EAAE;KACrC,CAAC;IACF,UAAU,EAAE,IAAA,uBAAc,EAAC;QACzB,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,KAAK,EAAE,MAAkB,EAAE,EAAE,CAAC,MAAM;KAC3C,CAAC;IACF,MAAM,EAAE,IAAA,uBAAc,EAAC;QACrB,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM;KACvC,CAAC;CACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ declare const globals: {
|
|
|
4
4
|
events: {
|
|
5
5
|
beforeInit: import("./defs").IEventDefinition<any>;
|
|
6
6
|
afterInit: import("./defs").IEventDefinition<any>;
|
|
7
|
+
log: import("./defs").IEventDefinition<import("./models").ILog>;
|
|
7
8
|
tasks: {
|
|
8
9
|
beforeRun: import("./defs").IEventDefinition<{
|
|
9
10
|
task: import("./defs").ITask<any, any, any>;
|
|
@@ -36,14 +37,15 @@ declare const globals: {
|
|
|
36
37
|
};
|
|
37
38
|
};
|
|
38
39
|
resources: {
|
|
39
|
-
store: import("./defs").IResource<import("./Store").Store, import("./Store").Store, {}>;
|
|
40
|
-
eventManager: import("./defs").IResource<import("./EventManager").EventManager, import("./EventManager").EventManager, {}>;
|
|
41
|
-
taskRunner: import("./defs").IResource<import("./TaskRunner").TaskRunner, import("./TaskRunner").TaskRunner, {}>;
|
|
40
|
+
store: import("./defs").IResource<import("./models/Store").Store, import("./models/Store").Store, {}>;
|
|
41
|
+
eventManager: import("./defs").IResource<import("./models/EventManager").EventManager, import("./models/EventManager").EventManager, {}>;
|
|
42
|
+
taskRunner: import("./defs").IResource<import("./models/TaskRunner").TaskRunner, import("./models/TaskRunner").TaskRunner, {}>;
|
|
43
|
+
logger: import("./defs").IResource<import("./models").Logger, import("./models").Logger, {}>;
|
|
42
44
|
};
|
|
43
45
|
};
|
|
44
46
|
export { globals };
|
|
45
47
|
export { defineTask as task, defineResource as resource, defineEvent as event, defineMiddleware as middleware, run, };
|
|
46
48
|
export * as definitions from "./defs";
|
|
47
|
-
export { Store } from "./Store";
|
|
48
|
-
export { EventManager } from "./EventManager";
|
|
49
|
-
export { TaskRunner } from "./TaskRunner";
|
|
49
|
+
export { Store } from "./models/Store";
|
|
50
|
+
export { EventManager } from "./models/EventManager";
|
|
51
|
+
export { TaskRunner } from "./models/TaskRunner";
|
package/dist/index.js
CHANGED
|
@@ -16,10 +16,10 @@ const globals = {
|
|
|
16
16
|
};
|
|
17
17
|
exports.globals = globals;
|
|
18
18
|
exports.definitions = require("./defs");
|
|
19
|
-
var Store_1 = require("./Store");
|
|
19
|
+
var Store_1 = require("./models/Store");
|
|
20
20
|
Object.defineProperty(exports, "Store", { enumerable: true, get: function () { return Store_1.Store; } });
|
|
21
|
-
var EventManager_1 = require("./EventManager");
|
|
21
|
+
var EventManager_1 = require("./models/EventManager");
|
|
22
22
|
Object.defineProperty(exports, "EventManager", { enumerable: true, get: function () { return EventManager_1.EventManager; } });
|
|
23
|
-
var TaskRunner_1 = require("./TaskRunner");
|
|
23
|
+
var TaskRunner_1 = require("./models/TaskRunner");
|
|
24
24
|
Object.defineProperty(exports, "TaskRunner", { enumerable: true, get: function () { return TaskRunner_1.TaskRunner; } });
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAKkB;AAYF,qFAhBd,mBAAU,OAgBQ;AACA,yFAhBlB,uBAAc,OAgBY;AACX,sFAhBf,oBAAW,OAgBS;AACA,2FAhBpB,yBAAgB,OAgBc;AAdhC,iDAA8C;AAC9C,uDAAoD;AACpD,+BAA4B;AAa1B,oFAbO,SAAG,OAaP;AAXL,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,2BAAY;IACpB,SAAS,EAAE,iCAAe;CAC3B,CAAC;AAEO,0BAAO;AAShB,wCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAKkB;AAYF,qFAhBd,mBAAU,OAgBQ;AACA,yFAhBlB,uBAAc,OAgBY;AACX,sFAhBf,oBAAW,OAgBS;AACA,2FAhBpB,yBAAgB,OAgBc;AAdhC,iDAA8C;AAC9C,uDAAoD;AACpD,+BAA4B;AAa1B,oFAbO,SAAG,OAaP;AAXL,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,2BAAY;IACpB,SAAS,EAAE,iCAAe;CAC3B,CAAC;AAEO,0BAAO;AAShB,wCAAsC;AACtC,wCAAuC;AAA9B,8FAAA,KAAK,OAAA;AACd,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AACrB,kDAAiD;AAAxC,wGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DependencyMapType, DependencyValuesType, ITask, IResource, IEventDefinition } from "../defs";
|
|
2
|
+
import { ResourceStoreElementType, Store } from "./Store";
|
|
3
|
+
import { EventManager } from "./EventManager";
|
|
4
|
+
import { ResourceInitializer } from "./ResourceInitializer";
|
|
5
|
+
import { TaskRunner } from "./TaskRunner";
|
|
6
|
+
/**
|
|
7
|
+
* This class is responsible of setting up dependencies with their respective computedValues.
|
|
8
|
+
* Note that all elements must have been previously registered otherwise errors will be thrown
|
|
9
|
+
* when trying to depend on something not in the store.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DependencyProcessor {
|
|
12
|
+
protected readonly store: Store;
|
|
13
|
+
protected readonly eventManager: EventManager;
|
|
14
|
+
protected readonly taskRunner: TaskRunner;
|
|
15
|
+
protected readonly resourceInitializer: ResourceInitializer;
|
|
16
|
+
constructor(store: Store, eventManager: EventManager, taskRunner: TaskRunner);
|
|
17
|
+
/**
|
|
18
|
+
* This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
|
|
19
|
+
*/
|
|
20
|
+
computeAllDependencies(): Promise<void>;
|
|
21
|
+
initializeUninitializedResources(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Processes dependencies and hooks
|
|
24
|
+
* @param resource
|
|
25
|
+
*/
|
|
26
|
+
protected processResourceDependencies(resource: ResourceStoreElementType<any, any, {}>): Promise<void>;
|
|
27
|
+
initializeRoot(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Processes all hooks, should run before emission of any event.
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
attachHooks(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Processes the hooks for resources
|
|
35
|
+
* @param hooks
|
|
36
|
+
* @param deps
|
|
37
|
+
*/
|
|
38
|
+
attachHooksToResource(resourceStoreElement: ResourceStoreElementType<any, any, {}>): void;
|
|
39
|
+
extractDependencies<T extends DependencyMapType>(map: T): Promise<DependencyValuesType<T>>;
|
|
40
|
+
extractDependency(object: any): Promise<any>;
|
|
41
|
+
/**
|
|
42
|
+
* Converts the event into a running functions with real inputs
|
|
43
|
+
* @param object
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
extractEventDependency(object: IEventDefinition<Record<string, any>>): (input: any) => Promise<void>;
|
|
47
|
+
extractTaskDependency(object: ITask<any, any, {}>): Promise<(input: any) => Promise<any>>;
|
|
48
|
+
extractResourceDependency(object: IResource<any, any, any>): Promise<any>;
|
|
49
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyProcessor = void 0;
|
|
4
|
+
const utils = require("../define");
|
|
5
|
+
const ResourceInitializer_1 = require("./ResourceInitializer");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
/**
|
|
8
|
+
* This class is responsible of setting up dependencies with their respective computedValues.
|
|
9
|
+
* Note that all elements must have been previously registered otherwise errors will be thrown
|
|
10
|
+
* when trying to depend on something not in the store.
|
|
11
|
+
*/
|
|
12
|
+
class DependencyProcessor {
|
|
13
|
+
store;
|
|
14
|
+
eventManager;
|
|
15
|
+
taskRunner;
|
|
16
|
+
resourceInitializer;
|
|
17
|
+
constructor(store, eventManager, taskRunner) {
|
|
18
|
+
this.store = store;
|
|
19
|
+
this.eventManager = eventManager;
|
|
20
|
+
this.taskRunner = taskRunner;
|
|
21
|
+
this.resourceInitializer = new ResourceInitializer_1.ResourceInitializer(store, eventManager);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
|
|
25
|
+
*/
|
|
26
|
+
async computeAllDependencies() {
|
|
27
|
+
for (const middleware of this.store.middlewares.values()) {
|
|
28
|
+
const deps = middleware.middleware.dependencies;
|
|
29
|
+
middleware.computedDependencies = await this.extractDependencies(deps);
|
|
30
|
+
}
|
|
31
|
+
for (const task of this.store.tasks.values()) {
|
|
32
|
+
const deps = task.task.dependencies;
|
|
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
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const resource of this.store.resources.values()) {
|
|
45
|
+
await this.processResourceDependencies(resource);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Most likely these are resources that no-one has dependencies towards
|
|
49
|
+
// We need to ensure they work too!
|
|
50
|
+
async initializeUninitializedResources() {
|
|
51
|
+
for (const resource of this.store.resources.values()) {
|
|
52
|
+
if (resource.isInitialized === false &&
|
|
53
|
+
// The root is the last one to be initialized and is done in a separate process.
|
|
54
|
+
resource.resource.id !== this.store.root.resource.id) {
|
|
55
|
+
await this.processResourceDependencies(resource);
|
|
56
|
+
resource.value = await this.resourceInitializer.initializeResource(resource.resource, resource.config, resource.computedDependencies);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Processes dependencies and hooks
|
|
62
|
+
* @param resource
|
|
63
|
+
*/
|
|
64
|
+
async processResourceDependencies(resource) {
|
|
65
|
+
const deps = resource.resource.dependencies;
|
|
66
|
+
resource.computedDependencies = await this.extractDependencies(deps);
|
|
67
|
+
}
|
|
68
|
+
async initializeRoot() {
|
|
69
|
+
const storeResource = this.store.root;
|
|
70
|
+
storeResource.value = await this.resourceInitializer.initializeResource(storeResource.resource, storeResource.config,
|
|
71
|
+
// They are already computed
|
|
72
|
+
storeResource.computedDependencies);
|
|
73
|
+
storeResource.isInitialized = true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Processes all hooks, should run before emission of any event.
|
|
77
|
+
* @returns
|
|
78
|
+
*/
|
|
79
|
+
attachHooks() {
|
|
80
|
+
// iterate through resources and send them to processHooks
|
|
81
|
+
for (const resource of this.store.resources.values()) {
|
|
82
|
+
if (resource.resource.hooks) {
|
|
83
|
+
this.attachHooksToResource(resource);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Processes the hooks for resources
|
|
89
|
+
* @param hooks
|
|
90
|
+
* @param deps
|
|
91
|
+
*/
|
|
92
|
+
attachHooksToResource(resourceStoreElement) {
|
|
93
|
+
let hooks = resourceStoreElement.resource.hooks;
|
|
94
|
+
if (typeof hooks === "function") {
|
|
95
|
+
hooks = hooks(resourceStoreElement.config);
|
|
96
|
+
}
|
|
97
|
+
if (hooks.length === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
for (const hook of hooks) {
|
|
101
|
+
const event = hook.event;
|
|
102
|
+
if (this.store.events.has(event.id) === false) {
|
|
103
|
+
throw errors_1.Errors.eventNotFound(event.id);
|
|
104
|
+
}
|
|
105
|
+
this.eventManager.addListener(event, async (receivedEvent) => {
|
|
106
|
+
return hook.run(receivedEvent, resourceStoreElement.computedDependencies);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async extractDependencies(map) {
|
|
111
|
+
const object = {};
|
|
112
|
+
for (const key in map) {
|
|
113
|
+
object[key] = await this.extractDependency(map[key]);
|
|
114
|
+
}
|
|
115
|
+
return object;
|
|
116
|
+
}
|
|
117
|
+
async extractDependency(object) {
|
|
118
|
+
if (utils.isResource(object)) {
|
|
119
|
+
return this.extractResourceDependency(object);
|
|
120
|
+
}
|
|
121
|
+
else if (utils.isTask(object)) {
|
|
122
|
+
return this.extractTaskDependency(object);
|
|
123
|
+
}
|
|
124
|
+
else if (utils.isEvent(object)) {
|
|
125
|
+
return this.extractEventDependency(object);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw errors_1.Errors.unknownItemType(object);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Converts the event into a running functions with real inputs
|
|
133
|
+
* @param object
|
|
134
|
+
* @returns
|
|
135
|
+
*/
|
|
136
|
+
extractEventDependency(object) {
|
|
137
|
+
return async (input) => {
|
|
138
|
+
return this.eventManager.emit(object, input);
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async extractTaskDependency(object) {
|
|
142
|
+
const storeTask = this.store.tasks.get(object.id);
|
|
143
|
+
if (storeTask === undefined) {
|
|
144
|
+
throw errors_1.Errors.dependencyNotFound(`Task ${object.id}`);
|
|
145
|
+
}
|
|
146
|
+
if (!storeTask.isInitialized) {
|
|
147
|
+
storeTask.isInitialized = true;
|
|
148
|
+
// it's sanitised
|
|
149
|
+
const dependencies = object.dependencies;
|
|
150
|
+
storeTask.computedDependencies = await this.extractDependencies(dependencies);
|
|
151
|
+
}
|
|
152
|
+
return (input) => {
|
|
153
|
+
return this.taskRunner.run(storeTask.task, input, storeTask.computedDependencies);
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
async extractResourceDependency(object) {
|
|
157
|
+
// check if it exists in the store with the value
|
|
158
|
+
const storeResource = this.store.resources.get(object.id);
|
|
159
|
+
if (storeResource === undefined) {
|
|
160
|
+
throw errors_1.Errors.dependencyNotFound(`Resource ${object.id}`);
|
|
161
|
+
}
|
|
162
|
+
const { resource, config } = storeResource;
|
|
163
|
+
if (storeResource.isInitialized) {
|
|
164
|
+
return storeResource.value;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// we need to initialize the resource
|
|
168
|
+
storeResource.isInitialized = true;
|
|
169
|
+
// check if it has an initialisation function that provides the value
|
|
170
|
+
if (resource.init) {
|
|
171
|
+
storeResource.value = await this.resourceInitializer.initializeResource(resource, config, await this.extractDependencies(resource.dependencies || {}));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return storeResource.value;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.DependencyProcessor = DependencyProcessor;
|
|
178
|
+
//# sourceMappingURL=DependencyProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventHandlerType, IEvent, IEventDefinition } from "../defs";
|
|
2
|
+
export interface IEventHandlerOptions<T = any> {
|
|
3
|
+
order?: number;
|
|
4
|
+
filter?: (event: IEvent<T>) => boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class EventManager {
|
|
7
|
+
#private;
|
|
8
|
+
private listeners;
|
|
9
|
+
private globalListeners;
|
|
10
|
+
get isLocked(): boolean;
|
|
11
|
+
lock(): void;
|
|
12
|
+
checkLock(): void;
|
|
13
|
+
emit<TInput>(eventDefinition: IEventDefinition<TInput>, ...args: TInput extends void ? [] : [TInput]): Promise<void>;
|
|
14
|
+
addListener<T>(event: IEventDefinition | Array<IEventDefinition>, handler: EventHandlerType<T>, options?: IEventHandlerOptions<T>): void;
|
|
15
|
+
addGlobalListener(handler: EventHandlerType, options?: IEventHandlerOptions): void;
|
|
16
|
+
private sortListeners;
|
|
17
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventManager = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const HandlerOptionsDefaults = { order: 0 };
|
|
6
|
+
class EventManager {
|
|
7
|
+
listeners = new Map();
|
|
8
|
+
globalListeners = [];
|
|
9
|
+
#isLocked = false;
|
|
10
|
+
get isLocked() {
|
|
11
|
+
return this.#isLocked;
|
|
12
|
+
}
|
|
13
|
+
lock() {
|
|
14
|
+
this.#isLocked = true;
|
|
15
|
+
}
|
|
16
|
+
checkLock() {
|
|
17
|
+
if (this.#isLocked) {
|
|
18
|
+
throw errors_1.Errors.locked("EventManager");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async emit(eventDefinition, ...args) {
|
|
22
|
+
const data = args[0];
|
|
23
|
+
const eventListeners = this.listeners.get(eventDefinition.id) || [];
|
|
24
|
+
const allListeners = this.sortListeners([
|
|
25
|
+
...eventListeners,
|
|
26
|
+
...this.globalListeners,
|
|
27
|
+
]);
|
|
28
|
+
const event = {
|
|
29
|
+
id: eventDefinition.id,
|
|
30
|
+
data,
|
|
31
|
+
};
|
|
32
|
+
for (const listener of allListeners) {
|
|
33
|
+
const ok = !listener.filter || listener.filter(event);
|
|
34
|
+
if (ok) {
|
|
35
|
+
await listener.handler(event);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
addListener(event, handler, options = HandlerOptionsDefaults) {
|
|
40
|
+
this.checkLock();
|
|
41
|
+
if (Array.isArray(event)) {
|
|
42
|
+
event.forEach((id) => this.addListener(id, handler, options));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const eventId = event.id;
|
|
46
|
+
const listeners = this.listeners.get(eventId) || [];
|
|
47
|
+
const newListener = {
|
|
48
|
+
handler,
|
|
49
|
+
order: options.order || 0,
|
|
50
|
+
filter: options.filter,
|
|
51
|
+
};
|
|
52
|
+
const newListeners = this.sortListeners([...listeners, newListener]);
|
|
53
|
+
this.listeners.set(eventId, newListeners);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
addGlobalListener(handler, options = HandlerOptionsDefaults) {
|
|
57
|
+
this.checkLock();
|
|
58
|
+
const newListener = {
|
|
59
|
+
handler,
|
|
60
|
+
order: options.order || 0,
|
|
61
|
+
filter: options.filter,
|
|
62
|
+
};
|
|
63
|
+
this.globalListeners = this.sortListeners([
|
|
64
|
+
...this.globalListeners,
|
|
65
|
+
newListener,
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
sortListeners(listeners) {
|
|
69
|
+
return [...listeners].sort((a, b) => a.order - b.order);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.EventManager = EventManager;
|
|
73
|
+
//# sourceMappingURL=EventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../../src/models/EventManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EventManager } from "./EventManager";
|
|
2
|
+
export type LogLevels = "trace" | "debug" | "info" | "warn" | "error" | "critical";
|
|
3
|
+
export interface ILog {
|
|
4
|
+
level: string;
|
|
5
|
+
context?: string;
|
|
6
|
+
data: any;
|
|
7
|
+
timestamp: Date;
|
|
8
|
+
}
|
|
9
|
+
export declare class Logger {
|
|
10
|
+
private eventManager;
|
|
11
|
+
static defaultContext: string;
|
|
12
|
+
severity: {
|
|
13
|
+
trace: number;
|
|
14
|
+
debug: number;
|
|
15
|
+
info: number;
|
|
16
|
+
warn: number;
|
|
17
|
+
error: number;
|
|
18
|
+
critical: number;
|
|
19
|
+
};
|
|
20
|
+
constructor(eventManager: EventManager);
|
|
21
|
+
/**
|
|
22
|
+
* @param level
|
|
23
|
+
* @param message
|
|
24
|
+
*/
|
|
25
|
+
log(level: LogLevels, data: any): Promise<void>;
|
|
26
|
+
print(log: ILog): Promise<void>;
|
|
27
|
+
info(data: any): Promise<void>;
|
|
28
|
+
error(data: any): Promise<void>;
|
|
29
|
+
warn(data: any): Promise<void>;
|
|
30
|
+
debug(data: any): Promise<void>;
|
|
31
|
+
trace(data: any): Promise<void>;
|
|
32
|
+
critical(data: any): Promise<void>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Logger = void 0;
|
|
4
|
+
const globalEvents_1 = require("../globalEvents");
|
|
5
|
+
class Logger {
|
|
6
|
+
eventManager;
|
|
7
|
+
static defaultContext = "app";
|
|
8
|
+
severity = {
|
|
9
|
+
trace: 0,
|
|
10
|
+
debug: 1,
|
|
11
|
+
info: 2,
|
|
12
|
+
warn: 3,
|
|
13
|
+
error: 4,
|
|
14
|
+
critical: 5,
|
|
15
|
+
};
|
|
16
|
+
constructor(eventManager) {
|
|
17
|
+
this.eventManager = eventManager;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @param level
|
|
21
|
+
* @param message
|
|
22
|
+
*/
|
|
23
|
+
async log(level, data) {
|
|
24
|
+
const log = {
|
|
25
|
+
level,
|
|
26
|
+
data,
|
|
27
|
+
timestamp: new Date(),
|
|
28
|
+
};
|
|
29
|
+
await this.eventManager.emit(globalEvents_1.globalEvents.log, log);
|
|
30
|
+
}
|
|
31
|
+
async print(log) {
|
|
32
|
+
// Extract the relevant information from the log
|
|
33
|
+
const { level, context, data, timestamp } = log;
|
|
34
|
+
// Format the timestamp to a more readable format
|
|
35
|
+
const formattedTimestamp = timestamp.toISOString();
|
|
36
|
+
// Format the log level for better visibility
|
|
37
|
+
const levelStr = `[${level.toUpperCase()}]`;
|
|
38
|
+
// Format the context, if provided
|
|
39
|
+
const contextStr = context ? `(${context})` : "";
|
|
40
|
+
// Handle different data types, especially if it's an error
|
|
41
|
+
let dataStr;
|
|
42
|
+
if (data instanceof Error) {
|
|
43
|
+
dataStr = `Error: ${data.name} - ${data.message}\nStack Trace:\n${data.stack}`;
|
|
44
|
+
}
|
|
45
|
+
else if (typeof data === "object") {
|
|
46
|
+
dataStr = JSON.stringify(data, null, 2); // Pretty-print JSON objects
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
dataStr = String(data); // Convert any other type to string
|
|
50
|
+
}
|
|
51
|
+
// Construct the final log message
|
|
52
|
+
const logMessage = `${formattedTimestamp} ${levelStr} ${contextStr} - ${dataStr}`;
|
|
53
|
+
// Print the log message
|
|
54
|
+
console.log(logMessage);
|
|
55
|
+
}
|
|
56
|
+
async info(data) {
|
|
57
|
+
await this.log("info", data);
|
|
58
|
+
}
|
|
59
|
+
async error(data) {
|
|
60
|
+
await this.log("error", data);
|
|
61
|
+
}
|
|
62
|
+
async warn(data) {
|
|
63
|
+
await this.log("warn", data);
|
|
64
|
+
}
|
|
65
|
+
async debug(data) {
|
|
66
|
+
await this.log("debug", data);
|
|
67
|
+
}
|
|
68
|
+
async trace(data) {
|
|
69
|
+
await this.log("trace", data);
|
|
70
|
+
}
|
|
71
|
+
async critical(data) {
|
|
72
|
+
await this.log("critical", data);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Logger = Logger;
|
|
76
|
+
//# sourceMappingURL=Logger.js.map
|