@bluelibs/runner 1.5.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +299 -156
  2. package/dist/define.d.ts +1 -1
  3. package/dist/define.js +0 -1
  4. package/dist/define.js.map +1 -1
  5. package/dist/defs.d.ts +12 -8
  6. package/dist/globalEvents.js +45 -0
  7. package/dist/globalEvents.js.map +1 -1
  8. package/dist/globalResources.js +14 -0
  9. package/dist/globalResources.js.map +1 -1
  10. package/dist/models/DependencyProcessor.d.ts +1 -7
  11. package/dist/models/DependencyProcessor.js +31 -54
  12. package/dist/models/DependencyProcessor.js.map +1 -1
  13. package/dist/models/EventManager.d.ts +4 -0
  14. package/dist/models/EventManager.js.map +1 -1
  15. package/dist/models/ResourceInitializer.js +4 -2
  16. package/dist/models/ResourceInitializer.js.map +1 -1
  17. package/dist/models/Store.d.ts +2 -2
  18. package/dist/models/Store.js +2 -0
  19. package/dist/models/Store.js.map +1 -1
  20. package/dist/models/TaskRunner.js +28 -16
  21. package/dist/models/TaskRunner.js.map +1 -1
  22. package/dist/run.js +1 -1
  23. package/dist/run.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/__tests__/benchmark/benchmark.test.ts +9 -7
  26. package/src/__tests__/errors.test.ts +0 -13
  27. package/src/__tests__/globalEvents.test.ts +53 -28
  28. package/src/__tests__/index.ts +0 -1
  29. package/src/__tests__/models/EventManager.test.ts +1 -0
  30. package/src/__tests__/run.test.ts +140 -109
  31. package/src/__tests__/typesafety.test.ts +17 -16
  32. package/src/define.ts +3 -4
  33. package/src/defs.ts +35 -22
  34. package/src/globalEvents.ts +53 -0
  35. package/src/globalResources.ts +17 -0
  36. package/src/models/DependencyProcessor.ts +45 -80
  37. package/src/models/EventManager.ts +4 -0
  38. package/src/models/ResourceInitializer.ts +4 -2
  39. package/src/models/Store.ts +6 -2
  40. package/src/models/TaskRunner.ts +51 -28
  41. package/src/run.ts +1 -1
  42. package/dist/DependencyProcessor.d.ts +0 -49
  43. package/dist/DependencyProcessor.js +0 -178
  44. package/dist/DependencyProcessor.js.map +0 -1
  45. package/dist/EventManager.d.ts +0 -17
  46. package/dist/EventManager.js +0 -73
  47. package/dist/EventManager.js.map +0 -1
  48. package/dist/ResourceInitializer.d.ts +0 -13
  49. package/dist/ResourceInitializer.js +0 -54
  50. package/dist/ResourceInitializer.js.map +0 -1
  51. package/dist/Store.d.ts +0 -90
  52. package/dist/Store.js +0 -291
  53. package/dist/Store.js.map +0 -1
  54. package/dist/TaskRunner.d.ts +0 -25
  55. package/dist/TaskRunner.js +0 -96
  56. package/dist/TaskRunner.js.map +0 -1
  57. package/src/__tests__/run.hooks.test.ts +0 -110
@@ -23,30 +23,55 @@ describe("Global Events", () => {
23
23
  },
24
24
  });
25
25
 
