@bluelibs/runner 1.0.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.
Files changed (76) hide show
  1. package/README.md +231 -12
  2. package/dist/DependencyProcessor.d.ts +2 -2
  3. package/dist/DependencyProcessor.js +3 -3
  4. package/dist/DependencyProcessor.js.map +1 -1
  5. package/dist/EventManager.d.ts +4 -0
  6. package/dist/EventManager.js +15 -0
  7. package/dist/EventManager.js.map +1 -1
  8. package/dist/Store.d.ts +30 -2
  9. package/dist/Store.js +134 -29
  10. package/dist/Store.js.map +1 -1
  11. package/dist/TaskRunner.d.ts +3 -0
  12. package/dist/TaskRunner.js +3 -0
  13. package/dist/TaskRunner.js.map +1 -1
  14. package/dist/define.js +2 -7
  15. package/dist/define.js.map +1 -1
  16. package/dist/defs.d.ts +15 -4
  17. package/dist/errors.d.ts +2 -0
  18. package/dist/errors.js +2 -0
  19. package/dist/errors.js.map +1 -1
  20. package/dist/globalEvents.d.ts +2 -0
  21. package/dist/globalEvents.js +3 -0
  22. package/dist/globalEvents.js.map +1 -1
  23. package/dist/globalResources.d.ts +8 -6
  24. package/dist/globalResources.js +9 -4
  25. package/dist/globalResources.js.map +1 -1
  26. package/dist/index.d.ts +8 -6
  27. package/dist/index.js +3 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/models/DependencyProcessor.d.ts +49 -0
  30. package/dist/models/DependencyProcessor.js +178 -0
  31. package/dist/models/DependencyProcessor.js.map +1 -0
  32. package/dist/models/EventManager.d.ts +17 -0
  33. package/dist/models/EventManager.js +73 -0
  34. package/dist/models/EventManager.js.map +1 -0
  35. package/dist/models/Logger.d.ts +33 -0
  36. package/dist/models/Logger.js +76 -0
  37. package/dist/models/Logger.js.map +1 -0
  38. package/dist/models/ResourceInitializer.d.ts +13 -0
  39. package/dist/models/ResourceInitializer.js +54 -0
  40. package/dist/models/ResourceInitializer.js.map +1 -0
  41. package/dist/models/Store.d.ts +90 -0
  42. package/dist/models/Store.js +302 -0
  43. package/dist/models/Store.js.map +1 -0
  44. package/dist/models/TaskRunner.d.ts +25 -0
  45. package/dist/models/TaskRunner.js +96 -0
  46. package/dist/models/TaskRunner.js.map +1 -0
  47. package/dist/models/index.d.ts +5 -0
  48. package/dist/models/index.js +22 -0
  49. package/dist/models/index.js.map +1 -0
  50. package/dist/run.d.ts +4 -4
  51. package/dist/run.js +14 -7
  52. package/dist/run.js.map +1 -1
  53. package/package.json +1 -2
  54. package/src/__tests__/index.ts +8 -4
  55. package/src/__tests__/{EventManager.test.ts → models/EventManager.test.ts} +20 -2
  56. package/src/__tests__/models/Logger.test.ts +140 -0
  57. package/src/__tests__/{ResourceInitializer.test.ts → models/ResourceInitializer.test.ts} +4 -4
  58. package/src/__tests__/models/Store.test.ts +128 -0
  59. package/src/__tests__/{TaskRunner.test.ts → models/TaskRunner.test.ts} +5 -5
  60. package/src/__tests__/run.overrides.test.ts +392 -0
  61. package/src/__tests__/run.test.ts +28 -1
  62. package/src/define.ts +4 -8
  63. package/src/defs.ts +20 -4
  64. package/src/errors.ts +6 -0
  65. package/src/globalEvents.ts +4 -0
  66. package/src/globalResources.ts +18 -11
  67. package/src/index.ts +3 -3
  68. package/src/{DependencyProcessor.ts → models/DependencyProcessor.ts} +6 -6
  69. package/src/{EventManager.ts → models/EventManager.ts} +21 -1
  70. package/src/models/Logger.ts +100 -0
  71. package/src/{ResourceInitializer.ts → models/ResourceInitializer.ts} +2 -2
  72. package/src/{Store.ts → models/Store.ts} +181 -41
  73. package/src/{TaskRunner.ts → models/TaskRunner.ts} +6 -3
  74. package/src/models/index.ts +5 -0
  75. package/src/run.ts +17 -9
  76. package/src/__tests__/Store.test.ts +0 -143
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/models/Logger.ts"],"names":[],"mappings":";;;AAAA,kDAA+C;AAkB/C,MAAa,MAAM;IAYG;IAXb,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;IAE9B,QAAQ,GAAG;QAChB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAElD;;;OAGG;IACI,KAAK,CAAC,GAAG,CAAC,KAAgB,EAAE,IAAS;QAC1C,MAAM,GAAG,GAAS;YAChB,KAAK;YACL,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,GAAS;QAC1B,gDAAgD;QAChD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;QAEhD,iDAAiD;QACjD,MAAM,kBAAkB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAEnD,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QAE5C,kCAAkC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjD,2DAA2D;QAC3D,IAAI,OAAe,CAAC;QACpB,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;YAC1B,OAAO,GAAG,UAAU,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,mBAAmB,IAAI,CAAC,KAAK,EAAE,CAAC;QACjF,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC7D,CAAC;QAED,kCAAkC;QAClC,MAAM,UAAU,GAAG,GAAG,kBAAkB,IAAI,QAAQ,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;QAElF,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAS;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAS;QAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAS;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAS;QAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAS;QAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAS;QAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;;AAhFH,wBAiFC"}
@@ -0,0 +1,13 @@
1
+ import { DependencyMapType, DependencyValuesType, IResource } from "../defs";
2
+ import { EventManager } from "./EventManager";
3
+ import { Store } from "./Store";
4
+ export declare class ResourceInitializer {
5
+ protected readonly store: Store;
6
+ protected readonly eventManager: EventManager;
7
+ constructor(store: Store, eventManager: EventManager);
8
+ /**
9
+ * 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.
10
+ * This function can throw only if any of the event listeners or run function throws
11
+ */
12
+ initializeResource<TConfig = null, TValue = any, TDeps extends DependencyMapType = {}>(resource: IResource<TConfig, TValue, TDeps>, config: TConfig, dependencies: DependencyValuesType<TDeps>): Promise<TValue | undefined>;
13
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceInitializer = void 0;
4
+ const globalEvents_1 = require("../globalEvents");
5
+ class ResourceInitializer {
6
+ store;
7
+ eventManager;
8
+ constructor(store, eventManager) {
9
+ this.store = store;
10
+ this.eventManager = eventManager;
11
+ }
12
+ /**
13
+ * 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.
14
+ * This function can throw only if any of the event listeners or run function throws
15
+ */
16
+ async initializeResource(resource, config, dependencies) {
17
+ // begin by dispatching the event of creating it.
18
+ // then ensure the hooks are called
19
+ // then ensure the middleware are called
20
+ await this.eventManager.emit(globalEvents_1.globalEvents.resources.beforeInit, {
21
+ config,
22
+ resource,
23
+ });
24
+ await this.eventManager.emit(resource.events.beforeInit, { config });
25
+ let error, value;
26
+ try {
27
+ if (resource.init) {
28
+ value = await resource.init(config, dependencies);
29
+ }
30
+ await this.eventManager.emit(resource.events.afterInit, {
31
+ config,
32
+ value,
33
+ });
34
+ await this.eventManager.emit(globalEvents_1.globalEvents.resources.afterInit, {
35
+ config,
36
+ resource,
37
+ value,
38
+ });
39
+ return value;
40
+ }
41
+ catch (e) {
42
+ error = e;
43
+ // If you want to rewthrow the error, this should be done inside the onError event.
44
+ await this.eventManager.emit(resource.events.onError, { error });
45
+ await this.eventManager.emit(globalEvents_1.globalEvents.resources.onError, {
46
+ error,
47
+ resource,
48
+ });
49
+ throw e;
50
+ }
51
+ }
52
+ }
53
+ exports.ResourceInitializer = ResourceInitializer;
54
+ //# sourceMappingURL=ResourceInitializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceInitializer.js","sourceRoot":"","sources":["../../src/models/ResourceInitializer.ts"],"names":[],"mappings":";;;AAOA,kDAA+C;AAG/C,MAAa,mBAAmB;IAET;IACA;IAFrB,YACqB,KAAY,EACZ,YAA0B;QAD1B,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAc;IAC5C,CAAC;IAEJ;;;OAGG;IACI,KAAK,CAAC,kBAAkB,CAK7B,QAA2C,EAC3C,MAAe,EACf,YAAyC;QAEzC,iDAAiD;QACjD,mCAAmC;QACnC,wCAAwC;QACxC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAAY,CAAC,SAAS,CAAC,UAAU,EAAE;YAC9D,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAErE,IAAI,KAAK,EAAE,KAAK,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE;gBACtD,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAAY,CAAC,SAAS,CAAC,SAAS,EAAE;gBAC7D,MAAM;gBACN,QAAQ;gBACR,KAAK;aACN,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,CAAC,CAAC;YAEV,mFAAmF;YACnF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAAY,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC3D,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YAEH,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF;AA1DD,kDA0DC"}
@@ -0,0 +1,90 @@
1
+ import { DependencyMapType, DependencyValuesType, IEventDefinition, IResource, ITask, IResourceWithConfig, RegisterableItems, IMiddleware } from "../defs";
2
+ import { IDependentNode } from "../tools/findCircularDependencies";
3
+ import { EventManager } from "./EventManager";
4
+ export type ResourceStoreElementType<C = any, V = any, D extends DependencyMapType = {}> = {
5
+ resource: IResource<C, V, D>;
6
+ computedDependencies?: DependencyValuesType<D>;
7
+ config: C;
8
+ value: V;
9
+ isInitialized?: boolean;
10
+ };
11
+ export type TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any> = {
12
+ task: ITask<Input, Output, D>;
13
+ computedDependencies: DependencyValuesType<D>;
14
+ isInitialized: boolean;
15
+ };
16
+ export type MiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
17
+ middleware: IMiddleware<TDeps>;
18
+ computedDependencies: DependencyValuesType<TDeps>;
19
+ };
20
+ export type EventStoreElementType = {
21
+ event: IEventDefinition;
22
+ };
23
+ /**
24
+ * Store class which is used to store all the resources, tasks, middleware and events.
25
+ */
26
+ export declare class Store {
27
+ #private;
28
+ protected readonly eventManager: EventManager;
29
+ root: ResourceStoreElementType;
30
+ tasks: Map<string, TaskStoreElementType>;
31
+ resources: Map<string, ResourceStoreElementType>;
32
+ events: Map<string, EventStoreElementType>;
33
+ middlewares: Map<string, MiddlewareStoreElementType>;
34
+ overrides: Map<string, IResource | IMiddleware | ITask | IResourceWithConfig>;
35
+ constructor(eventManager: EventManager);
36
+ get isLocked(): boolean;
37
+ lock(): void;
38
+ checkLock(): void;
39
+ /**
40
+ * Store the root before beginning registration
41
+ * @param root
42
+ * @param config
43
+ */
44
+ initializeStore(root: IResource<any>, config: any): void;
45
+ /**
46
+ * Beginning with the root, we perform registering to the container all the resources, tasks, middleware and events.
47
+ * @param element
48
+ * @param config
49
+ */
50
+ private computeRegistrationDeeply;
51
+ /**
52
+ * @param element
53
+ */
54
+ private storeOverridesDeeply;
55
+ /**
56
+ * middlewares are already stored in their final form and the check for them would be redundant
57
+ * @param id
58
+ */
59
+ protected checkIfIDExists(id: string): void | never;
60
+ /**
61
+ * Cleanup
62
+ */
63
+ dispose(): Promise<void>;
64
+ /**
65
+ * When this is called, all overrides should have been stored in the "overrides" store.
66
+ */
67
+ processOverrides(): void;
68
+ getGlobalMiddlewares(excludingIds: string[]): IMiddleware[];
69
+ /**
70
+ * If you want to register something to the store you can use this function.
71
+ * @param item
72
+ */
73
+ storeGenericItem<C>(item: RegisterableItems): void;
74
+ private storeMiddleware;
75
+ storeEvent<C>(item: IEventDefinition<void>): void;
76
+ private storeResourceWithConfig;
77
+ /**
78
+ * This is for storing a resource without a config.
79
+ * @param item
80
+ */
81
+ private storeResource;
82
+ storeEventsForAllTasks(): void;
83
+ /**
84
+ * This is for storing a resource without a config.
85
+ * @param item
86
+ */
87
+ private prepareResource;
88
+ private storeTask;
89
+ getDependentNodes(): IDependentNode[];
90
+ }