@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.
- package/README.md +1315 -942
- package/dist/common.types.d.ts +20 -0
- package/dist/common.types.js +4 -0
- package/dist/common.types.js.map +1 -0
- package/dist/context.d.ts +34 -0
- package/dist/context.js +58 -0
- package/dist/context.js.map +1 -0
- package/dist/define.d.ts +22 -3
- package/dist/define.js +52 -8
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +52 -31
- package/dist/defs.js +10 -2
- package/dist/defs.js.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/event.types.d.ts +18 -0
- package/dist/event.types.js +4 -0
- package/dist/event.types.js.map +1 -0
- package/dist/examples/registrator-example.d.ts +122 -0
- package/dist/examples/registrator-example.js +147 -0
- package/dist/examples/registrator-example.js.map +1 -0
- package/dist/globals/globalEvents.d.ts +41 -0
- package/dist/globals/globalEvents.js +94 -0
- package/dist/globals/globalEvents.js.map +1 -0
- package/dist/globals/globalMiddleware.d.ts +23 -0
- package/dist/globals/globalMiddleware.js +15 -0
- package/dist/globals/globalMiddleware.js.map +1 -0
- package/dist/globals/globalResources.d.ts +27 -0
- package/dist/globals/globalResources.js +47 -0
- package/dist/globals/globalResources.js.map +1 -0
- package/dist/globals/middleware/cache.middleware.d.ts +34 -0
- package/dist/globals/middleware/cache.middleware.js +85 -0
- package/dist/globals/middleware/cache.middleware.js.map +1 -0
- package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
- package/dist/globals/middleware/requireContext.middleware.js +25 -0
- package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
- package/dist/globals/middleware/retry.middleware.d.ts +20 -0
- package/dist/globals/middleware/retry.middleware.js +34 -0
- package/dist/globals/middleware/retry.middleware.js.map +1 -0
- package/dist/globals/resources/queue.resource.d.ts +7 -0
- package/dist/globals/resources/queue.resource.js +31 -0
- package/dist/globals/resources/queue.resource.js.map +1 -0
- package/dist/index.d.ts +45 -9
- package/dist/index.js +14 -9
- package/dist/index.js.map +1 -1
- package/dist/middleware.types.d.ts +40 -0
- package/dist/middleware.types.js +4 -0
- package/dist/middleware.types.js.map +1 -0
- package/dist/models/DependencyProcessor.d.ts +2 -1
- package/dist/models/DependencyProcessor.js +11 -13
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/EventManager.d.ts +5 -0
- package/dist/models/EventManager.js +44 -2
- package/dist/models/EventManager.js.map +1 -1
- package/dist/models/Logger.d.ts +30 -12
- package/dist/models/Logger.js +130 -42
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/OverrideManager.d.ts +13 -0
- package/dist/models/OverrideManager.js +70 -0
- package/dist/models/OverrideManager.js.map +1 -0
- package/dist/models/Queue.d.ts +25 -0
- package/dist/models/Queue.js +54 -0
- package/dist/models/Queue.js.map +1 -0
- package/dist/models/ResourceInitializer.d.ts +5 -2
- package/dist/models/ResourceInitializer.js +20 -14
- package/dist/models/ResourceInitializer.js.map +1 -1
- package/dist/models/Semaphore.d.ts +61 -0
- package/dist/models/Semaphore.js +166 -0
- package/dist/models/Semaphore.js.map +1 -0
- package/dist/models/Store.d.ts +17 -72
- package/dist/models/Store.js +71 -269
- package/dist/models/Store.js.map +1 -1
- package/dist/models/StoreConstants.d.ts +11 -0
- package/dist/models/StoreConstants.js +18 -0
- package/dist/models/StoreConstants.js.map +1 -0
- package/dist/models/StoreRegistry.d.ts +25 -0
- package/dist/models/StoreRegistry.js +171 -0
- package/dist/models/StoreRegistry.js.map +1 -0
- package/dist/models/StoreTypes.d.ts +21 -0
- package/dist/models/StoreTypes.js +3 -0
- package/dist/models/StoreTypes.js.map +1 -0
- package/dist/models/StoreValidator.d.ts +10 -0
- package/dist/models/StoreValidator.js +41 -0
- package/dist/models/StoreValidator.js.map +1 -0
- package/dist/models/TaskRunner.js +39 -24
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/models/VarStore.d.ts +17 -0
- package/dist/models/VarStore.js +60 -0
- package/dist/models/VarStore.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -1
- package/dist/resource.types.d.ts +31 -0
- package/dist/resource.types.js +3 -0
- package/dist/resource.types.js.map +1 -0
- package/dist/run.d.ts +4 -1
- package/dist/run.js +6 -3
- package/dist/run.js.map +1 -1
- package/dist/symbols.d.ts +24 -0
- package/dist/symbols.js +29 -0
- package/dist/symbols.js.map +1 -0
- package/dist/task.types.d.ts +55 -0
- package/dist/task.types.js +23 -0
- package/dist/task.types.js.map +1 -0
- package/dist/tools/registratorId.d.ts +4 -0
- package/dist/tools/registratorId.js +40 -0
- package/dist/tools/registratorId.js.map +1 -0
- package/dist/tools/simpleHash.d.ts +9 -0
- package/dist/tools/simpleHash.js +34 -0
- package/dist/tools/simpleHash.js.map +1 -0
- package/dist/types/base-interfaces.d.ts +18 -0
- package/dist/types/base-interfaces.js +6 -0
- package/dist/types/base-interfaces.js.map +1 -0
- package/dist/types/base.d.ts +13 -0
- package/dist/types/base.js +3 -0
- package/dist/types/base.js.map +1 -0
- package/dist/types/dependencies.d.ts +22 -0
- package/dist/types/dependencies.js +3 -0
- package/dist/types/dependencies.js.map +1 -0
- package/dist/types/dependency-core.d.ts +14 -0
- package/dist/types/dependency-core.js +5 -0
- package/dist/types/dependency-core.js.map +1 -0
- package/dist/types/events.d.ts +52 -0
- package/dist/types/events.js +6 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/hooks.d.ts +16 -0
- package/dist/types/hooks.js +5 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/meta.d.ts +13 -0
- package/dist/types/meta.js +5 -0
- package/dist/types/meta.js.map +1 -0
- package/dist/types/middleware.d.ts +38 -0
- package/dist/types/middleware.js +6 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/registerable.d.ts +10 -0
- package/dist/types/registerable.js +5 -0
- package/dist/types/registerable.js.map +1 -0
- package/dist/types/resources.d.ts +44 -0
- package/dist/types/resources.js +5 -0
- package/dist/types/resources.js.map +1 -0
- package/dist/types/symbols.d.ts +24 -0
- package/dist/types/symbols.js +30 -0
- package/dist/types/symbols.js.map +1 -0
- package/dist/types/tasks.d.ts +41 -0
- package/dist/types/tasks.js +5 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/types/utilities.d.ts +7 -0
- package/dist/types/utilities.js +5 -0
- package/dist/types/utilities.js.map +1 -0
- package/package.json +10 -6
- package/src/__tests__/benchmark/benchmark.test.ts +1 -1
- package/src/__tests__/context.test.ts +91 -0
- package/src/__tests__/errors.test.ts +8 -5
- package/src/__tests__/globalEvents.test.ts +1 -1
- package/src/__tests__/globals/cache.middleware.test.ts +772 -0
- package/src/__tests__/globals/queue.resource.test.ts +141 -0
- package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
- package/src/__tests__/globals/retry.middleware.test.ts +157 -0
- package/src/__tests__/index.helper.test.ts +55 -0
- package/src/__tests__/models/EventManager.test.ts +144 -0
- package/src/__tests__/models/Logger.test.ts +291 -34
- package/src/__tests__/models/Queue.test.ts +189 -0
- package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
- package/src/__tests__/models/Semaphore.test.ts +713 -0
- package/src/__tests__/models/Store.test.ts +40 -0
- package/src/__tests__/models/TaskRunner.test.ts +86 -5
- package/src/__tests__/run.middleware.test.ts +166 -12
- package/src/__tests__/run.overrides.test.ts +13 -10
- package/src/__tests__/run.test.ts +363 -12
- package/src/__tests__/setOutput.test.ts +244 -0
- package/src/__tests__/tools/getCallerFile.test.ts +9 -9
- package/src/__tests__/typesafety.test.ts +54 -39
- package/src/context.ts +86 -0
- package/src/define.ts +84 -14
- package/src/defs.ts +91 -41
- package/src/errors.ts +3 -1
- package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
- package/src/globals/globalMiddleware.ts +14 -0
- package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
- package/src/globals/middleware/cache.middleware.ts +115 -0
- package/src/globals/middleware/requireContext.middleware.ts +36 -0
- package/src/globals/middleware/retry.middleware.ts +56 -0
- package/src/globals/resources/queue.resource.ts +34 -0
- package/src/index.ts +9 -5
- package/src/models/DependencyProcessor.ts +36 -40
- package/src/models/EventManager.ts +45 -5
- package/src/models/Logger.ts +170 -48
- package/src/models/OverrideManager.ts +84 -0
- package/src/models/Queue.ts +66 -0
- package/src/models/ResourceInitializer.ts +38 -20
- package/src/models/Semaphore.ts +208 -0
- package/src/models/Store.ts +94 -342
- package/src/models/StoreConstants.ts +17 -0
- package/src/models/StoreRegistry.ts +217 -0
- package/src/models/StoreTypes.ts +46 -0
- package/src/models/StoreValidator.ts +38 -0
- package/src/models/TaskRunner.ts +53 -40
- package/src/models/index.ts +3 -0
- package/src/run.ts +7 -4
- package/src/__tests__/index.ts +0 -15
- package/src/examples/express-mongo/index.ts +0 -1
package/src/models/Store.ts
CHANGED
|
@@ -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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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
|
-
|
|
121
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
151
|
-
|
|
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
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
-
|
|
275
|
-
|
|
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
|
-
|
|
295
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|