@bluelibs/runner 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +231 -12
  2. package/dist/DependencyProcessor.d.ts +2 -2
  3. package/dist/DependencyProcessor.js +3 -3
  4. package/dist/DependencyProcessor.js.map +1 -1
  5. package/dist/EventManager.d.ts +4 -0
  6. package/dist/EventManager.js +15 -0
  7. package/dist/EventManager.js.map +1 -1
  8. package/dist/Store.d.ts +30 -2
  9. package/dist/Store.js +134 -29
  10. package/dist/Store.js.map +1 -1
  11. package/dist/TaskRunner.d.ts +3 -0
  12. package/dist/TaskRunner.js +3 -0
  13. package/dist/TaskRunner.js.map +1 -1
  14. package/dist/define.js +2 -7
  15. package/dist/define.js.map +1 -1
  16. package/dist/defs.d.ts +15 -4
  17. package/dist/errors.d.ts +2 -0
  18. package/dist/errors.js +2 -0
  19. package/dist/errors.js.map +1 -1
  20. package/dist/globalEvents.d.ts +2 -0
  21. package/dist/globalEvents.js +3 -0
  22. package/dist/globalEvents.js.map +1 -1
  23. package/dist/globalResources.d.ts +8 -6
  24. package/dist/globalResources.js +9 -4
  25. package/dist/globalResources.js.map +1 -1
  26. package/dist/index.d.ts +8 -6
  27. package/dist/index.js +3 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/models/DependencyProcessor.d.ts +49 -0
  30. package/dist/models/DependencyProcessor.js +178 -0
  31. package/dist/models/DependencyProcessor.js.map +1 -0
  32. package/dist/models/EventManager.d.ts +17 -0
  33. package/dist/models/EventManager.js +73 -0
  34. package/dist/models/EventManager.js.map +1 -0
  35. package/dist/models/Logger.d.ts +33 -0
  36. package/dist/models/Logger.js +76 -0
  37. package/dist/models/Logger.js.map +1 -0
  38. package/dist/models/ResourceInitializer.d.ts +13 -0
  39. package/dist/models/ResourceInitializer.js +54 -0
  40. package/dist/models/ResourceInitializer.js.map +1 -0
  41. package/dist/models/Store.d.ts +90 -0
  42. package/dist/models/Store.js +302 -0
  43. package/dist/models/Store.js.map +1 -0
  44. package/dist/models/TaskRunner.d.ts +25 -0
  45. package/dist/models/TaskRunner.js +96 -0
  46. package/dist/models/TaskRunner.js.map +1 -0
  47. package/dist/models/index.d.ts +5 -0
  48. package/dist/models/index.js +22 -0
  49. package/dist/models/index.js.map +1 -0
  50. package/dist/run.d.ts +4 -4
  51. package/dist/run.js +14 -7
  52. package/dist/run.js.map +1 -1
  53. package/package.json +1 -2
  54. package/src/__tests__/index.ts +8 -4
  55. package/src/__tests__/{EventManager.test.ts → models/EventManager.test.ts} +20 -2
  56. package/src/__tests__/models/Logger.test.ts +140 -0
  57. package/src/__tests__/{ResourceInitializer.test.ts → models/ResourceInitializer.test.ts} +4 -4
  58. package/src/__tests__/models/Store.test.ts +128 -0
  59. package/src/__tests__/{TaskRunner.test.ts → models/TaskRunner.test.ts} +5 -5
  60. package/src/__tests__/run.overrides.test.ts +392 -0
  61. package/src/__tests__/run.test.ts +28 -1
  62. package/src/define.ts +4 -8
  63. package/src/defs.ts +20 -4
  64. package/src/errors.ts +6 -0
  65. package/src/globalEvents.ts +4 -0
  66. package/src/globalResources.ts +18 -11
  67. package/src/index.ts +3 -3
  68. package/src/{DependencyProcessor.ts → models/DependencyProcessor.ts} +6 -6
  69. package/src/{EventManager.ts → models/EventManager.ts} +21 -1
  70. package/src/models/Logger.ts +100 -0
  71. package/src/{ResourceInitializer.ts → models/ResourceInitializer.ts} +2 -2
  72. package/src/{Store.ts → models/Store.ts} +181 -41
  73. package/src/{TaskRunner.ts → models/TaskRunner.ts} +6 -3
  74. package/src/models/index.ts +5 -0
  75. package/src/run.ts +17 -9
  76. package/src/__tests__/Store.test.ts +0 -143
