@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
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Semaphore = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A semaphore that limits the number of concurrent operations.
|
|
6
|
+
* Used to prevent connection pool exhaustion by limiting concurrent
|
|
7
|
+
* database operations to the pool size.
|
|
8
|
+
*/
|
|
9
|
+
class Semaphore {
|
|
10
|
+
permits;
|
|
11
|
+
waitingQueue = [];
|
|
12
|
+
disposed = false;
|
|
13
|
+
maxPermits;
|
|
14
|
+
constructor(maxPermits) {
|
|
15
|
+
if (maxPermits <= 0) {
|
|
16
|
+
throw new Error("maxPermits must be greater than 0");
|
|
17
|
+
}
|
|
18
|
+
this.permits = maxPermits;
|
|
19
|
+
this.maxPermits = maxPermits;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Acquire a permit. If no permits are available, waits until one becomes available.
|
|
23
|
+
*/
|
|
24
|
+
async acquire(options) {
|
|
25
|
+
if (this.disposed) {
|
|
26
|
+
throw new Error("Semaphore has been disposed");
|
|
27
|
+
}
|
|
28
|
+
if (options?.signal?.aborted) {
|
|
29
|
+
throw new Error("Operation was aborted");
|
|
30
|
+
}
|
|
31
|
+
if (this.permits > 0) {
|
|
32
|
+
this.permits--;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// No permits available, wait in queue
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
const operation = { resolve, reject };
|
|
38
|
+
// Set up timeout if provided
|
|
39
|
+
if (options?.timeout && options.timeout > 0) {
|
|
40
|
+
operation.timeout = setTimeout(() => {
|
|
41
|
+
this.removeFromQueue(operation);
|
|
42
|
+
reject(new Error(`Semaphore acquire timeout after ${options.timeout}ms`));
|
|
43
|
+
}, options.timeout);
|
|
44
|
+
}
|
|
45
|
+
// Set up abort signal if provided
|
|
46
|
+
if (options?.signal) {
|
|
47
|
+
const abortHandler = () => {
|
|
48
|
+
this.removeFromQueue(operation);
|
|
49
|
+
reject(new Error("Operation was aborted"));
|
|
50
|
+
};
|
|
51
|
+
options.signal.addEventListener("abort", abortHandler, { once: true });
|
|
52
|
+
// Clean up the abort listener when operation completes
|
|
53
|
+
const originalResolve = operation.resolve;
|
|
54
|
+
const originalReject = operation.reject;
|
|
55
|
+
operation.resolve = () => {
|
|
56
|
+
options.signal.removeEventListener("abort", abortHandler);
|
|
57
|
+
originalResolve();
|
|
58
|
+
};
|
|
59
|
+
operation.reject = (error) => {
|
|
60
|
+
options.signal.removeEventListener("abort", abortHandler);
|
|
61
|
+
originalReject(error);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
this.waitingQueue.push(operation);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Release a permit, allowing waiting operations to proceed.
|
|
69
|
+
*/
|
|
70
|
+
release() {
|
|
71
|
+
if (this.disposed) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (this.waitingQueue.length > 0) {
|
|
75
|
+
// Give permit directly to next waiting operation
|
|
76
|
+
const nextOperation = this.waitingQueue.shift();
|
|
77
|
+
// Clear timeout if it exists
|
|
78
|
+
if (nextOperation.timeout) {
|
|
79
|
+
clearTimeout(nextOperation.timeout);
|
|
80
|
+
}
|
|
81
|
+
nextOperation.resolve();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// No one waiting, increment available permits (but don't exceed max)
|
|
85
|
+
this.permits = Math.min(this.permits + 1, this.maxPermits);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
removeFromQueue(operation) {
|
|
89
|
+
const index = this.waitingQueue.indexOf(operation);
|
|
90
|
+
if (index !== -1) {
|
|
91
|
+
this.waitingQueue.splice(index, 1);
|
|
92
|
+
// Clear timeout if it exists
|
|
93
|
+
if (operation.timeout) {
|
|
94
|
+
clearTimeout(operation.timeout);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Execute a function with a permit, automatically releasing it afterwards.
|
|
100
|
+
*/
|
|
101
|
+
async withPermit(fn, options) {
|
|
102
|
+
await this.acquire(options);
|
|
103
|
+
try {
|
|
104
|
+
return await fn();
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
this.release();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Dispose the semaphore, rejecting all waiting operations and preventing new ones.
|
|
112
|
+
*/
|
|
113
|
+
dispose() {
|
|
114
|
+
if (this.disposed) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.disposed = true;
|
|
118
|
+
// Reject all waiting operations
|
|
119
|
+
while (this.waitingQueue.length > 0) {
|
|
120
|
+
const operation = this.waitingQueue.shift();
|
|
121
|
+
// Clear timeout if it exists
|
|
122
|
+
if (operation.timeout) {
|
|
123
|
+
clearTimeout(operation.timeout);
|
|
124
|
+
}
|
|
125
|
+
operation.reject(new Error("Semaphore has been disposed"));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get current number of available permits (for debugging)
|
|
130
|
+
*/
|
|
131
|
+
getAvailablePermits() {
|
|
132
|
+
return this.permits;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get current number of waiting operations (for debugging)
|
|
136
|
+
*/
|
|
137
|
+
getWaitingCount() {
|
|
138
|
+
return this.waitingQueue.length;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get maximum number of permits
|
|
142
|
+
*/
|
|
143
|
+
getMaxPermits() {
|
|
144
|
+
return this.maxPermits;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if the semaphore has been disposed
|
|
148
|
+
*/
|
|
149
|
+
isDisposed() {
|
|
150
|
+
return this.disposed;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get metrics about the current state of the semaphore
|
|
154
|
+
*/
|
|
155
|
+
getMetrics() {
|
|
156
|
+
return {
|
|
157
|
+
availablePermits: this.permits,
|
|
158
|
+
waitingCount: this.waitingQueue.length,
|
|
159
|
+
maxPermits: this.maxPermits,
|
|
160
|
+
utilization: (this.maxPermits - this.permits) / this.maxPermits,
|
|
161
|
+
disposed: this.disposed,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.Semaphore = Semaphore;
|
|
166
|
+
//# sourceMappingURL=Semaphore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Semaphore.js","sourceRoot":"","sources":["../../src/models/Semaphore.ts"],"names":[],"mappings":"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"}
|
package/dist/models/Store.d.ts
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IResource, RegisterableItems, IMiddleware } from "../defs";
|
|
2
2
|
import { IDependentNode } from "../tools/findCircularDependencies";
|
|
3
3
|
import { EventManager } from "./EventManager";
|
|
4
4
|
import { Logger } from "./Logger";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
computedDependencies?: DependencyValuesType<D>;
|
|
8
|
-
config: C;
|
|
9
|
-
value: V;
|
|
10
|
-
isInitialized?: boolean;
|
|
11
|
-
};
|
|
12
|
-
export type TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any, TOn extends "*" | IEventDefinition | undefined = any> = {
|
|
13
|
-
task: ITask<Input, Output, D, TOn>;
|
|
14
|
-
computedDependencies: DependencyValuesType<D>;
|
|
15
|
-
isInitialized: boolean;
|
|
16
|
-
};
|
|
17
|
-
export type MiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
|
|
18
|
-
middleware: IMiddleware<TDeps>;
|
|
19
|
-
computedDependencies: DependencyValuesType<TDeps>;
|
|
20
|
-
};
|
|
21
|
-
export type EventStoreElementType = {
|
|
22
|
-
event: IEventDefinition;
|
|
23
|
-
};
|
|
5
|
+
import { ResourceStoreElementType, TaskStoreElementType, MiddlewareStoreElementType, EventStoreElementType } from "./StoreTypes";
|
|
6
|
+
export { ResourceStoreElementType, TaskStoreElementType, MiddlewareStoreElementType, EventStoreElementType, };
|
|
24
7
|
/**
|
|
25
8
|
* Store class which is used to store all the resources, tasks, middleware and events.
|
|
26
9
|
*/
|
|
@@ -29,68 +12,30 @@ export declare class Store {
|
|
|
29
12
|
protected readonly eventManager: EventManager;
|
|
30
13
|
protected readonly logger: Logger;
|
|
31
14
|
root: ResourceStoreElementType;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
15
|
+
private registry;
|
|
16
|
+
private overrideManager;
|
|
17
|
+
private validator;
|
|
18
|
+
constructor(eventManager: EventManager, logger: Logger);
|
|
19
|
+
get tasks(): Map<string, TaskStoreElementType>;
|
|
20
|
+
get resources(): Map<string, ResourceStoreElementType>;
|
|
21
|
+
get events(): Map<string, EventStoreElementType>;
|
|
22
|
+
get middlewares(): Map<string, MiddlewareStoreElementType>;
|
|
23
|
+
get overrides(): Map<string, IResource<void, any, any, any> | import("../defs").IResourceWithConfig<any, any, any> | import("../defs").ITask<any, any, {}, undefined> | IMiddleware<any, any>>;
|
|
24
|
+
get overrideRequests(): Set<{
|
|
41
25
|
source: string;
|
|
42
26
|
override: RegisterableItems;
|
|
43
27
|
}>;
|
|
44
|
-
constructor(eventManager: EventManager, logger: Logger);
|
|
45
28
|
get isLocked(): boolean;
|
|
46
29
|
lock(): void;
|
|
47
30
|
checkLock(): void;
|
|
31
|
+
private registerGlobalComponents;
|
|
32
|
+
private setupRootResource;
|
|
48
33
|
initializeStore(root: IResource<any>, config: any): void;
|
|
49
|
-
private runSanityChecks;
|
|
50
|
-
/**
|
|
51
|
-
* Beginning with the root, we perform registering to the container all the resources, tasks, middleware and events.
|
|
52
|
-
* @param element
|
|
53
|
-
* @param config
|
|
54
|
-
*/
|
|
55
|
-
private computeRegistrationDeeply;
|
|
56
|
-
/**
|
|
57
|
-
* @param element
|
|
58
|
-
*/
|
|
59
|
-
private storeOverridesDeeply;
|
|
60
|
-
/**
|
|
61
|
-
* middlewares are already stored in their final form and the check for them would be redundant
|
|
62
|
-
* @param id
|
|
63
|
-
*/
|
|
64
|
-
protected checkIfIDExists(id: string): void | never;
|
|
65
|
-
/**
|
|
66
|
-
* Cleanup
|
|
67
|
-
*/
|
|
68
34
|
dispose(): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* When this is called, all overrides should have been stored in the "overrides" store.
|
|
71
|
-
*/
|
|
72
35
|
processOverrides(): void;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
* If you want to register something to the store you can use this function.
|
|
76
|
-
* @param item
|
|
77
|
-
*/
|
|
36
|
+
getEverywhereMiddlewareForTasks(excludingIds: string[]): IMiddleware[];
|
|
37
|
+
getEverywhereMiddlewareForResources(excludingIds: string[]): IMiddleware[];
|
|
78
38
|
storeGenericItem<C>(item: RegisterableItems): void;
|
|
79
|
-
private storeMiddleware;
|
|
80
|
-
storeEvent<C>(item: IEventDefinition<void>): void;
|
|
81
|
-
private storeResourceWithConfig;
|
|
82
|
-
/**
|
|
83
|
-
* This is for storing a resource without a config.
|
|
84
|
-
* @param item
|
|
85
|
-
*/
|
|
86
|
-
private storeResource;
|
|
87
39
|
storeEventsForAllTasks(): void;
|
|
88
|
-
/**
|
|
89
|
-
* This is for storing a resource without a config.
|
|
90
|
-
* @param item
|
|
91
|
-
*/
|
|
92
|
-
private prepareResource;
|
|
93
|
-
private storeTask;
|
|
94
|
-
private middlewareAsMap;
|
|
95
40
|
getDependentNodes(): IDependentNode[];
|
|
96
41
|
}
|
package/dist/models/Store.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Store = void 0;
|
|
4
|
-
const
|
|
5
|
-
const utils = require("../define");
|
|
6
|
-
const globalEvents_1 = require("../globalEvents");
|
|
4
|
+
const globalEvents_1 = require("../globals/globalEvents");
|
|
7
5
|
const errors_1 = require("../errors");
|
|
8
|
-
const
|
|
6
|
+
const StoreRegistry_1 = require("./StoreRegistry");
|
|
7
|
+
const OverrideManager_1 = require("./OverrideManager");
|
|
8
|
+
const StoreConstants_1 = require("./StoreConstants");
|
|
9
9
|
/**
|
|
10
10
|
* Store class which is used to store all the resources, tasks, middleware and events.
|
|
11
11
|
*/
|
|
@@ -13,20 +13,36 @@ class Store {
|
|
|
13
13
|
eventManager;
|
|
14
14
|
logger;
|
|
15
15
|
root;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
middlewares = new Map();
|
|
20
|
-
overrides = new Map();
|
|
21
|
-
/**
|
|
22
|
-
* This is because we can have multiple overrides at once, and the final override is the one that is used.
|
|
23
|
-
*/
|
|
24
|
-
overrideRequests = new Set();
|
|
16
|
+
registry;
|
|
17
|
+
overrideManager;
|
|
18
|
+
validator;
|
|
25
19
|
#isLocked = false;
|
|
26
20
|
#isInitialized = false;
|
|
27
21
|
constructor(eventManager, logger) {
|
|
28
22
|
this.eventManager = eventManager;
|
|
29
23
|
this.logger = logger;
|
|
24
|
+
this.registry = new StoreRegistry_1.StoreRegistry();
|
|
25
|
+
this.validator = this.registry.getValidator();
|
|
26
|
+
this.overrideManager = new OverrideManager_1.OverrideManager(this.registry);
|
|
27
|
+
}
|
|
28
|
+
// Delegate properties to registry
|
|
29
|
+
get tasks() {
|
|
30
|
+
return this.registry.tasks;
|
|
31
|
+
}
|
|
32
|
+
get resources() {
|
|
33
|
+
return this.registry.resources;
|
|
34
|
+
}
|
|
35
|
+
get events() {
|
|
36
|
+
return this.registry.events;
|
|
37
|
+
}
|
|
38
|
+
get middlewares() {
|
|
39
|
+
return this.registry.middlewares;
|
|
40
|
+
}
|
|
41
|
+
get overrides() {
|
|
42
|
+
return this.overrideManager.overrides;
|
|
43
|
+
}
|
|
44
|
+
get overrideRequests() {
|
|
45
|
+
return this.overrideManager.overrideRequests;
|
|
30
46
|
}
|
|
31
47
|
get isLocked() {
|
|
32
48
|
return this.#isLocked;
|
|
@@ -40,12 +56,26 @@ class Store {
|
|
|
40
56
|
throw new Error("Cannot modify the Store when it is locked.");
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
59
|
+
registerGlobalComponents() {
|
|
60
|
+
// Register built-in resources
|
|
61
|
+
const builtInResources = (0, StoreConstants_1.getBuiltInResources)(this.eventManager, this);
|
|
62
|
+
builtInResources.forEach((resource) => {
|
|
63
|
+
this.registry.storeGenericItem(resource);
|
|
64
|
+
});
|
|
65
|
+
// Register global events
|
|
66
|
+
globalEvents_1.globalEventsArray.forEach((event) => {
|
|
67
|
+
this.registry.storeEvent(event);
|
|
68
|
+
});
|
|
69
|
+
// Register built-in middlewares
|
|
70
|
+
const builtInMiddlewares = (0, StoreConstants_1.getBuiltInMiddlewares)();
|
|
71
|
+
builtInMiddlewares.forEach((middleware) => {
|
|
72
|
+
this.registry.middlewares.set(middleware.id, {
|
|
73
|
+
middleware,
|
|
74
|
+
computedDependencies: {},
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
setupRootResource(root, config) {
|
|
49
79
|
root.dependencies =
|
|
50
80
|
typeof root.dependencies === "function"
|
|
51
81
|
? root.dependencies(config)
|
|
@@ -56,275 +86,47 @@ class Store {
|
|
|
56
86
|
config,
|
|
57
87
|
value: undefined,
|
|
58
88
|
isInitialized: false,
|
|
89
|
+
context: {},
|
|
59
90
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.storeEvent(event);
|
|
63
|
-
});
|
|
64
|
-
this.computeRegistrationDeeply(root, config);
|
|
65
|
-
this.resources.set(root.id, this.root);
|
|
66
|
-
this.runSanityChecks();
|
|
67
|
-
for (const resource of this.resources.values()) {
|
|
68
|
-
this.storeOverridesDeeply(resource.resource);
|
|
69
|
-
}
|
|
70
|
-
this.#isInitialized = true;
|
|
91
|
+
this.registry.computeRegistrationDeeply(root, config);
|
|
92
|
+
this.registry.resources.set(root.id, this.root);
|
|
71
93
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (!this.middlewares.has(middleware.id)) {
|
|
76
|
-
throw errors_1.Errors.dependencyNotFound(`Middleware ${middleware.id} in Task ${task.task.id}`);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Beginning with the root, we perform registering to the container all the resources, tasks, middleware and events.
|
|
83
|
-
* @param element
|
|
84
|
-
* @param config
|
|
85
|
-
*/
|
|
86
|
-
computeRegistrationDeeply(element, config) {
|
|
87
|
-
const items = typeof element.register === "function"
|
|
88
|
-
? element.register(config)
|
|
89
|
-
: element.register;
|
|
90
|
-
// if it was a computed function ensure the registered terms are stored, not the function.
|
|
91
|
-
element.register = items;
|
|
92
|
-
for (const item of items) {
|
|
93
|
-
// will call registration if it detects another resource.
|
|
94
|
-
this.storeGenericItem(item);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* @param element
|
|
99
|
-
*/
|
|
100
|
-
storeOverridesDeeply(element) {
|
|
101
|
-
element.overrides.forEach((override) => {
|
|
102
|
-
// We go deeply for resources, because we want to store all the overrides first
|
|
103
|
-
// the one on top has priority of setting the last override.
|
|
104
|
-
if (utils.isResource(override)) {
|
|
105
|
-
this.storeOverridesDeeply(override);
|
|
106
|
-
}
|
|
107
|
-
let id;
|
|
108
|
-
if (utils.isResourceWithConfig(override)) {
|
|
109
|
-
this.storeOverridesDeeply(override.resource);
|
|
110
|
-
id = override.resource.id;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
id = override.id;
|
|
114
|
-
}
|
|
115
|
-
this.overrideRequests.add({ source: element.id, override });
|
|
116
|
-
this.overrides.set(id, override);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* middlewares are already stored in their final form and the check for them would be redundant
|
|
121
|
-
* @param id
|
|
122
|
-
*/
|
|
123
|
-
checkIfIDExists(id) {
|
|
124
|
-
if (this.tasks.has(id)) {
|
|
125
|
-
throw errors_1.Errors.duplicateRegistration("Task", id);
|
|
126
|
-
}
|
|
127
|
-
if (this.resources.has(id)) {
|
|
128
|
-
throw errors_1.Errors.duplicateRegistration("Resource", id);
|
|
129
|
-
}
|
|
130
|
-
if (this.events.has(id)) {
|
|
131
|
-
throw errors_1.Errors.duplicateRegistration("Event", id);
|
|
94
|
+
initializeStore(root, config) {
|
|
95
|
+
if (this.#isInitialized) {
|
|
96
|
+
throw errors_1.Errors.storeAlreadyInitialized();
|
|
132
97
|
}
|
|
133
|
-
|
|
134
|
-
|
|
98
|
+
this.registerGlobalComponents();
|
|
99
|
+
this.setupRootResource(root, config);
|
|
100
|
+
this.validator.runSanityChecks();
|
|
101
|
+
for (const resource of this.resources.values()) {
|
|
102
|
+
this.overrideManager.storeOverridesDeeply(resource.resource);
|
|
135
103
|
}
|
|
104
|
+
this.#isInitialized = true;
|
|
136
105
|
}
|
|
137
|
-
/**
|
|
138
|
-
* Cleanup
|
|
139
|
-
*/
|
|
140
106
|
async dispose() {
|
|
141
107
|
for (const resource of this.resources.values()) {
|
|
142
108
|
if (resource.resource.dispose) {
|
|
143
|
-
await resource.resource.dispose(resource.value, resource.config, resource.computedDependencies);
|
|
109
|
+
await resource.resource.dispose(resource.value, resource.config, resource.computedDependencies, resource.context);
|
|
144
110
|
}
|
|
145
111
|
}
|
|
146
112
|
}
|
|
147
|
-
/**
|
|
148
|
-
* When this is called, all overrides should have been stored in the "overrides" store.
|
|
149
|
-
*/
|
|
150
113
|
processOverrides() {
|
|
151
|
-
|
|
152
|
-
for (const override of this.overrides.values()) {
|
|
153
|
-
let hasAnyItem = false;
|
|
154
|
-
if (utils.isTask(override)) {
|
|
155
|
-
hasAnyItem = this.tasks.has(override.id);
|
|
156
|
-
}
|
|
157
|
-
else if (utils.isResource(override)) {
|
|
158
|
-
hasAnyItem = this.resources.has(override.id);
|
|
159
|
-
}
|
|
160
|
-
else if (utils.isMiddleware(override)) {
|
|
161
|
-
hasAnyItem = this.middlewares.has(override.id);
|
|
162
|
-
}
|
|
163
|
-
else if (utils.isResourceWithConfig(override)) {
|
|
164
|
-
hasAnyItem = this.resources.has(override.resource.id);
|
|
165
|
-
}
|
|
166
|
-
if (!hasAnyItem) {
|
|
167
|
-
const id = utils.isResourceWithConfig(override)
|
|
168
|
-
? override.resource.id
|
|
169
|
-
: override.id;
|
|
170
|
-
throw errors_1.Errors.dependencyNotFound(id);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
for (const override of this.overrides.values()) {
|
|
174
|
-
if (utils.isTask(override)) {
|
|
175
|
-
this.storeTask(override, false);
|
|
176
|
-
}
|
|
177
|
-
else if (utils.isResource(override)) {
|
|
178
|
-
this.storeResource(override, false);
|
|
179
|
-
}
|
|
180
|
-
else if (utils.isMiddleware(override)) {
|
|
181
|
-
this.storeMiddleware(override, false);
|
|
182
|
-
}
|
|
183
|
-
else if (utils.isResourceWithConfig(override)) {
|
|
184
|
-
this.storeResourceWithConfig(override, false);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
114
|
+
this.overrideManager.processOverrides();
|
|
187
115
|
}
|
|
188
|
-
|
|
189
|
-
return
|
|
190
|
-
.filter((x) => x.middleware[defs_1.symbols.middlewareGlobal])
|
|
191
|
-
.filter((x) => !excludingIds.includes(x.middleware.id))
|
|
192
|
-
.map((x) => x.middleware);
|
|
116
|
+
getEverywhereMiddlewareForTasks(excludingIds) {
|
|
117
|
+
return this.registry.getEverywhereMiddlewareForTasks(excludingIds);
|
|
193
118
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
* @param item
|
|
197
|
-
*/
|
|
198
|
-
storeGenericItem(item) {
|
|
199
|
-
if (utils.isTask(item)) {
|
|
200
|
-
this.storeTask(item);
|
|
201
|
-
}
|
|
202
|
-
else if (utils.isResource(item)) {
|
|
203
|
-
// Registration a simple resource, which is interpreted as a resource with no configuration.
|
|
204
|
-
this.storeResource(item);
|
|
205
|
-
}
|
|
206
|
-
else if (utils.isEvent(item)) {
|
|
207
|
-
this.storeEvent(item);
|
|
208
|
-
}
|
|
209
|
-
else if (utils.isMiddleware(item)) {
|
|
210
|
-
this.storeMiddleware(item);
|
|
211
|
-
}
|
|
212
|
-
else if (utils.isResourceWithConfig(item)) {
|
|
213
|
-
this.storeResourceWithConfig(item);
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
throw errors_1.Errors.unknownItemType(item);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
storeMiddleware(item, check = true) {
|
|
220
|
-
check && this.checkIfIDExists(item.id);
|
|
221
|
-
item.dependencies =
|
|
222
|
-
typeof item.dependencies === "function"
|
|
223
|
-
? item.dependencies()
|
|
224
|
-
: item.dependencies;
|
|
225
|
-
this.middlewares.set(item.id, {
|
|
226
|
-
middleware: item,
|
|
227
|
-
computedDependencies: {},
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
storeEvent(item) {
|
|
231
|
-
this.checkIfIDExists(item.id);
|
|
232
|
-
this.events.set(item.id, { event: item });
|
|
233
|
-
}
|
|
234
|
-
storeResourceWithConfig(item, check = true) {
|
|
235
|
-
check && this.checkIfIDExists(item.resource.id);
|
|
236
|
-
this.prepareResource(item.resource, item.config);
|
|
237
|
-
this.resources.set(item.resource.id, {
|
|
238
|
-
resource: item.resource,
|
|
239
|
-
config: item.config,
|
|
240
|
-
value: undefined,
|
|
241
|
-
isInitialized: false,
|
|
242
|
-
});
|
|
243
|
-
this.computeRegistrationDeeply(item.resource, item.config);
|
|
119
|
+
getEverywhereMiddlewareForResources(excludingIds) {
|
|
120
|
+
return this.registry.getEverywhereMiddlewareForResources(excludingIds);
|
|
244
121
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
* @param item
|
|
248
|
-
*/
|
|
249
|
-
storeResource(item, check = true) {
|
|
250
|
-
check && this.checkIfIDExists(item.id);
|
|
251
|
-
this.prepareResource(item, {});
|
|
252
|
-
this.resources.set(item.id, {
|
|
253
|
-
resource: item,
|
|
254
|
-
config: {},
|
|
255
|
-
value: undefined,
|
|
256
|
-
isInitialized: false,
|
|
257
|
-
});
|
|
258
|
-
this.computeRegistrationDeeply(item, {});
|
|
122
|
+
storeGenericItem(item) {
|
|
123
|
+
return this.registry.storeGenericItem(item);
|
|
259
124
|
}
|
|
260
125
|
storeEventsForAllTasks() {
|
|
261
|
-
|
|
262
|
-
this.storeEvent(task.task.events.beforeRun);
|
|
263
|
-
this.storeEvent(task.task.events.afterRun);
|
|
264
|
-
this.storeEvent(task.task.events.onError);
|
|
265
|
-
}
|
|
266
|
-
for (const resource of this.resources.values()) {
|
|
267
|
-
this.storeEvent(resource.resource.events.beforeInit);
|
|
268
|
-
this.storeEvent(resource.resource.events.afterInit);
|
|
269
|
-
this.storeEvent(resource.resource.events.onError);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* This is for storing a resource without a config.
|
|
274
|
-
* @param item
|
|
275
|
-
*/
|
|
276
|
-
prepareResource(item, config) {
|
|
277
|
-
item.dependencies =
|
|
278
|
-
typeof item.dependencies === "function"
|
|
279
|
-
? item.dependencies(config)
|
|
280
|
-
: item.dependencies;
|
|
281
|
-
return item;
|
|
282
|
-
}
|
|
283
|
-
storeTask(item, check = true) {
|
|
284
|
-
check && this.checkIfIDExists(item.id);
|
|
285
|
-
item.dependencies =
|
|
286
|
-
typeof item.dependencies === "function"
|
|
287
|
-
? item.dependencies()
|
|
288
|
-
: item.dependencies;
|
|
289
|
-
this.tasks.set(item.id, {
|
|
290
|
-
task: item,
|
|
291
|
-
computedDependencies: {},
|
|
292
|
-
isInitialized: false,
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
middlewareAsMap(middleware) {
|
|
296
|
-
return middleware.reduce((acc, item) => {
|
|
297
|
-
acc[item.id] = item;
|
|
298
|
-
return acc;
|
|
299
|
-
}, {});
|
|
126
|
+
this.registry.storeEventsForAllTasks();
|
|
300
127
|
}
|
|
301
128
|
getDependentNodes() {
|
|
302
|
-
|
|
303
|
-
for (const task of this.tasks.values()) {
|
|
304
|
-
depenedants.push({
|
|
305
|
-
id: task.task.id,
|
|
306
|
-
dependencies: {
|
|
307
|
-
...task.task.dependencies,
|
|
308
|
-
...this.middlewareAsMap(task.task.middleware),
|
|
309
|
-
},
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
for (const middleware of this.middlewares.values()) {
|
|
313
|
-
depenedants.push({
|
|
314
|
-
id: middleware.middleware.id,
|
|
315
|
-
dependencies: middleware.middleware.dependencies,
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
for (const resource of this.resources.values()) {
|
|
319
|
-
depenedants.push({
|
|
320
|
-
id: resource.resource.id,
|
|
321
|
-
dependencies: {
|
|
322
|
-
...resource.resource.dependencies,
|
|
323
|
-
...this.middlewareAsMap(resource.resource.middleware),
|
|
324
|
-
},
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
return depenedants;
|
|
129
|
+
return this.registry.getDependentNodes();
|
|
328
130
|
}
|
|
329
131
|
}
|
|
330
132
|
exports.Store = Store;
|