@bluelibs/runner 2.2.3 → 3.0.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 (204) hide show
  1. package/README.md +1315 -942
  2. package/dist/common.types.d.ts +20 -0
  3. package/dist/common.types.js +4 -0
  4. package/dist/common.types.js.map +1 -0
  5. package/dist/context.d.ts +34 -0
  6. package/dist/context.js +58 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/define.d.ts +22 -3
  9. package/dist/define.js +52 -8
  10. package/dist/define.js.map +1 -1
  11. package/dist/defs.d.ts +52 -31
  12. package/dist/defs.js +10 -2
  13. package/dist/defs.js.map +1 -1
  14. package/dist/errors.js +1 -1
  15. package/dist/errors.js.map +1 -1
  16. package/dist/event.types.d.ts +18 -0
  17. package/dist/event.types.js +4 -0
  18. package/dist/event.types.js.map +1 -0
  19. package/dist/examples/registrator-example.d.ts +122 -0
  20. package/dist/examples/registrator-example.js +147 -0
  21. package/dist/examples/registrator-example.js.map +1 -0
  22. package/dist/globals/globalEvents.d.ts +41 -0
  23. package/dist/globals/globalEvents.js +94 -0
  24. package/dist/globals/globalEvents.js.map +1 -0
  25. package/dist/globals/globalMiddleware.d.ts +23 -0
  26. package/dist/globals/globalMiddleware.js +15 -0
  27. package/dist/globals/globalMiddleware.js.map +1 -0
  28. package/dist/globals/globalResources.d.ts +27 -0
  29. package/dist/globals/globalResources.js +47 -0
  30. package/dist/globals/globalResources.js.map +1 -0
  31. package/dist/globals/middleware/cache.middleware.d.ts +34 -0
  32. package/dist/globals/middleware/cache.middleware.js +85 -0
  33. package/dist/globals/middleware/cache.middleware.js.map +1 -0
  34. package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
  35. package/dist/globals/middleware/requireContext.middleware.js +25 -0
  36. package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
  37. package/dist/globals/middleware/retry.middleware.d.ts +20 -0
  38. package/dist/globals/middleware/retry.middleware.js +34 -0
  39. package/dist/globals/middleware/retry.middleware.js.map +1 -0
  40. package/dist/globals/resources/queue.resource.d.ts +7 -0
  41. package/dist/globals/resources/queue.resource.js +31 -0
  42. package/dist/globals/resources/queue.resource.js.map +1 -0
  43. package/dist/index.d.ts +45 -9
  44. package/dist/index.js +14 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/middleware.types.d.ts +40 -0
  47. package/dist/middleware.types.js +4 -0
  48. package/dist/middleware.types.js.map +1 -0
  49. package/dist/models/DependencyProcessor.d.ts +2 -1
  50. package/dist/models/DependencyProcessor.js +11 -13
  51. package/dist/models/DependencyProcessor.js.map +1 -1
  52. package/dist/models/EventManager.d.ts +5 -0
  53. package/dist/models/EventManager.js +44 -2
  54. package/dist/models/EventManager.js.map +1 -1
  55. package/dist/models/Logger.d.ts +30 -12
  56. package/dist/models/Logger.js +130 -42
  57. package/dist/models/Logger.js.map +1 -1
  58. package/dist/models/OverrideManager.d.ts +13 -0
  59. package/dist/models/OverrideManager.js +70 -0
  60. package/dist/models/OverrideManager.js.map +1 -0
  61. package/dist/models/Queue.d.ts +25 -0
  62. package/dist/models/Queue.js +54 -0
  63. package/dist/models/Queue.js.map +1 -0
  64. package/dist/models/ResourceInitializer.d.ts +5 -2
  65. package/dist/models/ResourceInitializer.js +20 -14
  66. package/dist/models/ResourceInitializer.js.map +1 -1
  67. package/dist/models/Semaphore.d.ts +61 -0
  68. package/dist/models/Semaphore.js +166 -0
  69. package/dist/models/Semaphore.js.map +1 -0
  70. package/dist/models/Store.d.ts +17 -72
  71. package/dist/models/Store.js +71 -269
  72. package/dist/models/Store.js.map +1 -1
  73. package/dist/models/StoreConstants.d.ts +11 -0
  74. package/dist/models/StoreConstants.js +18 -0
  75. package/dist/models/StoreConstants.js.map +1 -0
  76. package/dist/models/StoreRegistry.d.ts +25 -0
  77. package/dist/models/StoreRegistry.js +171 -0
  78. package/dist/models/StoreRegistry.js.map +1 -0
  79. package/dist/models/StoreTypes.d.ts +21 -0
  80. package/dist/models/StoreTypes.js +3 -0
  81. package/dist/models/StoreTypes.js.map +1 -0
  82. package/dist/models/StoreValidator.d.ts +10 -0
  83. package/dist/models/StoreValidator.js +41 -0
  84. package/dist/models/StoreValidator.js.map +1 -0
  85. package/dist/models/TaskRunner.js +39 -24
  86. package/dist/models/TaskRunner.js.map +1 -1
  87. package/dist/models/VarStore.d.ts +17 -0
  88. package/dist/models/VarStore.js +60 -0
  89. package/dist/models/VarStore.js.map +1 -0
  90. package/dist/models/index.d.ts +3 -0
  91. package/dist/models/index.js +3 -0
  92. package/dist/models/index.js.map +1 -1
  93. package/dist/resource.types.d.ts +31 -0
  94. package/dist/resource.types.js +3 -0
  95. package/dist/resource.types.js.map +1 -0
  96. package/dist/run.d.ts +4 -1
  97. package/dist/run.js +6 -3
  98. package/dist/run.js.map +1 -1
  99. package/dist/symbols.d.ts +24 -0
  100. package/dist/symbols.js +29 -0
  101. package/dist/symbols.js.map +1 -0
  102. package/dist/task.types.d.ts +55 -0
  103. package/dist/task.types.js +23 -0
  104. package/dist/task.types.js.map +1 -0
  105. package/dist/tools/registratorId.d.ts +4 -0
  106. package/dist/tools/registratorId.js +40 -0
  107. package/dist/tools/registratorId.js.map +1 -0
  108. package/dist/tools/simpleHash.d.ts +9 -0
  109. package/dist/tools/simpleHash.js +34 -0
  110. package/dist/tools/simpleHash.js.map +1 -0
  111. package/dist/types/base-interfaces.d.ts +18 -0
  112. package/dist/types/base-interfaces.js +6 -0
  113. package/dist/types/base-interfaces.js.map +1 -0
  114. package/dist/types/base.d.ts +13 -0
  115. package/dist/types/base.js +3 -0
  116. package/dist/types/base.js.map +1 -0
  117. package/dist/types/dependencies.d.ts +22 -0
  118. package/dist/types/dependencies.js +3 -0
  119. package/dist/types/dependencies.js.map +1 -0
  120. package/dist/types/dependency-core.d.ts +14 -0
  121. package/dist/types/dependency-core.js +5 -0
  122. package/dist/types/dependency-core.js.map +1 -0
  123. package/dist/types/events.d.ts +52 -0
  124. package/dist/types/events.js +6 -0
  125. package/dist/types/events.js.map +1 -0
  126. package/dist/types/hooks.d.ts +16 -0
  127. package/dist/types/hooks.js +5 -0
  128. package/dist/types/hooks.js.map +1 -0
  129. package/dist/types/index.d.ts +14 -0
  130. package/dist/types/index.js +27 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/meta.d.ts +13 -0
  133. package/dist/types/meta.js +5 -0
  134. package/dist/types/meta.js.map +1 -0
  135. package/dist/types/middleware.d.ts +38 -0
  136. package/dist/types/middleware.js +6 -0
  137. package/dist/types/middleware.js.map +1 -0
  138. package/dist/types/registerable.d.ts +10 -0
  139. package/dist/types/registerable.js +5 -0
  140. package/dist/types/registerable.js.map +1 -0
  141. package/dist/types/resources.d.ts +44 -0
  142. package/dist/types/resources.js +5 -0
  143. package/dist/types/resources.js.map +1 -0
  144. package/dist/types/symbols.d.ts +24 -0
  145. package/dist/types/symbols.js +30 -0
  146. package/dist/types/symbols.js.map +1 -0
  147. package/dist/types/tasks.d.ts +41 -0
  148. package/dist/types/tasks.js +5 -0
  149. package/dist/types/tasks.js.map +1 -0
  150. package/dist/types/utilities.d.ts +7 -0
  151. package/dist/types/utilities.js +5 -0
  152. package/dist/types/utilities.js.map +1 -0
  153. package/package.json +10 -6
  154. package/src/__tests__/benchmark/benchmark.test.ts +1 -1
  155. package/src/__tests__/context.test.ts +91 -0
  156. package/src/__tests__/errors.test.ts +8 -5
  157. package/src/__tests__/globalEvents.test.ts +1 -1
  158. package/src/__tests__/globals/cache.middleware.test.ts +772 -0
  159. package/src/__tests__/globals/queue.resource.test.ts +141 -0
  160. package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
  161. package/src/__tests__/globals/retry.middleware.test.ts +157 -0
  162. package/src/__tests__/index.helper.test.ts +55 -0
  163. package/src/__tests__/models/EventManager.test.ts +144 -0
  164. package/src/__tests__/models/Logger.test.ts +291 -34
  165. package/src/__tests__/models/Queue.test.ts +189 -0
  166. package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
  167. package/src/__tests__/models/Semaphore.test.ts +713 -0
  168. package/src/__tests__/models/Store.test.ts +40 -0
  169. package/src/__tests__/models/TaskRunner.test.ts +86 -5
  170. package/src/__tests__/run.middleware.test.ts +166 -12
  171. package/src/__tests__/run.overrides.test.ts +13 -10
  172. package/src/__tests__/run.test.ts +363 -12
  173. package/src/__tests__/setOutput.test.ts +244 -0
  174. package/src/__tests__/tools/getCallerFile.test.ts +9 -9
  175. package/src/__tests__/typesafety.test.ts +54 -39
  176. package/src/context.ts +86 -0
  177. package/src/define.ts +84 -14
  178. package/src/defs.ts +91 -41
  179. package/src/errors.ts +3 -1
  180. package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
  181. package/src/globals/globalMiddleware.ts +14 -0
  182. package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
  183. package/src/globals/middleware/cache.middleware.ts +115 -0
  184. package/src/globals/middleware/requireContext.middleware.ts +36 -0
  185. package/src/globals/middleware/retry.middleware.ts +56 -0
  186. package/src/globals/resources/queue.resource.ts +34 -0
  187. package/src/index.ts +9 -5
  188. package/src/models/DependencyProcessor.ts +36 -40
  189. package/src/models/EventManager.ts +45 -5
  190. package/src/models/Logger.ts +170 -48
  191. package/src/models/OverrideManager.ts +84 -0
  192. package/src/models/Queue.ts +66 -0
  193. package/src/models/ResourceInitializer.ts +38 -20
  194. package/src/models/Semaphore.ts +208 -0
  195. package/src/models/Store.ts +94 -342
  196. package/src/models/StoreConstants.ts +17 -0
  197. package/src/models/StoreRegistry.ts +217 -0
  198. package/src/models/StoreTypes.ts +46 -0
  199. package/src/models/StoreValidator.ts +38 -0
  200. package/src/models/TaskRunner.ts +53 -40
  201. package/src/models/index.ts +3 -0
  202. package/src/run.ts +7 -4
  203. package/src/__tests__/index.ts +0 -15
  204. package/src/examples/express-mongo/index.ts +0 -1