26
+ const taskBeforeInit = defineTask({
27
+ id: "task.beforeInit",
28
+ on: globalEvents.beforeInit,
29
+ run: globalBeforeInitHandler,
30
+ });
31
+
32
+ const taskAfterInit = defineTask({
33
+ id: "task.afterInit",
34
+ on: globalEvents.afterInit,
35
+ run: globalAfterInitHandler,
36
+ });
37
+
38
+ const taskBeforeRun = defineTask({
39
+ id: "task.beforeRun",
40
+ on: globalEvents.tasks.beforeRun,
41
+ run: globalTaskBeforeRunHandler,
42
+ });
43
+
44
+ const taskAfterRun = defineTask({
45
+ id: "task.afterRun",
46
+ on: globalEvents.tasks.afterRun,
47
+ run: globalTaskAfterRunHandler,
48
+ });
49
+
50
+ const resourceBeforeInit = defineTask({
51
+ id: "resource.beforeInit",
52
+ on: globalEvents.resources.beforeInit,
53
+ run: globalResourceBeforeInitHandler,
54
+ });
55
+
56
+ const resourceAfterInit = defineTask({
57
+ id: "resource.afterInit",
58
+ on: globalEvents.resources.afterInit,
59
+ run: globalResourceAfterInitHandler,
60
+ });
61
+
26
62
  const app = defineResource({
27
63
  id: "app",
28
- register: [testResource, testTask],
29
- dependencies: { testResource, testTask },
30
- hooks: [
31
- { event: globalEvents.beforeInit, run: globalBeforeInitHandler },
32
- { event: globalEvents.afterInit, run: globalAfterInitHandler },
33
- {
34
- event: globalEvents.tasks.beforeRun,
35
- run: globalTaskBeforeRunHandler,
36
- },
37
- {
38
- event: globalEvents.tasks.afterRun,
39
- run: globalTaskAfterRunHandler,
40
- },
41
- {
42
- event: globalEvents.resources.beforeInit,
43
- run: globalResourceBeforeInitHandler,
44
- },
45
- {
46
- event: globalEvents.resources.afterInit,
47
- run: globalResourceAfterInitHandler,
48
- },
64
+ register: [
65
+ testResource,
66
+ testTask,
67
+ taskBeforeInit,
68
+ taskAfterInit,
69
+ taskBeforeRun,
70
+ taskAfterRun,
71
+ resourceBeforeInit,
72
+ resourceAfterInit,
49
73
  ],
74
+ dependencies: { testResource, testTask },
50
75
  async init(_, { testResource, testTask }) {
51
76
  expect(testResource).toBe("Resource Value");
52
77
  const response = await testTask();
@@ -73,16 +98,16 @@ describe("Global Events", () => {
73
98
  },
74
99
  });
75
100
 
101
+ const onErrorHandler = defineTask({
102
+ id: "on.error.handler",
103
+ on: globalEvents.tasks.onError,
104
+ run: globalTaskOnErrorHandler,
105
+ });
106
+
76
107
  const app = defineResource({
77
108
  id: "app",
78
- register: [errorTask],
109
+ register: [errorTask, onErrorHandler],
79
110
  dependencies: { errorTask },
80
- hooks: [
81
- {
82
- event: globalEvents.tasks.onError,
83
- run: globalTaskOnErrorHandler,
84
- },
85
- ],
86
111
  async init(_, { errorTask }) {
87
112
  try {
88
113
  await errorTask();
@@ -7,7 +7,6 @@ import "./models/Logger.test";
7
7
  import "./tools/findCircularDependencies.test";
8
8
 
9
9
  import "./run.test";
10
- import "./run.hooks.test";
11
10
  import "./run.overrides.test";
12
11
  import "./run.middleware.test";
13
12
  import "./globalEvents.test";
@@ -22,6 +22,7 @@ describe("EventManager", () => {
22
22
  expect.objectContaining({
23
23
  id: "testEvent",
24
24
  data: "testData",
25
+ timestamp: expect.any(Date),
25
26
  })
26
27
  );
27
28
  });
@@ -72,15 +72,15 @@ describe("run", () => {
72
72
  },
73
73
  });
74
74
 
75
+ const handlerTask = defineTask({
76
+ id: "handler.task",
77
+ on: testEvent,
78
+ run: eventHandler,
79
+ });
80
+
75
81
  const app = defineResource({
76
82
  id: "app",
77
- register: [testEvent, testTask],
78
- hooks: [
79
- {
80
- event: testEvent,
81
- run: eventHandler,
82
- },
83
- ],
83
+ register: [testEvent, testTask, handlerTask],
84
84
  dependencies: { testTask },
85
85
  async init(_, { testTask }) {
86
86
  await testTask();
@@ -101,15 +101,28 @@ describe("run", () => {
101
101
  run: async () => "Task executed",
102
102
  });
103
103
 
104
+ const onBeforeRun = defineTask({
105
+ id: "on.before.run",
106
+ on: testTask.events.beforeRun,
107
+ run: beforeRunHandler,
108
+ });
109
+
110
+ const onAfterRun = defineTask({
111
+ id: "on.after.run",
112
+ on: testTask.events.afterRun,
113
+ run: afterRunHandler,
114
+ });
115
+
116
+ const onError = defineTask({
117
+ id: "on.error",
118
+ on: testTask.events.onError,
119
+ run: onErrorHandler,
120
+ });
121
+
104
122
  const app = defineResource({
105
123
  id: "app",
106
- register: [testTask],
124
+ register: [testTask, onBeforeRun, onAfterRun, onError],
107
125
  dependencies: { testTask },
108
- hooks: [
109
- { event: testTask.events.beforeRun, run: beforeRunHandler },
110
- { event: testTask.events.afterRun, run: afterRunHandler },
111
- { event: testTask.events.onError, run: onErrorHandler },
112
- ],
113
126
  async init(_, { testTask }) {
114
127
  await testTask();
115
128
  expect(beforeRunHandler).toHaveBeenCalled();
@@ -132,56 +145,23 @@ describe("run", () => {
132
145
  let value = false;
133
146
  const errorHook = jest.fn();
134
147
 
135
- const app = defineResource({
136
- id: "app",
137
- register: [testTask],
138
- dependencies: { testTask },
139
- hooks: [
140
- {
141
- event: testTask.events.onError,
142
- run: errorHook,
143
- },
144
- ],
145
- async init(_, { testTask }) {
146
- await testTask();
147
- },
148
- });
149
-
150
- await expect(run(app)).rejects.toThrow("Task failed");
151
- expect(errorHook).toHaveBeenCalled();
152
- });
153
-
154
- it("should allow suppression of an error", async () => {
155
- const supressMock = jest.fn();
156
- const testTask = defineTask({
157
- id: "test.task",
158
- run: async () => {
159
- throw new Error("Task failed");
160
- },
148
+ const handler = defineTask({
149
+ id: "handler",
150
+ on: testTask.events.onError,
151
+ run: errorHook,
161
152
  });
162
153
 
163
154
  const app = defineResource({
164
155
  id: "app",
165
- register: [testTask],
156
+ register: [testTask, handler],
166
157
  dependencies: { testTask },
167
- hooks: [
168
- {
169
- event: testTask.events.onError,
170
- run: async (event, deps) => {
171
- supressMock();
172
- event.data.suppress();
173
- },
174
- },
175
- ],
176
158
  async init(_, { testTask }) {
177
159
  await testTask();
178
-
179
- return "ok";
180
160
  },
181
161
  });
182
162
 
183
- await expect(run(app)).resolves.toBe("ok");
184
- expect(supressMock).toHaveBeenCalled();
163
+ await expect(run(app)).rejects.toThrow("Task failed");
164
+ expect(errorHook).toHaveBeenCalled();
185
165
  });
186
166
 
187
167
  it("should be able to register an task with middleware and execute it, ensuring the middleware is called in the correct order", async () => {
@@ -307,58 +287,86 @@ describe("run", () => {
307
287
 
308
288
  await expect(run(app)).rejects.toThrow(/Circular dependencies detected/);
309
289
  });
310
- });
311
290
 
312
- it("should be able to listen to an event through the 'on' property", async () => {
313
- const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
314
- const eventHandler = jest.fn();
291
+ it("should be able to listen to an event through the 'on' property", async () => {
292
+ const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
293
+ const eventHandler = jest.fn();
315
294
 
316
- const task = defineTask({
317
- id: "app",
318
- on: testEvent,
319
- async run(event) {
320
- eventHandler();
321
- },
322
- });
295
+ const task = defineTask({
296
+ id: "app",
297
+ on: testEvent,
298
+ async run(event) {
299
+ eventHandler();
300
+ },
301
+ });
323
302
 
324
- const app = defineResource({
325
- id: "app.resource",
326
- register: [testEvent, task],
327
- dependencies: { task, testEvent },
328
- async init(_, deps) {
329
- await deps.testEvent({ message: "Event emitted" });
330
- },
303
+ const app = defineResource({
304
+ id: "app.resource",
305
+ register: [testEvent, task],
306
+ dependencies: { task, testEvent },
307
+ async init(_, deps) {
308
+ await deps.testEvent({ message: "Event emitted" });
309
+ },
310
+ });
311
+
312
+ await run(app);
313
+ expect(eventHandler).toHaveBeenCalled();
331
314
  });
332
315
 
333
- await run(app);
334
- expect(eventHandler).toHaveBeenCalled();
335
- });
316
+ it("should avoid infinite recursion by omitting task emissions recursively", async () => {
317
+ const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
318
+ const eventHandler = jest.fn();
336
319
 
337
- it("should be able to listen to global events", async () => {
338
- const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
339
- const eventHandler = jest.fn();
320
+ const task = defineTask({
321
+ id: "app",
322
+ on: testEvent,
323
+ dependencies: { testEvent },
324
+ async run(event, { testEvent }) {
325
+ eventHandler();
326
+ await testEvent({ message: "Event emitted" });
327
+ },
328
+ });
340
329
 
341
- const resource = defineResource({
342
- id: "app",
343
- hooks: [
344
- {
345
- event: "*",
346
- run: eventHandler,
330
+ const app = defineResource({
331
+ id: "app.resource",
332
+ register: [testEvent, task],
333
+ dependencies: { task, testEvent },
334
+ async init(_, deps) {
335
+ await deps.testEvent({ message: "Event emitted" });
347
336
  },
348
- ],
349
- });
337
+ });
350
338
 
351
- const app = defineResource({
352
- id: "app.resource",
353
- register: [testEvent, resource],
354
- dependencies: { resource, testEvent },
355
- async init(_, deps) {
356
- await deps.testEvent({ message: "Event emitted" });
357
- },
339
+ await run(app);
340
+ expect(eventHandler).toHaveBeenCalled();
358
341
  });
359
342
 
360
- await run(app);
361
- expect(eventHandler).toHaveBeenCalled();
343
+ it("should be able to listen to global events", async () => {
344
+ const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
345
+ const eventHandler = jest.fn();
346
+ let isReady = false;
347
+
348
+ const task = defineTask({
349
+ id: "app",
350
+ on: "*",
351
+ async run(event) {
352
+ event.data;
353
+ isReady && eventHandler();
354
+ },
355
+ });
356
+
357
+ const app = defineResource({
358
+ id: "app.resource",
359
+ register: [testEvent, task],
360
+ dependencies: { task, testEvent },
361
+ async init(_, deps) {
362
+ isReady = true;
363
+ await deps.testEvent({ message: "Event emitted" });
364
+ },
365
+ });
366
+
367
+ await run(app);
368
+ expect(eventHandler).toHaveBeenCalled();
369
+ });
362
370
  });
363
371
 
364
372
  // Resources
@@ -462,8 +470,8 @@ describe("run", () => {
462
470
 
463
471
  it("should allow suppression of an error", async () => {
464
472
  const supressMock = jest.fn();
465
- const testResource = defineResource({
466
- id: "test.resource",
473
+ const erroringResource = defineResource({
474
+ id: "error.resource",
467
475
  init: async () => {
468
476
  // we do this so it doesn't become a never.
469
477
  if (true === true) {
@@ -471,29 +479,52 @@ describe("run", () => {
471
479
  }
472
480
  },
473
481
  });
482
+ const erroringTask = defineTask({
483
+ id: "error.task",
484
+ run: async (event) => {
485
+ if (true === true) {
486
+ throw new Error("Run failed");
487
+ }
488
+ },
489
+ });
490
+
491
+ const resourceErrorHandler = defineTask({
492
+ id: "resourcehandler",
493
+ on: erroringResource.events.onError,
494
+ run: async (event) => {
495
+ supressMock();
496
+ event.data.suppress();
497
+ },
498
+ });
499
+
500
+ const taskErrorHandler = defineTask({
501
+ id: "taskhandler",
502
+ on: erroringTask.events.onError,
503
+ run: async (event) => {
504
+ supressMock();
505
+ event.data.suppress();
506
+ },
507
+ });
474
508
 
475
509
  const app = defineResource({
476
510
  id: "app",
477
- register: [testResource],
478
- dependencies: { testResource },
479
- hooks: [
480
- {
481
- event: testResource.events.onError,
482
- run: async (event, deps) => {
483
- supressMock();
484
- event.data.suppress();
485
- },
486
- },
511
+ register: [
512
+ erroringResource,
513
+ erroringTask,
514
+ resourceErrorHandler,
515
+ taskErrorHandler,
487
516
  ],
488
- async init(_, { testResource }) {
489
- expect(testResource).toBeUndefined();
517
+ dependencies: { erroringResource, erroringTask },
518
+ async init(_, { erroringResource, erroringTask }) {
519
+ expect(erroringResource).toBeUndefined();
520
+ expect(await erroringTask()).toBeUndefined();
490
521
 
491
522
  return "ok";
492
523
  },
493
524
  });
494
525
 
495
526
  await expect(run(app)).resolves.toBe("ok");
496
- expect(supressMock).toHaveBeenCalled();
527
+ expect(supressMock).toHaveBeenCalledTimes(2);
497
528
  });
498
529
  });
499
530
 
@@ -51,6 +51,10 @@ describe("typesafety", () => {
51
51
  id: "dummy.resource",
52
52
  init: async () => "Resource Value",
53
53
  });
54
+ const dummyResourceOptionalConfig = defineResource({
55
+ id: "dummy.resource",
56
+ init: async (config?: string) => "Resource Value",
57
+ });
54
58
 
55
59
  const testResource = defineResource({
56
60
  id: "test.resource",
@@ -91,6 +95,9 @@ describe("typesafety", () => {
91
95
  dummyResource.with({ ok: 123 }),
92
96
  // @ts-expect-error
93
97
  dummyResource.with(),
98
+
99
+ // should work
100
+ dummyResourceOptionalConfig.with("hello"),
94
101
  ],
95
102
  });
96
103
 
@@ -105,24 +112,18 @@ describe("typesafety", () => {
105
112
  run: async () => "Task executed",
106
113
  });
107
114
 
108
- const testResource = defineResource({
115
+ const testResource = defineTask({
109
116
  id: "test.resource",
110
117
  dependencies: { task },
111
- init: async () => "Resource Value",
112
- hooks: [
113
- {
114
- event: hookEvent,
115
- run: (event, deps) => {
116
- // @ts-expect-error
117
- event.data.x;
118
-
119
- event.data.message;
120
- deps.task;
121
- // @ts-expect-error
122
- deps.task2;
123
- },
124
- },
125
- ],
118
+ on: hookEvent,
119
+ run: async (_, deps) => {
120
+ _.data.message;
121
+ // @ts-expect-error
122
+ _.data.messagex;
123
+ deps.task();
124
+ // @ts-expect-error
125
+ deps.task2;
126
+ },
126
127
  });
127
128
 
128
129
  expect(true).toBe(true);
package/src/define.ts CHANGED
@@ -21,10 +21,10 @@ export function defineTask<
21
21
  Input = undefined,
22
22
  Output extends Promise<any> = any,
23
23
  Deps extends DependencyMapType = any,
24
- Test = any
24
+ TOn extends "*" | IEventDefinition | undefined = undefined
25
25
  >(
26
- taskConfig: ITaskDefinition<Input, Output, Deps, Test>
27
- ): ITask<Input, Output, Deps, Test> {
26
+ taskConfig: ITaskDefinition<Input, Output, Deps, TOn>
27
+ ): ITask<Input, Output, Deps, TOn> {
28
28
  return {
29
29
  [symbols.task]: true,
30
30
  id: taskConfig.id,
@@ -60,7 +60,6 @@ export function defineResource<
60
60
  [symbols.resource]: true,
61
61
  id: constConfig.id,
62
62
  dependencies: constConfig.dependencies,
63
- hooks: constConfig.hooks || [],
64
63
  dispose: constConfig.dispose,
65
64
  register: constConfig.register || [],
66
65
  overrides: constConfig.overrides || [],
package/src/defs.ts CHANGED
@@ -32,7 +32,7 @@ export interface IMiddlewareMeta extends IMeta {}
32
32
  // DependencyMap types
33
33
  export type DependencyMapType = Record<
34
34
  string,
35
- ITask<any, any, any> | IResource<any, any, any> | IEventDefinition<any>
35
+ ITask<any, any, any, any> | IResource<any, any, any> | IEventDefinition<any>
36
36
  >;
37
37
 
38
38
  // Helper Types for Extracting Generics
@@ -61,19 +61,39 @@ export type DependencyValuesType<T extends DependencyMapType> = {
61
61
  [K in keyof T]: DependencyValueType<T[K]>;
62
62
  };
63
63
 
64
+ type Optional<T> = {
65
+ [K in keyof T]?: T[K];
66
+ };
67
+
68
+ // Utility type to check if a type is void
69
+ type IsVoid<T> = [T] extends [void] ? true : false;
70
+
71
+ // Utility type to check if a type is optional (can be undefined)
72
+ type IsOptional<T> = undefined extends T ? true : false;
73
+
74
+ // IReso
75
+
76
+ // Conditional type to allow `void`, optional, or any type
77
+ type OptionalOrVoidOrAnything<T> = IsVoid<T> extends true
78
+ ? void
79
+ : IsOptional<T> extends true
80
+ ? Optional<T>
81
+ : T;
82
+
64
83
  // RegisterableItems Type with Conditional Inclusion
65
- export type RegisterableItems =
84
+ export type RegisterableItems<T = any> =
66
85
  | IResourceWithConfig<any>
67
86
  | IResource<void, any, any>
68
- | ITaskDefinition
69
- | IMiddlewareDefinition
70
- | IEventDefinition;
87
+ | IResource<OptionalOrVoidOrAnything<T>, any, any>
88
+ | ITaskDefinition<any, any, any, any>
89
+ | IMiddlewareDefinition<any>
90
+ | IEventDefinition<any>;
71
91
 
72
92
  export interface ITaskDefinition<
73
93
  TInput = any,
74
94
  TOutput extends Promise<any> = any,
75
95
  TDependencies extends DependencyMapType = {},
76
- TEventDefinitionInput = null
96
+ TOn extends "*" | IEventDefinition<any> | undefined = undefined // Adding a generic to track 'on' type
77
97
  > {
78
98
  id: string;
79
99
  dependencies?: TDependencies | (() => TDependencies);
@@ -81,7 +101,7 @@ export interface ITaskDefinition<
81
101
  /**
82
102
  * Listen to events in a simple way
83
103
  */
84
- on?: IEventDefinition<TEventDefinitionInput>;
104
+ on?: TOn;
85
105
  /**
86
106
  * This makes sense only when `on` is specified to provide the order of the execution.
87
107
  * The event with the lowest order will be executed first.
@@ -89,7 +109,12 @@ export interface ITaskDefinition<
89
109
  listenerOrder?: number;
90
110
  meta?: ITaskMeta;
91
111
  run: (
92
- input: TEventDefinitionInput extends null ? TInput : TEventDefinitionInput,
112
+ input: TOn extends undefined ? TInput : IEvent<ExtractEventParams<TOn>>,
113
+ // input: TOn extends "*"
114
+ // ? IEvent<any>
115
+ // : TEventDefinitionInput extends null | void
116
+ // ? TInput
117
+ // : IEvent<TEventDefinitionInput>,
93
118
  dependencies: DependencyValuesType<TDependencies>
94
119
  ) => TOutput;
95
120
  }
@@ -127,13 +152,8 @@ export interface ITask<
127
152
  TInput = any,
128
153
  TOutput extends Promise<any> = any,
129
154
  TDependencies extends DependencyMapType = {},
130
- TEventDefinitionInput = null
131
- > extends ITaskDefinition<
132
- TInput,
133
- TOutput,
134
- TDependencies,
135
- TEventDefinitionInput
136
- > {
155
+ TOn extends "*" | IEventDefinition<any> | undefined = undefined
156
+ > extends ITaskDefinition<TInput, TOutput, TDependencies, TOn> {
137
157
  dependencies: TDependencies | (() => TDependencies);
138
158
  computedDependencies?: DependencyValuesType<TDependencies>;
139
159
  middleware: IMiddlewareDefinition[];
@@ -156,9 +176,6 @@ export interface IResourceDefinition<
156
176
  > {
157
177
  id: string;
158
178
  dependencies?: TDependencies | ((config: TConfig) => TDependencies);
159
- hooks?:
160
- | IHookDefinition<TDependencies, THooks>[]
161
- | ((config: TConfig) => IHookDefinition<TDependencies, THooks>[]);
162
179
  register?:
163
180
  | Array<RegisterableItems>
164
181
  | ((config: TConfig) => Array<RegisterableItems>);
@@ -201,10 +218,6 @@ export interface IResource<
201
218
  afterInit: IEventDefinition<AfterInitEventPayload<TConfig, TValue>>;
202
219
  onError: IEventDefinition<OnErrorEventPayload>;
203
220
  };
204
- hooks:
205
- | IHookDefinition<TDependencies>[]
206
- | ((config: TConfig) => IHookDefinition<TDependencies>[]);
207
-
208
221
  overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
209
222
  middleware: IMiddlewareDefinition[];
210
223
  }