@bluelibs/runner 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -13
- package/dist/DependencyProcessor.d.ts +2 -2
- package/dist/DependencyProcessor.js +3 -3
- package/dist/DependencyProcessor.js.map +1 -1
- package/dist/Store.d.ts +24 -1
- package/dist/Store.js +108 -34
- package/dist/Store.js.map +1 -1
- package/dist/TaskRunner.d.ts +3 -0
- package/dist/TaskRunner.js +3 -0
- package/dist/TaskRunner.js.map +1 -1
- package/dist/define.js +1 -0
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +6 -4
- package/dist/globalEvents.d.ts +2 -0
- package/dist/globalEvents.js +3 -0
- package/dist/globalEvents.js.map +1 -1
- package/dist/globalResources.d.ts +5 -3
- package/dist/globalResources.js +4 -0
- package/dist/globalResources.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.d.ts +49 -0
- package/dist/models/DependencyProcessor.js +178 -0
- package/dist/models/DependencyProcessor.js.map +1 -0
- package/dist/models/EventManager.d.ts +17 -0
- package/dist/models/EventManager.js +73 -0
- package/dist/models/EventManager.js.map +1 -0
- package/dist/models/Logger.d.ts +33 -0
- package/dist/models/Logger.js +76 -0
- package/dist/models/Logger.js.map +1 -0
- package/dist/models/ResourceInitializer.d.ts +13 -0
- package/dist/models/ResourceInitializer.js +54 -0
- package/dist/models/ResourceInitializer.js.map +1 -0
- package/dist/models/Store.d.ts +90 -0
- package/dist/models/Store.js +302 -0
- package/dist/models/Store.js.map +1 -0
- package/dist/models/TaskRunner.d.ts +25 -0
- package/dist/models/TaskRunner.js +96 -0
- package/dist/models/TaskRunner.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.js +22 -0
- package/dist/models/index.js.map +1 -0
- package/dist/run.d.ts +3 -3
- package/dist/run.js +12 -6
- package/dist/run.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/index.ts +8 -4
- package/src/__tests__/{EventManager.test.ts → models/EventManager.test.ts} +3 -3
- package/src/__tests__/models/Logger.test.ts +140 -0
- package/src/__tests__/{ResourceInitializer.test.ts → models/ResourceInitializer.test.ts} +4 -4
- package/src/__tests__/{Store.test.ts → models/Store.test.ts} +4 -4
- package/src/__tests__/{TaskRunner.test.ts → models/TaskRunner.test.ts} +5 -5
- package/src/__tests__/run.overrides.test.ts +392 -0
- package/src/define.ts +3 -0
- package/src/defs.ts +7 -4
- package/src/globalEvents.ts +4 -0
- package/src/globalResources.ts +8 -3
- package/src/index.ts +3 -3
- package/src/{DependencyProcessor.ts → models/DependencyProcessor.ts} +6 -6
- package/src/{EventManager.ts → models/EventManager.ts} +2 -2
- package/src/models/Logger.ts +100 -0
- package/src/{ResourceInitializer.ts → models/ResourceInitializer.ts} +2 -2
- package/src/{Store.ts → models/Store.ts} +145 -47
- package/src/{TaskRunner.ts → models/TaskRunner.ts} +6 -3
- package/src/models/index.ts +5 -0
- package/src/run.ts +13 -7
package/README.md
CHANGED
|
@@ -108,13 +108,13 @@ const dbResource = resource({
|
|
|
108
108
|
If you want to call dispose, you have to do it through the global store.
|
|
109
109
|
|
|
110
110
|
```ts
|
|
111
|
-
import { task, run, resource,
|
|
111
|
+
import { task, run, resource, globals } from "@bluelibs/runner";
|
|
112
112
|
|
|
113
113
|
const app = resource({
|
|
114
114
|
id: "app",
|
|
115
115
|
register: [dbResource],
|
|
116
116
|
dependencies: {
|
|
117
|
-
store:
|
|
117
|
+
store: globals.resources.store,
|
|
118
118
|
},
|
|
119
119
|
async init(_, deps) {
|
|
120
120
|
return {
|
|
@@ -194,7 +194,7 @@ const root = resource({
|
|
|
194
194
|
|
|
195
195
|
There are only 2 ways to listen to events:
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
### `on` property
|
|
198
198
|
|
|
199
199
|
```ts
|
|
200
200
|
import { task, run, event } from "@bluelibs/runner";
|
|
@@ -225,10 +225,10 @@ const root = resource({
|
|
|
225
225
|
|
|
226
226
|
### `hooks` property
|
|
227
227
|
|
|
228
|
-
This
|
|
228
|
+
This can only be applied to a `resource()`.
|
|
229
229
|
|
|
230
230
|
```ts
|
|
231
|
-
import { task, resource, run, event } from "@bluelibs/runner";
|
|
231
|
+
import { task, resource, run, event, global } from "@bluelibs/runner";
|
|
232
232
|
|
|
233
233
|
const afterRegisterEvent = event<{ userId: string }>({
|
|
234
234
|
id: "app.user.registered",
|
|
@@ -237,14 +237,11 @@ const afterRegisterEvent = event<{ userId: string }>({
|
|
|
237
237
|
const root = resource({
|
|
238
238
|
id: "app",
|
|
239
239
|
register: [afterRegisterEvent],
|
|
240
|
-
dependencies: {
|
|
241
|
-
// ...
|
|
242
|
-
}
|
|
240
|
+
dependencies: {},
|
|
243
241
|
hooks: [
|
|
244
242
|
{
|
|
245
|
-
event:
|
|
243
|
+
event: global.events.afterInit,
|
|
246
244
|
async run(event, deps) {
|
|
247
|
-
// the dependencies from init() also arrive inside the hooks()
|
|
248
245
|
console.log("User has been registered!");
|
|
249
246
|
},
|
|
250
247
|
},
|
|
@@ -255,6 +252,10 @@ const root = resource({
|
|
|
255
252
|
});
|
|
256
253
|
```
|
|
257
254
|
|
|
255
|
+
When using hooks, inside resource() you benefit of autocompletion, in order to keep things clean, if your hooks become large and long consider switching to tasks and `on`. This is a more explicit way to listen to events, and your resource registers them.
|
|
256
|
+
|
|
257
|
+
The hooks from a `resource` are mostly used for configuration, and blending in the system.
|
|
258
|
+
|
|
258
259
|
## Middleware
|
|
259
260
|
|
|
260
261
|
Middleware is a way to intercept the execution of tasks. It's a powerful way to add additional functionality to your tasks. First middleware that gets registered is the first that runs, the last middleware that runs is 'closest' to the task, most likely the last element inside `middleware` array at task level.
|
|
@@ -804,6 +805,7 @@ const securityResource = resource({
|
|
|
804
805
|
securityConfigurationPhaseEvent,
|
|
805
806
|
},
|
|
806
807
|
async init(config: SecurityOptions) {
|
|
808
|
+
// Give the ability to other listeners to modify the configuration
|
|
807
809
|
securityConfigurationPhaseEvent(config);
|
|
808
810
|
|
|
809
811
|
return {
|
|
@@ -827,11 +829,187 @@ const app = resource({
|
|
|
827
829
|
});
|
|
828
830
|
```
|
|
829
831
|
|
|
830
|
-
##
|
|
832
|
+
## Logging
|
|
833
|
+
|
|
834
|
+
We expose through globals a logger that you can use to log things.
|
|
835
|
+
|
|
836
|
+
By default logs are not printed unless a resource listens to the log event. This is by design, when something is logged an event is emitted. You can listen to this event and print the logs.
|
|
837
|
+
|
|
838
|
+
```ts
|
|
839
|
+
import { task, run, event, globals } from "@bluelibs/runner";
|
|
840
|
+
|
|
841
|
+
const helloWorld = task({
|
|
842
|
+
id: "app.helloWorld",
|
|
843
|
+
dependencies: {
|
|
844
|
+
logger: globals.resources.logger,
|
|
845
|
+
},
|
|
846
|
+
run: async (_, { logger }) => {
|
|
847
|
+
await logger.info("Hello World!");
|
|
848
|
+
// or logger.log(level, data);
|
|
849
|
+
},
|
|
850
|
+
});
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
### Logs Summary Table
|
|
854
|
+
|
|
855
|
+
| Log Level | Description | Usage Example |
|
|
856
|
+
| ------------ | ----------------------------------------- | -------------------------------------- |
|
|
857
|
+
| **trace** | Very detailed logs, usually for debugging | "Entering function X with params Y." |
|
|
858
|
+
| **debug** | Detailed debug information | "Fetching user data: userId=123." |
|
|
859
|
+
| **info** | General application information | "Service started on port 8080." |
|
|
860
|
+
| **warn** | Indicates a potential issue | "Disk space running low." |
|
|
861
|
+
| **error** | Indicates a significant problem | "Unable to connect to database." |
|
|
862
|
+
| **critical** | Serious problem causing a crash | "System out of memory, shutting down." |
|
|
863
|
+
|
|
864
|
+
### Print logs
|
|
865
|
+
|
|
866
|
+
Logs don't get printed by default in this system.
|
|
867
|
+
|
|
868
|
+
```ts
|
|
869
|
+
import { task, run, event, globals, resource } from "@bluelibs/runner";
|
|
870
|
+
|
|
871
|
+
const printLog = task({
|
|
872
|
+
id: "app.task.printLog",
|
|
873
|
+
on: globals.events.log,
|
|
874
|
+
dependencies: {
|
|
875
|
+
logger: globals.resources.logger,
|
|
876
|
+
},
|
|
877
|
+
run: async (event, { logger }) => {
|
|
878
|
+
logger.print(event);
|
|
879
|
+
},
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
const app = resource({
|
|
883
|
+
id: "root",
|
|
884
|
+
register: [printLog],
|
|
885
|
+
});
|
|
886
|
+
|
|
887
|
+
// Now your app will print all logs
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
You can in theory do it in `hooks` as well, but as specified `hooks` are mostly used for configuration and blending in the system.
|
|
891
|
+
|
|
892
|
+
The logger's `log()` function is async as it works with events. If you don't want your system hanging on logs, simply omit the `await`
|
|
893
|
+
|
|
894
|
+
## Overrides
|
|
895
|
+
|
|
896
|
+
Previously, we explored how we can extend functionality through events. However, sometimes you want to override a resource with a new one or simply swap out a task or a middleware that you import from another package and they don't offer the ability.
|
|
897
|
+
|
|
898
|
+
```ts
|
|
899
|
+
import { resource, run, event } from "@bluelibs/runner";
|
|
900
|
+
|
|
901
|
+
// This example is for resources but override works for tasks, events, and middleware as well.
|
|
902
|
+
const securityResource = resource({
|
|
903
|
+
id: "app.security",
|
|
904
|
+
async init() {
|
|
905
|
+
// returns a security service
|
|
906
|
+
},
|
|
907
|
+
});
|
|
908
|
+
|
|
909
|
+
const override = resource({
|
|
910
|
+
...securityResource,
|
|
911
|
+
init: async () => {
|
|
912
|
+
// a new and custom service
|
|
913
|
+
},
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
const app = resource({
|
|
917
|
+
id: "app",
|
|
918
|
+
register: [securityResource], // this resource might be registered by any element in the dependency tree.
|
|
919
|
+
overrides: [override],
|
|
920
|
+
});
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
Now the `securityResource` will be overriden by the new one and whenever it's used it will use the new one.
|
|
924
|
+
|
|
925
|
+
Overrides can only happen once and only if the overriden resource is registered. If two resources try to override the same resource, an error will be thrown.
|
|
926
|
+
|
|
927
|
+
## Testing
|
|
831
928
|
|
|
832
|
-
|
|
929
|
+
### Unit Testing
|
|
930
|
+
|
|
931
|
+
You can easily test your resources and tasks by running them in a test environment.
|
|
932
|
+
|
|
933
|
+
The only bits that you need to test are the `run` function and the `init` functions with the propper dependencies.
|
|
934
|
+
|
|
935
|
+
```ts
|
|
936
|
+
import { task, resource } from "@bluelibs/runner";
|
|
937
|
+
|
|
938
|
+
const helloWorld = task({
|
|
939
|
+
id: "app.helloWorld",
|
|
940
|
+
run: async () => {
|
|
941
|
+
return "Hello World!";
|
|
942
|
+
},
|
|
943
|
+
});
|
|
944
|
+
|
|
945
|
+
const helloWorldResource = resource({
|
|
946
|
+
id: "app.helloWorldResource",
|
|
947
|
+
init: async () => {
|
|
948
|
+
return "Hello World!";
|
|
949
|
+
},
|
|
950
|
+
});
|
|
951
|
+
|
|
952
|
+
// sample tests for the task
|
|
953
|
+
describe("app.helloWorld", () => {
|
|
954
|
+
it("should return Hello World!", async () => {
|
|
955
|
+
const result = await helloWorld.run(input, dependencies); // pass in the arguments and the mocked dependencies.
|
|
956
|
+
expect(result).toBe("Hello World!");
|
|
957
|
+
});
|
|
958
|
+
});
|
|
959
|
+
|
|
960
|
+
// sample tests for the resource
|
|
961
|
+
describe("app.helloWorldResource", () => {
|
|
962
|
+
it("should return Hello World!", async () => {
|
|
963
|
+
const result = await helloWorldResource.init(config, dependencies); // pass in the arguments and the mocked dependencies.
|
|
964
|
+
expect(result).toBe("Hello World!");
|
|
965
|
+
});
|
|
966
|
+
});
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
### Integration
|
|
970
|
+
|
|
971
|
+
Unit testing can be very simply with mocks, since all dependencies are explicit. However, if you would like to run an integration test, and have a task be tested and within the full container.
|
|
972
|
+
|
|
973
|
+
```ts
|
|
974
|
+
import { task, resource, run, global } from "@bluelibs/runner";
|
|
975
|
+
|
|
976
|
+
const task = task({
|
|
977
|
+
id: "app.myTask",
|
|
978
|
+
run: async () => {
|
|
979
|
+
return "Hello World!";
|
|
980
|
+
},
|
|
981
|
+
});
|
|
982
|
+
|
|
983
|
+
const app = resource({
|
|
984
|
+
id: "app",
|
|
985
|
+
register: [myTask],
|
|
986
|
+
});
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
Then your tests can now be cleaner:
|
|
990
|
+
|
|
991
|
+
```ts
|
|
992
|
+
describe("app", () => {
|
|
993
|
+
it("an example to override a task or resource", async () => {
|
|
994
|
+
const testApp = resource({
|
|
995
|
+
id: "app.test",
|
|
996
|
+
register: [myApp], // wrap your existing app
|
|
997
|
+
overrides: [override], // apply the overrides
|
|
998
|
+
init: async (_, deps) => {
|
|
999
|
+
// you can now test a task simply by depending on it, and running it, then asserting the response of run()
|
|
1000
|
+
},
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
// Same concept applies for resources as well.
|
|
1004
|
+
|
|
1005
|
+
await run(testApp);
|
|
1006
|
+
});
|
|
1007
|
+
});
|
|
1008
|
+
```
|
|
1009
|
+
|
|
1010
|
+
## Support
|
|
833
1011
|
|
|
834
|
-
|
|
1012
|
+
This package is part of the [BlueLibs](https://www.bluelibs.com) family. If you enjoy this work, please show your support by starring [the main repository](https://github.com/bluelibs/runner).
|
|
835
1013
|
|
|
836
1014
|
## License
|
|
837
1015
|
|
|
@@ -29,13 +29,13 @@ export declare class DependencyProcessor {
|
|
|
29
29
|
* Processes all hooks, should run before emission of any event.
|
|
30
30
|
* @returns
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
attachHooks(): void;
|
|
33
33
|
/**
|
|
34
34
|
* Processes the hooks for resources
|
|
35
35
|
* @param hooks
|
|
36
36
|
* @param deps
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
attachHooksToResource(resourceStoreElement: ResourceStoreElementType<any, any, {}>): void;
|
|
39
39
|
extractDependencies<T extends DependencyMapType>(map: T): Promise<DependencyValuesType<T>>;
|
|
40
40
|
extractDependency(object: any): Promise<any>;
|
|
41
41
|
/**
|
|
@@ -76,11 +76,11 @@ class DependencyProcessor {
|
|
|
76
76
|
* Processes all hooks, should run before emission of any event.
|
|
77
77
|
* @returns
|
|
78
78
|
*/
|
|
79
|
-
|
|
79
|
+
attachHooks() {
|
|
80
80
|
// iterate through resources and send them to processHooks
|
|
81
81
|
for (const resource of this.store.resources.values()) {
|
|
82
82
|
if (resource.resource.hooks) {
|
|
83
|
-
this.
|
|
83
|
+
this.attachHooksToResource(resource);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -89,7 +89,7 @@ class DependencyProcessor {
|
|
|
89
89
|
* @param hooks
|
|
90
90
|
* @param deps
|
|
91
91
|
*/
|
|
92
|
-
|
|
92
|
+
attachHooksToResource(resourceStoreElement) {
|
|
93
93
|
let hooks = resourceStoreElement.resource.hooks;
|
|
94
94
|
if (typeof hooks === "function") {
|
|
95
95
|
hooks = hooks(resourceStoreElement.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../src/DependencyProcessor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../src/DependencyProcessor.ts"],"names":[],"mappings":"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"}
|
package/dist/Store.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare class Store {
|
|
|
31
31
|
resources: Map<string, ResourceStoreElementType>;
|
|
32
32
|
events: Map<string, EventStoreElementType>;
|
|
33
33
|
middlewares: Map<string, MiddlewareStoreElementType>;
|
|
34
|
+
overrides: Map<string, IResource | IMiddleware | ITask>;
|
|
34
35
|
constructor(eventManager: EventManager);
|
|
35
36
|
get isLocked(): boolean;
|
|
36
37
|
lock(): void;
|
|
@@ -46,22 +47,44 @@ export declare class Store {
|
|
|
46
47
|
* @param element
|
|
47
48
|
* @param config
|
|
48
49
|
*/
|
|
49
|
-
private
|
|
50
|
+
private computeRegistrationDeeply;
|
|
51
|
+
/**
|
|
52
|
+
* @param element
|
|
53
|
+
*/
|
|
54
|
+
private storeOverridesDeeply;
|
|
50
55
|
/**
|
|
51
56
|
* middlewares are already stored in their final form and the check for them would be redundant
|
|
52
57
|
* @param id
|
|
53
58
|
*/
|
|
54
59
|
protected checkIfIDExists(id: string): void | never;
|
|
60
|
+
/**
|
|
61
|
+
* Cleanup
|
|
62
|
+
*/
|
|
55
63
|
dispose(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* When this is called, all overrides should have been stored in the "overrides" store.
|
|
66
|
+
*/
|
|
67
|
+
processOverrides(): void;
|
|
56
68
|
getGlobalMiddlewares(excludingIds: string[]): IMiddleware[];
|
|
57
69
|
/**
|
|
58
70
|
* If you want to register something to the store you can use this function.
|
|
59
71
|
* @param item
|
|
60
72
|
*/
|
|
61
73
|
storeGenericItem<C>(item: RegisterableItems): void;
|
|
74
|
+
private storeMiddleware;
|
|
62
75
|
storeEvent<C>(item: IEventDefinition<void>): void;
|
|
63
76
|
private storeResourceWithConfig;
|
|
77
|
+
/**
|
|
78
|
+
* This is for storing a resource without a config.
|
|
79
|
+
* @param item
|
|
80
|
+
*/
|
|
64
81
|
private storeResource;
|
|
82
|
+
storeEventsForAllTasks(): void;
|
|
83
|
+
/**
|
|
84
|
+
* This is for storing a resource without a config.
|
|
85
|
+
* @param item
|
|
86
|
+
*/
|
|
87
|
+
private prepareResource;
|
|
65
88
|
private storeTask;
|
|
66
89
|
getDependentNodes(): IDependentNode[];
|
|
67
90
|
}
|
package/dist/Store.js
CHANGED
|
@@ -16,6 +16,7 @@ class Store {
|
|
|
16
16
|
resources = new Map();
|
|
17
17
|
events = new Map();
|
|
18
18
|
middlewares = new Map();
|
|
19
|
+
overrides = new Map();
|
|
19
20
|
#isLocked = false;
|
|
20
21
|
#isInitialized = false;
|
|
21
22
|
constructor(eventManager) {
|
|
@@ -27,11 +28,6 @@ class Store {
|
|
|
27
28
|
lock() {
|
|
28
29
|
this.#isLocked = true;
|
|
29
30
|
this.eventManager.lock();
|
|
30
|
-
// freeze the maps so they can't be modified
|
|
31
|
-
Object.freeze(this.tasks);
|
|
32
|
-
Object.freeze(this.resources);
|
|
33
|
-
Object.freeze(this.events);
|
|
34
|
-
Object.freeze(this.middlewares);
|
|
35
31
|
}
|
|
36
32
|
checkLock() {
|
|
37
33
|
if (this.#isLocked) {
|
|
@@ -64,8 +60,11 @@ class Store {
|
|
|
64
60
|
globalEvents_1.globalEventsArray.forEach((event) => {
|
|
65
61
|
this.storeEvent(event);
|
|
66
62
|
});
|
|
67
|
-
this.
|
|
63
|
+
this.computeRegistrationDeeply(root, config);
|
|
68
64
|
this.resources.set(root.id, this.root);
|
|
65
|
+
for (const resource of this.resources.values()) {
|
|
66
|
+
this.storeOverridesDeeply(resource.resource);
|
|
67
|
+
}
|
|
69
68
|
this.#isInitialized = true;
|
|
70
69
|
}
|
|
71
70
|
/**
|
|
@@ -73,14 +72,31 @@ class Store {
|
|
|
73
72
|
* @param element
|
|
74
73
|
* @param config
|
|
75
74
|
*/
|
|
76
|
-
|
|
75
|
+
computeRegistrationDeeply(element, config) {
|
|
77
76
|
const items = typeof element.register === "function"
|
|
78
77
|
? element.register(config)
|
|
79
78
|
: element.register;
|
|
80
79
|
for (const item of items) {
|
|
80
|
+
// will call registration if it detects another resource.
|
|
81
81
|
this.storeGenericItem(item);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* @param element
|
|
86
|
+
*/
|
|
87
|
+
storeOverridesDeeply(element) {
|
|
88
|
+
element.overrides.forEach((override) => {
|
|
89
|
+
try {
|
|
90
|
+
this.checkIfIDExists(override.id);
|
|
91
|
+
}
|
|
92
|
+
catch (e) { }
|
|
93
|
+
if (utils.isResource(override)) {
|
|
94
|
+
this.storeOverridesDeeply(override);
|
|
95
|
+
}
|
|
96
|
+
// the one on top has priority of setting the last override.
|
|
97
|
+
this.overrides.set(override.id, override);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
84
100
|
/**
|
|
85
101
|
* middlewares are already stored in their final form and the check for them would be redundant
|
|
86
102
|
* @param id
|
|
@@ -95,7 +111,13 @@ class Store {
|
|
|
95
111
|
if (this.events.has(id)) {
|
|
96
112
|
throw errors_1.Errors.duplicateRegistration("Event", id);
|
|
97
113
|
}
|
|
114
|
+
if (this.middlewares.has(id)) {
|
|
115
|
+
throw errors_1.Errors.duplicateRegistration("Middleware", id);
|
|
116
|
+
}
|
|
98
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Cleanup
|
|
120
|
+
*/
|
|
99
121
|
async dispose() {
|
|
100
122
|
for (const resource of this.resources.values()) {
|
|
101
123
|
if (resource.resource.dispose) {
|
|
@@ -103,6 +125,38 @@ class Store {
|
|
|
103
125
|
}
|
|
104
126
|
}
|
|
105
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* When this is called, all overrides should have been stored in the "overrides" store.
|
|
130
|
+
*/
|
|
131
|
+
processOverrides() {
|
|
132
|
+
// checks if all overrides are overriding something that is previously registered
|
|
133
|
+
for (const override of this.overrides.values()) {
|
|
134
|
+
let hasAnyItem = false;
|
|
135
|
+
if (utils.isTask(override)) {
|
|
136
|
+
hasAnyItem = this.tasks.has(override.id);
|
|
137
|
+
}
|
|
138
|
+
else if (utils.isResource(override)) {
|
|
139
|
+
hasAnyItem = this.resources.has(override.id);
|
|
140
|
+
}
|
|
141
|
+
else if (utils.isMiddleware(override)) {
|
|
142
|
+
hasAnyItem = this.middlewares.has(override.id);
|
|
143
|
+
}
|
|
144
|
+
if (!hasAnyItem) {
|
|
145
|
+
throw errors_1.Errors.dependencyNotFound(override.id);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
for (const override of this.overrides.values()) {
|
|
149
|
+
if (utils.isTask(override)) {
|
|
150
|
+
this.storeTask(override, false);
|
|
151
|
+
}
|
|
152
|
+
else if (utils.isResource(override)) {
|
|
153
|
+
this.storeResource(override, false);
|
|
154
|
+
}
|
|
155
|
+
else if (utils.isMiddleware(override)) {
|
|
156
|
+
this.storeMiddleware(override, false);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
106
160
|
getGlobalMiddlewares(excludingIds) {
|
|
107
161
|
return Array.from(this.middlewares.values())
|
|
108
162
|
.filter((x) => x.middleware[defs_1.symbols.middlewareGlobal])
|
|
@@ -125,17 +179,7 @@ class Store {
|
|
|
125
179
|
this.storeEvent(item);
|
|
126
180
|
}
|
|
127
181
|
else if (utils.isMiddleware(item)) {
|
|
128
|
-
|
|
129
|
-
throw errors_1.Errors.duplicateRegistration("Middleware", item.id);
|
|
130
|
-
}
|
|
131
|
-
item.dependencies =
|
|
132
|
-
typeof item.dependencies === "function"
|
|
133
|
-
? item.dependencies()
|
|
134
|
-
: item.dependencies;
|
|
135
|
-
this.middlewares.set(item.id, {
|
|
136
|
-
middleware: item,
|
|
137
|
-
computedDependencies: {},
|
|
138
|
-
});
|
|
182
|
+
this.storeMiddleware(item);
|
|
139
183
|
}
|
|
140
184
|
else if (utils.isResourceWithConfig(item)) {
|
|
141
185
|
this.storeResourceWithConfig(item);
|
|
@@ -144,46 +188,76 @@ class Store {
|
|
|
144
188
|
throw errors_1.Errors.unknownItemType(item);
|
|
145
189
|
}
|
|
146
190
|
}
|
|
191
|
+
storeMiddleware(item, check = true) {
|
|
192
|
+
check && this.checkIfIDExists(item.id);
|
|
193
|
+
item.dependencies =
|
|
194
|
+
typeof item.dependencies === "function"
|
|
195
|
+
? item.dependencies()
|
|
196
|
+
: item.dependencies;
|
|
197
|
+
this.middlewares.set(item.id, {
|
|
198
|
+
middleware: item,
|
|
199
|
+
computedDependencies: {},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
147
202
|
storeEvent(item) {
|
|
148
203
|
this.checkIfIDExists(item.id);
|
|
149
204
|
this.events.set(item.id, { event: item });
|
|
150
205
|
}
|
|
151
206
|
storeResourceWithConfig(item) {
|
|
152
207
|
this.checkIfIDExists(item.resource.id);
|
|
208
|
+
this.prepareResource(item.resource, item.config);
|
|
153
209
|
this.resources.set(item.resource.id, {
|
|
154
210
|
resource: item.resource,
|
|
155
211
|
config: item.config,
|
|
156
212
|
value: undefined,
|
|
157
213
|
isInitialized: false,
|
|
158
214
|
});
|
|
159
|
-
this.
|
|
215
|
+
this.computeRegistrationDeeply(item.resource, item.config);
|
|
160
216
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
item.
|
|
167
|
-
|
|
168
|
-
? item.dependencies()
|
|
169
|
-
: item.dependencies;
|
|
217
|
+
/**
|
|
218
|
+
* This is for storing a resource without a config.
|
|
219
|
+
* @param item
|
|
220
|
+
*/
|
|
221
|
+
storeResource(item, check = true) {
|
|
222
|
+
check && this.checkIfIDExists(item.id);
|
|
223
|
+
this.prepareResource(item, {});
|
|
170
224
|
this.resources.set(item.id, {
|
|
171
225
|
resource: item,
|
|
172
226
|
config: {},
|
|
173
227
|
value: undefined,
|
|
174
228
|
isInitialized: false,
|
|
175
229
|
});
|
|
176
|
-
this.
|
|
230
|
+
this.computeRegistrationDeeply(item, {});
|
|
177
231
|
}
|
|
178
|
-
|
|
179
|
-
this.
|
|
232
|
+
storeEventsForAllTasks() {
|
|
233
|
+
for (const task of this.tasks.values()) {
|
|
234
|
+
this.storeEvent(task.task.events.beforeRun);
|
|
235
|
+
this.storeEvent(task.task.events.afterRun);
|
|
236
|
+
this.storeEvent(task.task.events.onError);
|
|
237
|
+
}
|
|
238
|
+
for (const resource of this.resources.values()) {
|
|
239
|
+
this.storeEvent(resource.resource.events.beforeInit);
|
|
240
|
+
this.storeEvent(resource.resource.events.afterInit);
|
|
241
|
+
this.storeEvent(resource.resource.events.onError);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* This is for storing a resource without a config.
|
|
246
|
+
* @param item
|
|
247
|
+
*/
|
|
248
|
+
prepareResource(item, config) {
|
|
249
|
+
item.dependencies =
|
|
250
|
+
typeof item.dependencies === "function"
|
|
251
|
+
? item.dependencies(config)
|
|
252
|
+
: item.dependencies;
|
|
253
|
+
return item;
|
|
254
|
+
}
|
|
255
|
+
storeTask(item, check = true) {
|
|
256
|
+
check && this.checkIfIDExists(item.id);
|
|
180
257
|
item.dependencies =
|
|
181
258
|
typeof item.dependencies === "function"
|
|
182
259
|
? item.dependencies()
|
|
183
260
|
: item.dependencies;
|
|
184
|
-
this.storeEvent(item.events.beforeRun);
|
|
185
|
-
this.storeEvent(item.events.afterRun);
|
|
186
|
-
this.storeEvent(item.events.onError);
|
|
187
261
|
this.tasks.set(item.id, {
|
|
188
262
|
task: item,
|
|
189
263
|
computedDependencies: {},
|
package/dist/Store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../src/Store.ts"],"names":[],"mappings":";;;AAAA,iCAWgB;AAChB,kCAAkC;AAElC,iDAAmD;AACnD,qCAAkC;AAClC,uDAAoD;AAoCpD;;GAEG;AACH,MAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../src/Store.ts"],"names":[],"mappings":"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"}
|
package/dist/TaskRunner.d.ts
CHANGED
|
@@ -9,6 +9,9 @@ export declare class TaskRunner {
|
|
|
9
9
|
/**
|
|
10
10
|
* 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.
|
|
11
11
|
* This function can throw only if any of the event listeners or run function throws
|
|
12
|
+
* @param task the task to be run
|
|
13
|
+
* @param input the input to be passed to the task
|
|
14
|
+
* @param taskDependencies optional dependencies to be passed to the task, if not provided, the dependencies will be the ones already computed from the store.
|
|
12
15
|
*/
|
|
13
16
|
run<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>, input: TInput, taskDependencies?: DependencyValuesType<TDeps>): Promise<TOutput | undefined>;
|
|
14
17
|
/**
|