@@ -1,55 +1,31 @@
1
1
  import {
2
2
  DependencyMapType,
3
- DependencyValuesType,
4
- IMiddlewareDefinition,
5
- IEventDefinition,
6
3
  IResource,
7
- ITask,
8
- IResourceWithConfig,
9
4
  RegisterableItems,
10
- symbols,
11
5
  IMiddleware,
12
6
  } from "../defs";
13
- import * as utils from "../define";
14
7
  import { IDependentNode } from "../tools/findCircularDependencies";
15
- import { globalEventsArray } from "../globalEvents";
8
+ import { globalEventsArray } from "../globals/globalEvents";
16
9
  import { Errors } from "../errors";
17
- import { globalResources } from "../globalResources";
18
10
  import { EventManager } from "./EventManager";
19
- import { TaskRunner } from "./TaskRunner";
20
11
  import { Logger } from "./Logger";
21
-
22
- export type ResourceStoreElementType<
23
- C = any,
24
- V = any,
25
- D extends DependencyMapType = {}
26
- > = {
27
- resource: IResource<C, V, D>;
28
- computedDependencies?: DependencyValuesType<D>;
29
- config: C;
30
- value: V;
31
- isInitialized?: boolean;
32
- };
33
-
34
- export type TaskStoreElementType<
35
- Input = any,
36
- Output extends Promise<any> = any,
37
- D extends DependencyMapType = any,
38
- TOn extends "*" | IEventDefinition | undefined = any
39
- > = {
40
- task: ITask<Input, Output, D, TOn>;
41
- computedDependencies: DependencyValuesType<D>;
42
- isInitialized: boolean;
43
- };
44
-
45
- export type MiddlewareStoreElementType<TDeps extends DependencyMapType = any> =
46
- {
47
- middleware: IMiddleware<TDeps>;
48
- computedDependencies: DependencyValuesType<TDeps>;
49
- };
50
-
51
- export type EventStoreElementType = {
52
- event: IEventDefinition;
12
+ import { StoreRegistry } from "./StoreRegistry";
13
+ import { OverrideManager } from "./OverrideManager";
14
+ import { StoreValidator } from "./StoreValidator";
15
+ import {
16
+ ResourceStoreElementType,
17
+ TaskStoreElementType,
18
+ MiddlewareStoreElementType,
19
+ EventStoreElementType,
20
+ } from "./StoreTypes";
21
+ import { getBuiltInResources, getBuiltInMiddlewares } from "./StoreConstants";
22
+
23
+ // Re-export types for backward compatibility
24
+ export {
25
+ ResourceStoreElementType,
26
+ TaskStoreElementType,
27
+ MiddlewareStoreElementType,
28
+ EventStoreElementType,
53
29
  };
54
30
 
55
31
  /**
@@ -57,21 +33,9 @@ export type EventStoreElementType = {
57
33
  */
58
34
  export class Store {
59
35
  root!: ResourceStoreElementType;
60
- public tasks: Map<string, TaskStoreElementType> = new Map();
61
- public resources: Map<string, ResourceStoreElementType> = new Map();
62
- public events: Map<string, EventStoreElementType> = new Map();
63
- public middlewares: Map<string, MiddlewareStoreElementType> = new Map();
64
- public overrides: Map<
65
- string,
66
- IResource | IMiddleware | ITask | IResourceWithConfig
67
- > = new Map();
68
- /**
69
- * This is because we can have multiple overrides at once, and the final override is the one that is used.
70
- */
71
- public overrideRequests: Set<{
72
- source: string;
73
- override: RegisterableItems;
74
- }> = new Set();
36
+ private registry: StoreRegistry;
37
+ private overrideManager: OverrideManager;
38
+ private validator: StoreValidator;
75
39
 
76
40
  #isLocked = false;
77
41
  #isInitialized = false;
@@ -79,7 +43,31 @@ export class Store {
79
43
  constructor(
80
44
  protected readonly eventManager: EventManager,
81
45
  protected readonly logger: Logger
82
- ) {}
46
+ ) {
47
+ this.registry = new StoreRegistry();
48
+ this.validator = this.registry.getValidator();
49
+ this.overrideManager = new OverrideManager(this.registry);
50
+ }
51
+
52
+ // Delegate properties to registry
53
+ get tasks() {
54
+ return this.registry.tasks;
55
+ }
56
+ get resources() {
57
+ return this.registry.resources;
58
+ }
59
+ get events() {
60
+ return this.registry.events;
61
+ }
62
+ get middlewares() {
63
+ return this.registry.middlewares;
64
+ }
65
+ get overrides() {
66
+ return this.overrideManager.overrides;
67
+ }
68
+ get overrideRequests() {
69
+ return this.overrideManager.overrideRequests;
70
+ }
83
71
 
84
72
  get isLocked() {
85
73
  return this.#isLocked;
@@ -96,14 +84,29 @@ export class Store {
96
84
  }
97
85
  }
98
86
 
99
- initializeStore(root: IResource<any>, config: any) {
100
- if (this.#isInitialized) {
101
- throw Errors.storeAlreadyInitialized();
102
- }
87
+ private registerGlobalComponents() {
88
+ // Register built-in resources
89
+ const builtInResources = getBuiltInResources(this.eventManager, this);
90
+ builtInResources.forEach((resource) => {
91
+ this.registry.storeGenericItem(resource);
92
+ });
93
+
94
+ // Register global events
95
+ globalEventsArray.forEach((event) => {
96
+ this.registry.storeEvent(event);
97
+ });
103
98
 
104
- this.storeGenericItem(globalResources.eventManager.with(this.eventManager));
105
- this.storeGenericItem(globalResources.store.with(this));
99
+ // Register built-in middlewares
100
+ const builtInMiddlewares = getBuiltInMiddlewares();
101
+ builtInMiddlewares.forEach((middleware) => {
102
+ this.registry.middlewares.set(middleware.id, {
103
+ middleware,
104
+ computedDependencies: {},
105
+ });
106
+ });
107
+ }
106
108
 
109
+ private setupRootResource(root: IResource<any>, config: any) {
107
110
  root.dependencies =
108
111
  typeof root.dependencies === "function"
109
112
  ? root.dependencies(config)
@@ -115,318 +118,67 @@ export class Store {
115
118
  config,
116
119
  value: undefined,
117
120
  isInitialized: false,
121
+ context: {},
118
122
  };
119
123
 
120
- // register global events
121
- globalEventsArray.forEach((event) => {
122
- this.storeEvent(event);
123
- });
124
-
125
- this.computeRegistrationDeeply(root, config);
126
- this.resources.set(root.id, this.root);
127
-
128
- this.runSanityChecks();
129
-
130
- for (const resource of this.resources.values()) {
131
- this.storeOverridesDeeply(resource.resource);
132
- }
133
-
134
- this.#isInitialized = true;
124
+ this.registry.computeRegistrationDeeply(root, config);
125
+ this.registry.resources.set(root.id, this.root);
135
126
  }
136
127
 
137
- private runSanityChecks() {
138
- for (const task of this.tasks.values()) {
139
- task.task.middleware.forEach((middleware) => {
140
- if (!this.middlewares.has(middleware.id)) {
141
- throw Errors.dependencyNotFound(
142
- `Middleware ${middleware.id} in Task ${task.task.id}`
143
- );
144
- }
145
- });
128
+ initializeStore(root: IResource<any>, config: any) {
129
+ if (this.#isInitialized) {
130
+ throw Errors.storeAlreadyInitialized();
146
131
  }
147
- }
148
132
 
149
- /**
150
- * Beginning with the root, we perform registering to the container all the resources, tasks, middleware and events.
151
- * @param element
152
- * @param config
153
- */
154
- private computeRegistrationDeeply<C>(element: IResource<C>, config?: C) {
155
- const items =
156
- typeof element.register === "function"
157
- ? element.register(config as C)
158
- : element.register;
133
+ this.registerGlobalComponents();
134
+ this.setupRootResource(root, config);
135
+ this.validator.runSanityChecks();
159
136
 
160
- // if it was a computed function ensure the registered terms are stored, not the function.
161
- element.register = items;
162
-
163
- for (const item of items) {
164
- // will call registration if it detects another resource.
165
- this.storeGenericItem<C>(item);
137
+ for (const resource of this.resources.values()) {
138
+ this.overrideManager.storeOverridesDeeply(resource.resource);
166
139
  }
167
- }
168
140
 
169
- /**
170
- * @param element
171
- */
172
- private storeOverridesDeeply<C>(element: IResource<C, any, any>) {
173
- element.overrides.forEach((override) => {
174
- // We go deeply for resources, because we want to store all the overrides first
175
- // the one on top has priority of setting the last override.
176
- if (utils.isResource(override)) {
177
- this.storeOverridesDeeply(override);
178
- }
179
-
180
- let id: string;
181
- if (utils.isResourceWithConfig(override)) {
182
- this.storeOverridesDeeply(override.resource);
183
- id = override.resource.id;
184
- } else {
185
- id = override.id;
186
- }
187
-
188
- this.overrideRequests.add({ source: element.id, override });
189
- this.overrides.set(id, override);
190
- });
191
- }
192
-
193
- /**
194
- * middlewares are already stored in their final form and the check for them would be redundant
195
- * @param id
196
- */
197
- protected checkIfIDExists(id: string): void | never {
198
- if (this.tasks.has(id)) {
199
- throw Errors.duplicateRegistration("Task", id);
200
- }
201
- if (this.resources.has(id)) {
202
- throw Errors.duplicateRegistration("Resource", id);
203
- }
204
- if (this.events.has(id)) {
205
- throw Errors.duplicateRegistration("Event", id);
206
- }
207
- if (this.middlewares.has(id)) {
208
- throw Errors.duplicateRegistration("Middleware", id);
209
- }
141
+ this.#isInitialized = true;
210
142
  }
211
143
 
212
- /**
213
- * Cleanup
214
- */
215
144
  public async dispose() {
216
145
  for (const resource of this.resources.values()) {
217
146
  if (resource.resource.dispose) {
218
147
  await resource.resource.dispose(
219
148
  resource.value,
220
149
  resource.config,
221
- resource.computedDependencies as DependencyMapType
150
+ resource.computedDependencies as DependencyMapType,
151
+ resource.context
222
152
  );
223
153
  }
224
154
  }
225
155
  }
226
156
 
227
- /**
228
- * When this is called, all overrides should have been stored in the "overrides" store.
229
- */
230
157
  public processOverrides() {
231
- // If we are trying to use override on something that wasn't previously registered, we throw an error.
232
- for (const override of this.overrides.values()) {
233
- let hasAnyItem = false;
234
- if (utils.isTask(override)) {
235
- hasAnyItem = this.tasks.has(override.id);
236
- } else if (utils.isResource(override)) {
237
- hasAnyItem = this.resources.has(override.id);
238
- } else if (utils.isMiddleware(override)) {
239
- hasAnyItem = this.middlewares.has(override.id);
240
- } else if (utils.isResourceWithConfig(override)) {
241
- hasAnyItem = this.resources.has(override.resource.id);
242
- }
243
-
244
- if (!hasAnyItem) {
245
- const id = utils.isResourceWithConfig(override)
246
- ? override.resource.id
247
- : override.id;
248
-
249
- throw Errors.dependencyNotFound(id);
250
- }
251
- }
252
-
253
- for (const override of this.overrides.values()) {
254
- if (utils.isTask(override)) {
255
- this.storeTask(override, false);
256
- } else if (utils.isResource(override)) {
257
- this.storeResource(override, false);
258
- } else if (utils.isMiddleware(override)) {
259
- this.storeMiddleware(override, false);
260
- } else if (utils.isResourceWithConfig(override)) {
261
- this.storeResourceWithConfig(override, false);
262
- }
263
- }
158
+ this.overrideManager.processOverrides();
264
159
  }
265
160
 
266
- public getGlobalMiddlewares(excludingIds: string[]): IMiddleware[] {
267
- return Array.from(this.middlewares.values())
268
- .filter((x) => x.middleware[symbols.middlewareGlobal])
269
- .filter((x) => !excludingIds.includes(x.middleware.id))
270
- .map((x) => x.middleware);
161
+ public getEverywhereMiddlewareForTasks(
162
+ excludingIds: string[]
163
+ ): IMiddleware[] {
164
+ return this.registry.getEverywhereMiddlewareForTasks(excludingIds);
271
165
  }
272
166
 
273
- /**
274
- * If you want to register something to the store you can use this function.
275
- * @param item
276
- */
277
- public storeGenericItem<C>(item: RegisterableItems) {
278
- if (utils.isTask(item)) {
279
- this.storeTask<C>(item);
280
- } else if (utils.isResource(item)) {
281
- // Registration a simple resource, which is interpreted as a resource with no configuration.
282
- this.storeResource<C>(item);
283
- } else if (utils.isEvent(item)) {
284
- this.storeEvent<C>(item);
285
- } else if (utils.isMiddleware(item)) {
286
- this.storeMiddleware<C>(item);
287
- } else if (utils.isResourceWithConfig(item)) {
288
- this.storeResourceWithConfig<C>(item);
289
- } else {
290
- throw Errors.unknownItemType(item);
291
- }
167
+ public getEverywhereMiddlewareForResources(
168
+ excludingIds: string[]
169
+ ): IMiddleware[] {
170
+ return this.registry.getEverywhereMiddlewareForResources(excludingIds);
292
171
  }
293
172
 
294
- private storeMiddleware<C>(item: IMiddleware<any>, check = true) {
295
- check && this.checkIfIDExists(item.id);
296
-
297
- item.dependencies =
298
- typeof item.dependencies === "function"
299
- ? item.dependencies()
300
- : item.dependencies;
301
-
302
- this.middlewares.set(item.id, {
303
- middleware: item,
304
- computedDependencies: {},
305
- });
306
- }
307
-
308
- public storeEvent<C>(item: IEventDefinition<void>) {
309
- this.checkIfIDExists(item.id);
310
-
311
- this.events.set(item.id, { event: item });
312
- }
313
-
314
- private storeResourceWithConfig<C>(
315
- item: IResourceWithConfig<any, any, any>,
316
- check = true
317
- ) {
318
- check && this.checkIfIDExists(item.resource.id);
319
-
320
- this.prepareResource(item.resource, item.config);
321
-
322
- this.resources.set(item.resource.id, {
323
- resource: item.resource,
324
- config: item.config,
325
- value: undefined,
326
- isInitialized: false,
327
- });
328
-
329
- this.computeRegistrationDeeply(item.resource, item.config);
330
- }
331
-
332
- /**
333
- * This is for storing a resource without a config.
334
- * @param item
335
- */
336
- private storeResource<C>(item: IResource<any, any, any>, check = true) {
337
- check && this.checkIfIDExists(item.id);
338
-
339
- this.prepareResource(item, {});
340
-
341
- this.resources.set(item.id, {
342
- resource: item,
343
- config: {},
344
- value: undefined,
345
- isInitialized: false,
346
- });
347
-
348
- this.computeRegistrationDeeply(item, {});
173
+ public storeGenericItem<C>(item: RegisterableItems) {
174
+ return this.registry.storeGenericItem<C>(item);
349
175
  }
350
176
 
351
177
  public storeEventsForAllTasks() {
352
- for (const task of this.tasks.values()) {
353
- this.storeEvent(task.task.events.beforeRun);
354
- this.storeEvent(task.task.events.afterRun);
355
- this.storeEvent(task.task.events.onError);
356
- }
357
-
358
- for (const resource of this.resources.values()) {
359
- this.storeEvent(resource.resource.events.beforeInit);
360
- this.storeEvent(resource.resource.events.afterInit);
361
- this.storeEvent(resource.resource.events.onError);
362
- }
363
- }
364
-
365
- /**
366
- * This is for storing a resource without a config.
367
- * @param item
368
- */
369
- private prepareResource<C>(
370
- item: IResource<any, any, any>,
371
- config: any
372
- ): IResource<any, any, any> {
373
- item.dependencies =
374
- typeof item.dependencies === "function"
375
- ? item.dependencies(config)
376
- : item.dependencies;
377
-
378
- return item;
379
- }
380
-
381
- private storeTask<C>(item: ITask<any, any, {}>, check = true) {
382
- check && this.checkIfIDExists(item.id);
383
-
384
- item.dependencies =
385
- typeof item.dependencies === "function"
386
- ? item.dependencies()
387
- : item.dependencies;
388
-
389
- this.tasks.set(item.id, {
390
- task: item,
391
- computedDependencies: {},
392
- isInitialized: false,
393
- });
394
- }
395
-
396
- private middlewareAsMap(middleware: IMiddlewareDefinition[]) {
397
- return middleware.reduce((acc, item) => {
398
- acc[item.id] = item;
399
- return acc;
400
- }, {} as Record<string, IMiddlewareDefinition>);
178
+ this.registry.storeEventsForAllTasks();
401
179
  }
402
180
 
403
181
  getDependentNodes(): IDependentNode[] {
404
- const depenedants: IDependentNode[] = [];
405
- for (const task of this.tasks.values()) {
406
- depenedants.push({
407
- id: task.task.id,
408
- dependencies: {
409
- ...task.task.dependencies,
410
- ...this.middlewareAsMap(task.task.middleware),
411
- },
412
- });
413
- }
414
- for (const middleware of this.middlewares.values()) {
415
- depenedants.push({
416
- id: middleware.middleware.id,
417
- dependencies: middleware.middleware.dependencies,
418
- });
419
- }
420
- for (const resource of this.resources.values()) {
421
- depenedants.push({
422
- id: resource.resource.id,
423
- dependencies: {
424
- ...resource.resource.dependencies,
425
- ...this.middlewareAsMap(resource.resource.middleware),
426
- },
427
- });
428
- }
429
-
430
- return depenedants;
182
+ return this.registry.getDependentNodes();
431
183
  }
432
184
  }
@@ -0,0 +1,17 @@
1
+ import { globalResources } from "../globals/globalResources";
2
+ import { requireContextMiddleware } from "../globals/middleware/requireContext.middleware";
3
+ import { retryMiddleware } from "../globals/middleware/retry.middleware";
4
+ import { EventManager } from "./EventManager";
5
+ import { Store } from "./Store";
6
+
7
+ export function getBuiltInResources(eventManager: EventManager, store: Store) {
8
+ return [
9
+ globalResources.eventManager.with(eventManager),
10
+ globalResources.store.with(store),
11
+ globalResources.queue,
12
+ ];
13
+ }
14
+
15
+ export function getBuiltInMiddlewares() {
16
+ return [requireContextMiddleware, retryMiddleware];
17
+ }