package/README.md CHANGED
@@ -77,7 +77,7 @@ const app = resource({
77
77
  });
78
78
  ```
79
79
 
80
- ### When to use a task vs a resource.
80
+ ### When to use each?
81
81
 
82
82
  It is unrealistic to create a task for everything you're doing in your system, not only it will be tedious for the developer, but it will affect performance unnecessarily. The idea is to think of a task of something that you want trackable as an action, for example:
83
83
 
@@ -87,6 +87,47 @@ It is unrealistic to create a task for everything you're doing in your system, n
87
87
 
88
88
  Resources are more like services, they are singletons, they are meant to be used as a shared functionality across your application. They can be constants, services, functions, etc.
89
89
 
90
+ ### Resource dispose()
91
+
92
+ Resources can have a `dispose()` method that can be used to clean up resources. This is useful for cleaning up resources like closing database connections, etc. You typically want to use this when you have opened pending connections or you need to do some cleanup or a graceful shutdown.
93
+
94
+ ```ts
95
+ import { task, run, resource } from "@bluelibs/runner";
96
+
97
+ const dbResource = resource({
98
+ async init(config, deps) {
99
+ const db = await connectToDatabase();
100
+ return db;
101
+ },
102
+ async dispose(db, config, deps) {
103
+ return db.close();
104
+ },
105
+ });
106
+ ```
107
+
108
+ If you want to call dispose, you have to do it through the global store.
109
+
110
+ ```ts
111
+ import { task, run, resource, globals } from "@bluelibs/runner";
112
+
113
+ const app = resource({
114
+ id: "app",
115
+ register: [dbResource],
116
+ dependencies: {
117
+ store: globals.resources.store,
118
+ },
119
+ async init(_, deps) {
120
+ return {
121
+ dispose: async () => deps.store.dispose(),
122
+ };
123
+ },
124
+ });
125
+
126
+ const value = await run(app);
127
+ // To begin the disposal process.
128
+ await value.dispose();
129
+ ```
130
+
90
131
  ## Encapsulation
91
132
 
92
133
  We want to make sure that our tasks are not dependent on the outside world. This is why we have the `dependencies` object.
@@ -153,7 +194,7 @@ const root = resource({
153
194
 
154
195
  There are only 2 ways to listen to events:
155
196
 
156
- #### `on` property
197
+ ### `on` property
157
198
 
158
199
  ```ts
159
200
  import { task, run, event } from "@bluelibs/runner";
@@ -184,10 +225,10 @@ const root = resource({
184
225
 
185
226
  ### `hooks` property
186
227
 
187
- This is only for resources
228
+ This can only be applied to a `resource()`.
188
229
 
189
230
  ```ts
190
- import { task, resource, run, event } from "@bluelibs/runner";
231
+ import { task, resource, run, event, global } from "@bluelibs/runner";
191
232
 
192
233
  const afterRegisterEvent = event<{ userId: string }>({
193
234
  id: "app.user.registered",
@@ -196,14 +237,11 @@ const afterRegisterEvent = event<{ userId: string }>({
196
237
  const root = resource({
197
238
  id: "app",
198
239
  register: [afterRegisterEvent],
199
- dependencies: {
200
- // ...
201
- }
240
+ dependencies: {},
202
241
  hooks: [
203
242
  {
204
- event: afterRegisterEvent,
243
+ event: global.events.afterInit,
205
244
  async run(event, deps) {
206
- // the dependencies from init() also arrive inside the hooks()
207
245
  console.log("User has been registered!");
208
246
  },
209
247
  },
@@ -214,6 +252,10 @@ const root = resource({
214
252
  });
215
253
  ```
216
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
+
217
259
  ## Middleware
218
260
 
219
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.
@@ -763,6 +805,7 @@ const securityResource = resource({
763
805
  securityConfigurationPhaseEvent,
764
806
  },
765
807
  async init(config: SecurityOptions) {
808
+ // Give the ability to other listeners to modify the configuration
766
809
  securityConfigurationPhaseEvent(config);
767
810
 
768
811
  return {
@@ -786,11 +829,187 @@ const app = resource({
786
829
  });
787
830
  ```
788
831
 
789
- ## Support
832
+ ## Logging
833
+
834
+ We expose through globals a logger that you can use to log things.
790
835
 
791
- 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/bluelibs).
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
928
+
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
792
1011
 
793
- For feedback or suggestions, please use our [feedback form](https://forms.gle/DTMg5Urgqey9QqLFA).
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).
794
1013
 
795
1014
  ## License
796
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
- processHooks(): void;
32
+ attachHooks(): void;
33
33
  /**
34
34
  * Processes the hooks for resources
35
35
  * @param hooks
36
36
  * @param deps
37
37
  */
38
- processHooksForResource(resourceStoreElement: ResourceStoreElementType<any, any, {}>): void;
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
- processHooks() {
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.processHooksForResource(resource);
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
- processHooksForResource(resourceStoreElement) {
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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"}
@@ -4,8 +4,12 @@ export interface IEventHandlerOptions<T = any> {
4
4
  filter?: (event: IEvent<T>) => boolean;
5
5
  }
6
6
  export declare class EventManager {
7
+ #private;
7
8
  private listeners;
8
9
  private globalListeners;
10
+ get isLocked(): boolean;
11
+ lock(): void;
12
+ checkLock(): void;
9
13
  emit<TInput>(eventDefinition: IEventDefinition<TInput>, ...args: TInput extends void ? [] : [TInput]): Promise<void>;
10
14
  addListener<T>(event: IEventDefinition | Array<IEventDefinition>, handler: EventHandlerType<T>, options?: IEventHandlerOptions<T>): void;
11
15
  addGlobalListener(handler: EventHandlerType, options?: IEventHandlerOptions): void;
@@ -1,10 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventManager = void 0;
4
+ const errors_1 = require("./errors");
4
5
  const HandlerOptionsDefaults = { order: 0 };
5
6
  class EventManager {
6
7
  listeners = new Map();
7
8
  globalListeners = [];
9
+ #isLocked = false;
10
+ get isLocked() {
11
+ return this.#isLocked;
12
+ }
13
+ lock() {
14
+ this.#isLocked = true;
15
+ }
16
+ checkLock() {
17
+ if (this.#isLocked) {
18
+ throw errors_1.Errors.locked("EventManager");
19
+ }
20
+ }
8
21
  async emit(eventDefinition, ...args) {
9
22
  const data = args[0];
10
23
  const eventListeners = this.listeners.get(eventDefinition.id) || [];
@@ -24,6 +37,7 @@ class EventManager {
24
37
  }
25
38
  }
26
39
  addListener(event, handler, options = HandlerOptionsDefaults) {
40
+ this.checkLock();
27
41
  if (Array.isArray(event)) {
28
42
  event.forEach((id) => this.addListener(id, handler, options));
29
43
  }
@@ -40,6 +54,7 @@ class EventManager {
40
54
  }
41
55
  }
42
56
  addGlobalListener(handler, options = HandlerOptionsDefaults) {
57
+ this.checkLock();
43
58
  const newListener = {
44
59
  handler,
45
60
  order: options.order || 0,
@@ -1 +1 @@
1
- {"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":";;;AAEA,MAAM,sBAAsB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAa5C,MAAa,YAAY;IACf,SAAS,GAAoC,IAAI,GAAG,EAAE,CAAC;IACvD,eAAe,GAAuB,EAAE,CAAC;IAEjD,KAAK,CAAC,IAAI,CACR,eAAyC,EACzC,GAAG,IAAyC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,GAAG,cAAc;YACjB,GAAG,IAAI,CAAC,eAAe;SACxB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAW;YACpB,EAAE,EAAE,eAAe,CAAC,EAAE;YACtB,IAAI;SACL,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CACT,KAAiD,EACjD,OAA4B,EAC5B,UAAmC,sBAAsB;QAEzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,WAAW,GAAqB;gBACpC,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;gBACzB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,iBAAiB,CACf,OAAyB,EACzB,UAAgC,sBAAsB;QAEtD,MAAM,WAAW,GAAqB;YACpC,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;YACxC,GAAG,IAAI,CAAC,eAAe;YACvB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,SAA6B;QACjD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF;AApED,oCAoEC"}
1
+ {"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"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"}
package/dist/Store.d.ts CHANGED
@@ -21,16 +21,21 @@ export type EventStoreElementType = {
21
21
  event: IEventDefinition;
22
22
  };
23
23
  /**
24
- * @internal This should be used for testing purposes only.
24
+ * Store class which is used to store all the resources, tasks, middleware and events.
25
25
  */
26
26
  export declare class Store {
27
+ #private;
27
28
  protected readonly eventManager: EventManager;
28
29
  root: ResourceStoreElementType;
29
30
  tasks: Map<string, TaskStoreElementType>;
30
31
  resources: Map<string, ResourceStoreElementType>;
31
32
  events: Map<string, EventStoreElementType>;
32
33
  middlewares: Map<string, MiddlewareStoreElementType>;
34
+ overrides: Map<string, IResource | IMiddleware | ITask>;
33
35
  constructor(eventManager: EventManager);
36
+ get isLocked(): boolean;
37
+ lock(): void;
38
+ checkLock(): void;
34
39
  /**
35
40
  * Store the root before beginning registration
36
41
  * @param root
@@ -42,21 +47,44 @@ export declare class Store {
42
47
  * @param element
43
48
  * @param config
44
49
  */
45
- computeRegisterOfResource<C>(element: IResource<C>, config?: C): void;
50
+ private computeRegistrationDeeply;
51
+ /**
52
+ * @param element
53
+ */
54
+ private storeOverridesDeeply;
46
55
  /**
47
56
  * middlewares are already stored in their final form and the check for them would be redundant
48
57
  * @param id
49
58
  */
50
59
  protected checkIfIDExists(id: string): void | never;
60
+ /**
61
+ * Cleanup
62
+ */
63
+ dispose(): Promise<void>;
64
+ /**
65
+ * When this is called, all overrides should have been stored in the "overrides" store.
66
+ */
67
+ processOverrides(): void;
51
68
  getGlobalMiddlewares(excludingIds: string[]): IMiddleware[];
52
69
  /**
53
70
  * If you want to register something to the store you can use this function.
54
71
  * @param item
55
72
  */
56
73
  storeGenericItem<C>(item: RegisterableItems): void;
74
+ private storeMiddleware;
57
75
  storeEvent<C>(item: IEventDefinition<void>): void;
58
76
  private storeResourceWithConfig;
77
+ /**
78
+ * This is for storing a resource without a config.
79
+ * @param item
80
+ */
59
81
  private storeResource;
82
+ storeEventsForAllTasks(): void;
83
+ /**
84
+ * This is for storing a resource without a config.
85
+ * @param item
86
+ */
87
+ private prepareResource;
60
88
  private storeTask;
61
89
  getDependentNodes(): IDependentNode[];
62
90
  }