@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.
Files changed (204) hide show
  1. package/README.md +1315 -942
  2. package/dist/common.types.d.ts +20 -0
  3. package/dist/common.types.js +4 -0
  4. package/dist/common.types.js.map +1 -0
  5. package/dist/context.d.ts +34 -0
  6. package/dist/context.js +58 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/define.d.ts +22 -3
  9. package/dist/define.js +52 -8
  10. package/dist/define.js.map +1 -1
  11. package/dist/defs.d.ts +52 -31
  12. package/dist/defs.js +10 -2
  13. package/dist/defs.js.map +1 -1
  14. package/dist/errors.js +1 -1
  15. package/dist/errors.js.map +1 -1
  16. package/dist/event.types.d.ts +18 -0
  17. package/dist/event.types.js +4 -0
  18. package/dist/event.types.js.map +1 -0
  19. package/dist/examples/registrator-example.d.ts +122 -0
  20. package/dist/examples/registrator-example.js +147 -0
  21. package/dist/examples/registrator-example.js.map +1 -0
  22. package/dist/globals/globalEvents.d.ts +41 -0
  23. package/dist/globals/globalEvents.js +94 -0
  24. package/dist/globals/globalEvents.js.map +1 -0
  25. package/dist/globals/globalMiddleware.d.ts +23 -0
  26. package/dist/globals/globalMiddleware.js +15 -0
  27. package/dist/globals/globalMiddleware.js.map +1 -0
  28. package/dist/globals/globalResources.d.ts +27 -0
  29. package/dist/globals/globalResources.js +47 -0
  30. package/dist/globals/globalResources.js.map +1 -0
  31. package/dist/globals/middleware/cache.middleware.d.ts +34 -0
  32. package/dist/globals/middleware/cache.middleware.js +85 -0
  33. package/dist/globals/middleware/cache.middleware.js.map +1 -0
  34. package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
  35. package/dist/globals/middleware/requireContext.middleware.js +25 -0
  36. package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
  37. package/dist/globals/middleware/retry.middleware.d.ts +20 -0
  38. package/dist/globals/middleware/retry.middleware.js +34 -0
  39. package/dist/globals/middleware/retry.middleware.js.map +1 -0
  40. package/dist/globals/resources/queue.resource.d.ts +7 -0
  41. package/dist/globals/resources/queue.resource.js +31 -0
  42. package/dist/globals/resources/queue.resource.js.map +1 -0
  43. package/dist/index.d.ts +45 -9
  44. package/dist/index.js +14 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/middleware.types.d.ts +40 -0
  47. package/dist/middleware.types.js +4 -0
  48. package/dist/middleware.types.js.map +1 -0
  49. package/dist/models/DependencyProcessor.d.ts +2 -1
  50. package/dist/models/DependencyProcessor.js +11 -13
  51. package/dist/models/DependencyProcessor.js.map +1 -1
  52. package/dist/models/EventManager.d.ts +5 -0
  53. package/dist/models/EventManager.js +44 -2
  54. package/dist/models/EventManager.js.map +1 -1
  55. package/dist/models/Logger.d.ts +30 -12
  56. package/dist/models/Logger.js +130 -42
  57. package/dist/models/Logger.js.map +1 -1
  58. package/dist/models/OverrideManager.d.ts +13 -0
  59. package/dist/models/OverrideManager.js +70 -0
  60. package/dist/models/OverrideManager.js.map +1 -0
  61. package/dist/models/Queue.d.ts +25 -0
  62. package/dist/models/Queue.js +54 -0
  63. package/dist/models/Queue.js.map +1 -0
  64. package/dist/models/ResourceInitializer.d.ts +5 -2
  65. package/dist/models/ResourceInitializer.js +20 -14
  66. package/dist/models/ResourceInitializer.js.map +1 -1
  67. package/dist/models/Semaphore.d.ts +61 -0
  68. package/dist/models/Semaphore.js +166 -0
  69. package/dist/models/Semaphore.js.map +1 -0
  70. package/dist/models/Store.d.ts +17 -72
  71. package/dist/models/Store.js +71 -269
  72. package/dist/models/Store.js.map +1 -1
  73. package/dist/models/StoreConstants.d.ts +11 -0
  74. package/dist/models/StoreConstants.js +18 -0
  75. package/dist/models/StoreConstants.js.map +1 -0
  76. package/dist/models/StoreRegistry.d.ts +25 -0
  77. package/dist/models/StoreRegistry.js +171 -0
  78. package/dist/models/StoreRegistry.js.map +1 -0
  79. package/dist/models/StoreTypes.d.ts +21 -0
  80. package/dist/models/StoreTypes.js +3 -0
  81. package/dist/models/StoreTypes.js.map +1 -0
  82. package/dist/models/StoreValidator.d.ts +10 -0
  83. package/dist/models/StoreValidator.js +41 -0
  84. package/dist/models/StoreValidator.js.map +1 -0
  85. package/dist/models/TaskRunner.js +39 -24
  86. package/dist/models/TaskRunner.js.map +1 -1
  87. package/dist/models/VarStore.d.ts +17 -0
  88. package/dist/models/VarStore.js +60 -0
  89. package/dist/models/VarStore.js.map +1 -0
  90. package/dist/models/index.d.ts +3 -0
  91. package/dist/models/index.js +3 -0
  92. package/dist/models/index.js.map +1 -1
  93. package/dist/resource.types.d.ts +31 -0
  94. package/dist/resource.types.js +3 -0
  95. package/dist/resource.types.js.map +1 -0
  96. package/dist/run.d.ts +4 -1
  97. package/dist/run.js +6 -3
  98. package/dist/run.js.map +1 -1
  99. package/dist/symbols.d.ts +24 -0
  100. package/dist/symbols.js +29 -0
  101. package/dist/symbols.js.map +1 -0
  102. package/dist/task.types.d.ts +55 -0
  103. package/dist/task.types.js +23 -0
  104. package/dist/task.types.js.map +1 -0
  105. package/dist/tools/registratorId.d.ts +4 -0
  106. package/dist/tools/registratorId.js +40 -0
  107. package/dist/tools/registratorId.js.map +1 -0
  108. package/dist/tools/simpleHash.d.ts +9 -0
  109. package/dist/tools/simpleHash.js +34 -0
  110. package/dist/tools/simpleHash.js.map +1 -0
  111. package/dist/types/base-interfaces.d.ts +18 -0
  112. package/dist/types/base-interfaces.js +6 -0
  113. package/dist/types/base-interfaces.js.map +1 -0
  114. package/dist/types/base.d.ts +13 -0
  115. package/dist/types/base.js +3 -0
  116. package/dist/types/base.js.map +1 -0
  117. package/dist/types/dependencies.d.ts +22 -0
  118. package/dist/types/dependencies.js +3 -0
  119. package/dist/types/dependencies.js.map +1 -0
  120. package/dist/types/dependency-core.d.ts +14 -0
  121. package/dist/types/dependency-core.js +5 -0
  122. package/dist/types/dependency-core.js.map +1 -0
  123. package/dist/types/events.d.ts +52 -0
  124. package/dist/types/events.js +6 -0
  125. package/dist/types/events.js.map +1 -0
  126. package/dist/types/hooks.d.ts +16 -0
  127. package/dist/types/hooks.js +5 -0
  128. package/dist/types/hooks.js.map +1 -0
  129. package/dist/types/index.d.ts +14 -0
  130. package/dist/types/index.js +27 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/meta.d.ts +13 -0
  133. package/dist/types/meta.js +5 -0
  134. package/dist/types/meta.js.map +1 -0
  135. package/dist/types/middleware.d.ts +38 -0
  136. package/dist/types/middleware.js +6 -0
  137. package/dist/types/middleware.js.map +1 -0
  138. package/dist/types/registerable.d.ts +10 -0
  139. package/dist/types/registerable.js +5 -0
  140. package/dist/types/registerable.js.map +1 -0
  141. package/dist/types/resources.d.ts +44 -0
  142. package/dist/types/resources.js +5 -0
  143. package/dist/types/resources.js.map +1 -0
  144. package/dist/types/symbols.d.ts +24 -0
  145. package/dist/types/symbols.js +30 -0
  146. package/dist/types/symbols.js.map +1 -0
  147. package/dist/types/tasks.d.ts +41 -0
  148. package/dist/types/tasks.js +5 -0
  149. package/dist/types/tasks.js.map +1 -0
  150. package/dist/types/utilities.d.ts +7 -0
  151. package/dist/types/utilities.js +5 -0
  152. package/dist/types/utilities.js.map +1 -0
  153. package/package.json +10 -6
  154. package/src/__tests__/benchmark/benchmark.test.ts +1 -1
  155. package/src/__tests__/context.test.ts +91 -0
  156. package/src/__tests__/errors.test.ts +8 -5
  157. package/src/__tests__/globalEvents.test.ts +1 -1
  158. package/src/__tests__/globals/cache.middleware.test.ts +772 -0
  159. package/src/__tests__/globals/queue.resource.test.ts +141 -0
  160. package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
  161. package/src/__tests__/globals/retry.middleware.test.ts +157 -0
  162. package/src/__tests__/index.helper.test.ts +55 -0
  163. package/src/__tests__/models/EventManager.test.ts +144 -0
  164. package/src/__tests__/models/Logger.test.ts +291 -34
  165. package/src/__tests__/models/Queue.test.ts +189 -0
  166. package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
  167. package/src/__tests__/models/Semaphore.test.ts +713 -0
  168. package/src/__tests__/models/Store.test.ts +40 -0
  169. package/src/__tests__/models/TaskRunner.test.ts +86 -5
  170. package/src/__tests__/run.middleware.test.ts +166 -12
  171. package/src/__tests__/run.overrides.test.ts +13 -10
  172. package/src/__tests__/run.test.ts +363 -12
  173. package/src/__tests__/setOutput.test.ts +244 -0
  174. package/src/__tests__/tools/getCallerFile.test.ts +9 -9
  175. package/src/__tests__/typesafety.test.ts +54 -39
  176. package/src/context.ts +86 -0
  177. package/src/define.ts +84 -14
  178. package/src/defs.ts +91 -41
  179. package/src/errors.ts +3 -1
  180. package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
  181. package/src/globals/globalMiddleware.ts +14 -0
  182. package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
  183. package/src/globals/middleware/cache.middleware.ts +115 -0
  184. package/src/globals/middleware/requireContext.middleware.ts +36 -0
  185. package/src/globals/middleware/retry.middleware.ts +56 -0
  186. package/src/globals/resources/queue.resource.ts +34 -0
  187. package/src/index.ts +9 -5
  188. package/src/models/DependencyProcessor.ts +36 -40
  189. package/src/models/EventManager.ts +45 -5
  190. package/src/models/Logger.ts +170 -48
  191. package/src/models/OverrideManager.ts +84 -0
  192. package/src/models/Queue.ts +66 -0
  193. package/src/models/ResourceInitializer.ts +38 -20
  194. package/src/models/Semaphore.ts +208 -0
  195. package/src/models/Store.ts +94 -342
  196. package/src/models/StoreConstants.ts +17 -0
  197. package/src/models/StoreRegistry.ts +217 -0
  198. package/src/models/StoreTypes.ts +46 -0
  199. package/src/models/StoreValidator.ts +38 -0
  200. package/src/models/TaskRunner.ts +53 -40
  201. package/src/models/index.ts +3 -0
  202. package/src/run.ts +7 -4
  203. package/src/__tests__/index.ts +0 -15
  204. package/src/examples/express-mongo/index.ts +0 -1
@@ -0,0 +1,20 @@
1
+ export interface IMeta {
2
+ title?: string;
3
+ description?: string;
4
+ tags?: string[];
5
+ }
6
+ export interface ITaskMeta extends IMeta {
7
+ }
8
+ export interface IResourceMeta extends IMeta {
9
+ }
10
+ export interface IEventMeta extends IMeta {
11
+ }
12
+ export interface IMiddlewareMeta extends IMeta {
13
+ }
14
+ export type Optional<T> = {
15
+ [K in keyof T]?: T[K];
16
+ };
17
+ export type IsVoid<T> = [T] extends [void] ? true : false;
18
+ export type IsOptional<T> = undefined extends T ? true : false;
19
+ export type OptionalOrVoidOrAnything<T> = IsVoid<T> extends true ? void : IsOptional<T> extends true ? Optional<T> : T;
20
+ export type OnlyOptionalFields<T> = {} extends T ? true : false;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // Common/shared types and utility types
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=common.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.types.js","sourceRoot":"","sources":["../src/common.types.ts"],"names":[],"mappings":";AAAA,wCAAwC"}
@@ -0,0 +1,34 @@
1
+ import { AsyncLocalStorage } from "async_hooks";
2
+ import { IMiddlewareConfigured } from "./defs";
3
+ /**
4
+ * Error thrown whenever a requested context is not available.
5
+ */
6
+ export declare class ContextError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ /**
10
+ * The generic Context object returned by `createContext`.
11
+ */
12
+ export interface Context<T> {
13
+ /** unique symbol used as key in the AsyncLocalStorage map */
14
+ readonly id: symbol;
15
+ /** Retrieve the current context value or throw */
16
+ use(): T;
17
+ /**
18
+ * Provide a value for this context during the lifetime of `fn()`
19
+ */
20
+ provide<R>(value: T, fn: () => Promise<R> | R): Promise<R> | R;
21
+ /**
22
+ * Generates a middleware that guarantees the context exists (and optionally
23
+ * enforces that certain keys are present on the context object).
24
+ */
25
+ require<K extends keyof T = never>(keys?: K[]): IMiddlewareConfigured<{
26
+ context: Context<T>;
27
+ }>;
28
+ }
29
+ export declare const storage: AsyncLocalStorage<Map<symbol, unknown>>;
30
+ /**
31
+ * Create a new typed Context. The result contains helpers similar to React’s
32
+ * Context API but adapted for async usage in Runner.
33
+ */
34
+ export declare function createContext<T>(name?: string): Context<T>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storage = exports.ContextError = void 0;
4
+ exports.createContext = createContext;
5
+ const async_hooks_1 = require("async_hooks");
6
+ const requireContext_middleware_1 = require("./globals/middleware/requireContext.middleware");
7
+ /**
8
+ * Error thrown whenever a requested context is not available.
9
+ */
10
+ class ContextError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = "ContextError";
14
+ }
15
+ }
16
+ exports.ContextError = ContextError;
17
+ // The internal storage maps Context identifiers (symbols) to their values
18
+ exports.storage = new async_hooks_1.AsyncLocalStorage();
19
+ /** Returns the currently active store or undefined. */
20
+ function getCurrentStore() {
21
+ return exports.storage.getStore();
22
+ }
23
+ /**
24
+ * Create a new typed Context. The result contains helpers similar to React’s
25
+ * Context API but adapted for async usage in Runner.
26
+ */
27
+ function createContext(name = "runner.context") {
28
+ const ctxId = Symbol(name);
29
+ function use() {
30
+ const store = getCurrentStore();
31
+ if (!store || !store.has(ctxId)) {
32
+ throw new ContextError(`Context not available for symbol ${ctxId.toString()}`);
33
+ }
34
+ return store.get(ctxId);
35
+ }
36
+ function provide(value, fn) {
37
+ const currentStore = getCurrentStore();
38
+ const map = currentStore
39
+ ? new Map(currentStore)
40
+ : new Map();
41
+ map.set(ctxId, value);
42
+ return exports.storage.run(map, fn);
43
+ }
44
+ /**
45
+ * Generates a middleware that guarantees the context exists (and optionally
46
+ * enforces that certain keys are present on the context object).
47
+ */
48
+ function require() {
49
+ return requireContext_middleware_1.requireContextMiddleware.with({ context: this });
50
+ }
51
+ return {
52
+ id: ctxId,
53
+ use,
54
+ provide,
55
+ require,
56
+ };
57
+ }
58
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;AAgDA,sCAqCC;AArFD,6CAAgD;AAGhD,8FAA0F;AAE1F;;GAEG;AACH,MAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC;AAuBD,0EAA0E;AAC7D,QAAA,OAAO,GAAG,IAAI,+BAAiB,EAAwB,CAAC;AAErE,uDAAuD;AACvD,SAAS,eAAe;IACtB,OAAO,eAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAI,OAAe,gBAAgB;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3B,SAAS,GAAG;QACV,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CACpB,oCAAoC,KAAK,CAAC,QAAQ,EAAE,EAAE,CACvD,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAM,CAAC;IAC/B,CAAC;IAED,SAAS,OAAO,CAAI,KAAQ,EAAE,EAAwB;QACpD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,YAAY;YACtB,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC;YACvB,CAAC,CAAC,IAAI,GAAG,EAAmB,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEtB,OAAO,eAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAS,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,SAAS,OAAO;QACd,OAAO,oDAAwB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAkB,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,KAAK;QACT,GAAG;QACH,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
package/dist/define.d.ts CHANGED
@@ -1,8 +1,27 @@
1
- import { ITask, ITaskDefinition, IResource, IResourceWithConfig, IResourceDefinition, IEventDefinition, IMiddlewareDefinition, DependencyMapType, IMiddleware, IEventDefinitionConfig } from "./defs";
1
+ import { ITask, ITaskDefinition, IResource, IResourceWithConfig, IResourceDefinition, IEventDefinition, IMiddlewareDefinition, DependencyMapType, DependencyValuesType, IMiddleware, IEventDefinitionConfig, RegisterableItems } from "./defs";
2
2
  export declare function defineTask<Input = undefined, Output extends Promise<any> = any, Deps extends DependencyMapType = any, TOn extends "*" | IEventDefinition | undefined = undefined>(taskConfig: ITaskDefinition<Input, Output, Deps, TOn>): ITask<Input, Output, Deps, TOn>;
3
- export declare function defineResource<TConfig = void, TValue = any, TDeps extends DependencyMapType = {}, THooks = any>(constConfig: IResourceDefinition<TConfig, TValue, TDeps, THooks>): IResource<TConfig, TValue, TDeps>;
3
+ export declare function defineResource<TConfig = void, TValue = any, TDeps extends DependencyMapType = {}, TPrivate = any>(constConfig: IResourceDefinition<TConfig, TValue, TDeps, TPrivate>): IResource<TConfig, TValue, TDeps, TPrivate>;
4
+ /**
5
+ * Creates an "index" resource which groups multiple registerable items under
6
+ * a single dependency. The resulting resource registers every item, depends
7
+ * on the same items, and returns the resolved dependency map so users can
8
+ * access them naturally: `deps.services.myTask()` or `deps.services.myResource`.
9
+ */
10
+ export declare function defineIndex<T extends Record<string, RegisterableItems>, D extends {
11
+ [K in keyof T]: T[K] extends IResourceWithConfig<any, any, any> ? T[K]["resource"] : T[K];
12
+ } & DependencyMapType>(items: T): IResource<void, DependencyValuesType<D>, D>;
4
13
  export declare function defineEvent<TPayload = any>(config: IEventDefinitionConfig<TPayload>): IEventDefinition<TPayload>;
5
- export declare function defineMiddleware<TDeps extends DependencyMapType = {}>(config: IMiddlewareDefinition<TDeps>): IMiddleware<TDeps>;
14
+ export type MiddlewareEverywhereOptions = {
15
+ /**
16
+ * Enable this for tasks. Default is true.
17
+ */
18
+ tasks?: boolean;
19
+ /**
20
+ * Enable this for resources. Default is true.
21
+ */
22
+ resources?: boolean;
23
+ };
24
+ export declare function defineMiddleware<TConfig extends Record<string, any>, TDependencies extends DependencyMapType>(middlewareDef: IMiddlewareDefinition<TConfig, TDependencies>): IMiddleware<TConfig, TDependencies>;
6
25
  export declare function isTask(definition: any): definition is ITask;
7
26
  export declare function isResource(definition: any): definition is IResource;
8
27
  export declare function isResourceWithConfig(definition: any): definition is IResourceWithConfig;
package/dist/define.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineTask = defineTask;
4
4
  exports.defineResource = defineResource;
5
+ exports.defineIndex = defineIndex;
5
6
  exports.defineEvent = defineEvent;
6
7
  exports.defineMiddleware = defineMiddleware;
7
8
  exports.isTask = isTask;
@@ -23,6 +24,7 @@ function defineTask(taskConfig) {
23
24
  middleware: taskConfig.middleware || [],
24
25
  run: taskConfig.run,
25
26
  on: taskConfig.on,
27
+ listenerOrder: taskConfig.listenerOrder,
26
28
  events: {
27
29
  beforeRun: {
28
30
  ...defineEvent({
@@ -57,7 +59,8 @@ function defineResource(constConfig) {
57
59
  dispose: constConfig.dispose,
58
60
  register: constConfig.register || [],
59
61
  overrides: constConfig.overrides || [],
60
- init: constConfig.init || (async (...args) => undefined),
62
+ init: constConfig.init,
63
+ context: constConfig.context,
61
64
  with: function (config) {
62
65
  return {
63
66
  [defs_1.symbols.resourceWithConfig]: true,
@@ -90,6 +93,34 @@ function defineResource(constConfig) {
90
93
  middleware: constConfig.middleware || [],
91
94
  };
92
95
  }
96
+ /**
97
+ * Creates an "index" resource which groups multiple registerable items under
98
+ * a single dependency. The resulting resource registers every item, depends
99
+ * on the same items, and returns the resolved dependency map so users can
100
+ * access them naturally: `deps.services.myTask()` or `deps.services.myResource`.
101
+ */
102
+ function defineIndex(items) {
103
+ const dependencies = {};
104
+ const register = [];
105
+ for (const key of Object.keys(items)) {
106
+ const item = items[key];
107
+ register.push(item);
108
+ if (isResourceWithConfig(item)) {
109
+ dependencies[key] = item.resource;
110
+ }
111
+ else {
112
+ dependencies[key] = item;
113
+ }
114
+ }
115
+ return defineResource({
116
+ id: `index.${Math.random().toString(36).slice(2)}`,
117
+ register,
118
+ dependencies,
119
+ async init(_, deps) {
120
+ return deps;
121
+ },
122
+ });
123
+ }
93
124
  function defineEvent(config) {
94
125
  return {
95
126
  [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
@@ -97,21 +128,34 @@ function defineEvent(config) {
97
128
  ...config,
98
129
  };
99
130
  }
100
- function defineMiddleware(config) {
131
+ function defineMiddleware(middlewareDef) {
101
132
  const object = {
102
133
  [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
103
134
  [defs_1.symbols.middleware]: true,
104
- ...config,
105
- dependencies: config.dependencies || {},
135
+ config: {},
136
+ ...middlewareDef,
137
+ dependencies: middlewareDef.dependencies || {},
106
138
  };
107
139
  return {
108
140
  ...object,
109
- global() {
141
+ with: (config) => {
142
+ return {
143
+ ...object,
144
+ [defs_1.symbolMiddlewareConfigured]: true,
145
+ config: {
146
+ ...object.config,
147
+ ...config,
148
+ },
149
+ };
150
+ },
151
+ everywhere(options = {}) {
152
+ const { tasks = true, resources = true } = options;
110
153
  return {
111
154
  ...object,
112
- [defs_1.symbols.middlewareGlobal]: true,
113
- global() {
114
- throw errors_1.Errors.middlewareAlreadyGlobal(config.id);
155
+ [defs_1.symbols.middlewareEverywhereTasks]: tasks,
156
+ [defs_1.symbols.middlewareEverywhereResources]: resources,
157
+ everywhere() {
158
+ throw errors_1.Errors.middlewareAlreadyGlobal(middlewareDef.id);
115
159
  },
116
160
  };
117
161
  },
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":";;AAyBA,gCAyCC;AAED,wCAmDC;AAQD,kCA8BC;AAED,kCAQC;AAaD,4CAuCC;AAED,wBAEC;AAED,gCAEC;AAED,oDAIC;AAED,0BAEC;AAED,oCAEC;AAhPD,iCAkBgB;AAChB,qCAAkC;AAClC,yDAAsD;AAEtD,yCAAyC;AAEzC,SAAgB,UAAU,CAMxB,UAAqD;IAErD,MAAM,QAAQ,GAAG,IAAA,6BAAa,GAAE,CAAC;IACjC,OAAO;QACL,CAAC,cAAO,CAAC,IAAI,CAAC,EAAE,IAAI;QACpB,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ;QAC5B,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,YAAY,EAAE,UAAU,CAAC,YAAY,IAAK,EAAW;QACrD,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;QACvC,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,MAAM,EAAE;YACN,SAAS,EAAE;gBACT,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,UAAU,CAAC,EAAE,mBAAmB;iBACxC,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,6BAAa,GAAE;aACpC;YACD,QAAQ,EAAE;gBACR,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,UAAU,CAAC,EAAE,kBAAkB;iBACvC,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,6BAAa,GAAE;aACpC;YACD,OAAO,EAAE;gBACP,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,UAAU,CAAC,EAAE,iBAAiB;iBACtC,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,6BAAa,GAAE;aACpC;SACF;QACD,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;QAC3B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAM5B,WAAkE;IAElE,MAAM,QAAQ,GAAG,IAAA,6BAAa,GAAE,CAAC;IACjC,OAAO;QACL,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAI;QACxB,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ;QAC5B,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,EAAE;QACpC,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,EAAE;QACtC,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,IAAI,EAAE,UAAU,MAAe;YAC7B,OAAO;gBACL,CAAC,cAAO,CAAC,kBAAkB,CAAC,EAAE,IAAI;gBAClC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,MAAM;aACP,CAAC;QACJ,CAAC;QAED,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,WAAW,CAAC,EAAE,oBAAoB;iBAC1C,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ;aAC7B;YACD,SAAS,EAAE;gBACT,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,WAAW,CAAC,EAAE,mBAAmB;iBACzC,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ;aAC7B;YACD,OAAO,EAAE;gBACP,GAAG,WAAW,CAAC;oBACb,EAAE,EAAE,GAAG,WAAW,CAAC,EAAE,iBAAiB;iBACvC,CAAC;gBACF,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ;aAC7B;SACF;QACD,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;QAC5B,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAOzB,KAAQ;IACR,MAAM,YAAY,GAAG,EAAO,CAAC;IAC7B,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAgB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,YAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7C,CAAC;aAAM,CAAC;YACL,YAAoB,CAAC,GAAG,CAAC,GAAG,IAAW,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAClD,QAAQ;QACR,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI;YAChB,OAAO,IAAW,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW,CACzB,MAAwC;IAExC,OAAO;QACL,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,6BAAa,GAAE;QACnC,CAAC,kBAAW,CAAC,EAAE,IAAI;QACnB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAaD,SAAgB,gBAAgB,CAI9B,aAA4D;IAE5D,MAAM,MAAM,GAAG;QACb,CAAC,cAAO,CAAC,QAAQ,CAAC,EAAE,IAAA,6BAAa,GAAE;QACnC,CAAC,cAAO,CAAC,UAAU,CAAC,EAAE,IAAI;QAC1B,MAAM,EAAE,EAAa;QACrB,GAAG,aAAa;QAChB,YAAY,EAAE,aAAa,CAAC,YAAY,IAAK,EAAoB;KAC3B,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE;YACxB,OAAO;gBACL,GAAG,MAAM;gBACT,CAAC,iCAA0B,CAAC,EAAE,IAAI;gBAClC,MAAM,EAAE;oBACN,GAAG,MAAM,CAAC,MAAM;oBAChB,GAAG,MAAM;iBACV;aACF,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,UAAuC,EAAE;YAClD,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YAEnD,OAAO;gBACL,GAAG,MAAM;gBACT,CAAC,cAAO,CAAC,yBAAyB,CAAC,EAAE,KAAK;gBAC1C,CAAC,cAAO,CAAC,6BAA6B,CAAC,EAAE,SAAS;gBAClD,UAAU;oBACR,MAAM,eAAM,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACzD,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,MAAM,CAAC,UAAe;IACpC,OAAO,UAAU,IAAI,UAAU,CAAC,cAAO,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,UAAU,CAAC,UAAe;IACxC,OAAO,UAAU,IAAI,UAAU,CAAC,cAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,oBAAoB,CAClC,UAAe;IAEf,OAAO,UAAU,IAAI,UAAU,CAAC,cAAO,CAAC,kBAAkB,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,OAAO,CAAC,UAAe;IACrC,OAAO,UAAU,IAAI,UAAU,CAAC,cAAO,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,YAAY,CAAC,UAAe;IAC1C,OAAO,UAAU,IAAI,UAAU,CAAC,cAAO,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC"}
package/dist/defs.d.ts CHANGED
@@ -1,18 +1,27 @@
1
+ export { ICacheInstance } from "./globals/middleware/cache.middleware";
1
2
  export declare const symbolTask: unique symbol;
2
3
  export declare const symbolResource: unique symbol;
3
4
  export declare const symbolResourceWithConfig: unique symbol;
4
5
  export declare const symbolEvent: unique symbol;
5
6
  export declare const symbolMiddleware: unique symbol;
7
+ export declare const symbolMiddlewareConfigured: unique symbol;
6
8
  export declare const symbolMiddlewareGlobal: unique symbol;
9
+ export declare const symbolMiddlewareEverywhereTasks: unique symbol;
10
+ export declare const symbolMiddlewareEverywhereResources: unique symbol;
7
11
  export declare const symbolFilePath: unique symbol;
12
+ export declare const symbolDispose: unique symbol;
13
+ export declare const symbolStore: unique symbol;
8
14
  export declare const symbols: {
9
15
  task: symbol;
10
16
  resource: symbol;
11
17
  resourceWithConfig: symbol;
12
18
  event: symbol;
13
19
  middleware: symbol;
14
- middlewareGlobal: symbol;
20
+ middlewareEverywhereTasks: symbol;
21
+ middlewareEverywhereResources: symbol;
15
22
  filePath: symbol;
23
+ dispose: symbol;
24
+ store: symbol;
16
25
  };
17
26
  export interface IMeta {
18
27
  title?: string;
@@ -39,17 +48,16 @@ export type DependencyValueType<T> = T extends ITask<any, any, any> ? TaskDepend
39
48
  export type DependencyValuesType<T extends DependencyMapType> = {
40
49
  [K in keyof T]: DependencyValueType<T[K]>;
41
50
  };
42
- type Optional<T> = {
43
- [K in keyof T]?: T[K];
44
- };
45
- type IsVoid<T> = [T] extends [void] ? true : false;
46
- type IsOptional<T> = undefined extends T ? true : false;
47
- type OptionalOrVoidOrAnything<T> = IsVoid<T> extends true ? void : IsOptional<T> extends true ? Optional<T> : T;
48
- export type RegisterableItems<T = any> = IResourceWithConfig<any> | IResource<OptionalOrVoidOrAnything<T>, any, any> | ITaskDefinition<any, any, any, any> | IMiddlewareDefinition<any> | IEventDefinition<any>;
51
+ export type RegisterableItems<T = any> = IResourceWithConfig<any> | IResource<void, any, any, any> | IResource<{
52
+ [K in any]?: any;
53
+ }, any, any, any> | ITaskDefinition<any, any, any, any> | IMiddlewareDefinition<any> | IEventDefinition<any>;
54
+ export type MiddlewareAttachments = IMiddleware<void> | IMiddleware<{
55
+ [K in any]?: any;
56
+ }> | IMiddlewareConfigured<any>;
49
57
  export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> {
50
58
  id: string;
51
59
  dependencies?: TDependencies | (() => TDependencies);
52
- middleware?: IMiddlewareDefinition[];
60
+ middleware?: MiddlewareAttachments[];
53
61
  /**
54
62
  * Listen to events in a simple way
55
63
  */
@@ -67,7 +75,8 @@ export type BeforeRunEventPayload<TInput> = {
67
75
  };
68
76
  export type AfterRunEventPayload<TInput, TOutput> = {
69
77
  input: TInput;
70
- output: TOutput;
78
+ output: TOutput extends Promise<infer U> ? U : TOutput;
79
+ setOutput(newOutput: TOutput extends Promise<infer U> ? U : TOutput): void;
71
80
  };
72
81
  export type OnErrorEventPayload = {
73
82
  error: any;
@@ -89,7 +98,7 @@ export type AfterInitEventPayload<TConfig, TValue> = {
89
98
  export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> extends ITaskDefinition<TInput, TOutput, TDependencies, TOn> {
90
99
  dependencies: TDependencies | (() => TDependencies);
91
100
  computedDependencies?: DependencyValuesType<TDependencies>;
92
- middleware: IMiddlewareDefinition[];
101
+ middleware: MiddlewareAttachments[];
93
102
  /**
94
103
  * These events are automatically populated after the task has been defined.
95
104
  */
@@ -99,26 +108,26 @@ export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDepend
99
108
  onError: IEventDefinition<OnErrorEventPayload>;
100
109
  };
101
110
  }
102
- export interface IResourceDefinition<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, TRegisterableItems = any> {
111
+ export interface IResourceDefinition<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, TContext = any, THooks = any, TRegisterableItems = any> {
103
112
  id: string;
104
113
  dependencies?: TDependencies | ((config: TConfig) => TDependencies);
105
114
  register?: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
106
- init?: (config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
115
+ init?: (this: any, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<TValue>;
107
116
  /**
108
117
  * Clean-up function for the resource. This is called when the resource is no longer needed.
109
118
  *
110
- * @param value The value of the resource
119
+ * @param value The value of the resource (undefined if no init method)
111
120
  * @param config The configuration it received
112
121
  * @param dependencies The dependencies it needed
113
- * @returns
122
+ * @returns Promise<void>
114
123
  */
115
- dispose?: (value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
124
+ dispose?: (this: any, value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<void>;
116
125
  meta?: IResourceMeta;
117
126
  overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
118
- middleware?: IMiddlewareDefinition[];
127
+ middleware?: MiddlewareAttachments[];
128
+ context?: () => TContext;
119
129
  }
120
- export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any> extends IResourceDefinition<TConfig, TValue, TDependencies> {
121
- init: (config: TConfig, dependencies: DependencyValuesType<TDependencies>) => Promise<TValue>;
130
+ export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any, TContext = any> extends IResourceDefinition<TConfig, TValue, TDependencies, TContext> {
122
131
  with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies>;
123
132
  register: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
124
133
  /**
@@ -130,7 +139,7 @@ export interface IResource<TConfig = void, TValue = any, TDependencies extends D
130
139
  onError: IEventDefinition<OnErrorEventPayload>;
131
140
  };
132
141
  overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
133
- middleware: IMiddlewareDefinition[];
142
+ middleware: MiddlewareAttachments[];
134
143
  }
135
144
  export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies extends DependencyMapType = any> {
136
145
  id: string;
@@ -165,26 +174,39 @@ export interface IEventDefinition<TPayload = void> {
165
174
  [symbolEvent]: true;
166
175
  meta?: IEventMeta;
167
176
  }
168
- export interface IMiddlewareDefinition<TDependencies extends DependencyMapType = any> {
177
+ export interface IMiddlewareDefinition<TConfig = any, TDependencies extends DependencyMapType = any> {
169
178
  id: string;
170
179
  dependencies?: TDependencies | (() => TDependencies);
171
- run: (input: IMiddlewareExecutionInput, dependencies: DependencyValuesType<TDependencies>) => Promise<any>;
180
+ run: (input: IMiddlewareExecutionInput, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
172
181
  meta?: IMiddlewareMeta;
173
182
  }
174
- export interface IMiddleware<TDependencies extends DependencyMapType = any> extends IMiddlewareDefinition<TDependencies> {
183
+ export interface IMiddleware<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddlewareDefinition<TConfig, TDependencies> {
184
+ [symbolMiddleware]: true;
185
+ [symbolMiddlewareConfigured]?: boolean;
186
+ [symbolMiddlewareEverywhereTasks]?: boolean;
187
+ [symbolMiddlewareEverywhereResources]?: boolean;
175
188
  dependencies: TDependencies | (() => TDependencies);
176
- global(): IMiddleware<TDependencies>;
189
+ everywhere(): IMiddleware<TConfig, TDependencies>;
190
+ config: TConfig;
191
+ with: (config: TConfig) => IMiddlewareConfigured<TConfig, TDependencies>;
192
+ }
193
+ export interface IMiddlewareConfigured<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddleware<TConfig, TDependencies> {
194
+ [symbolMiddlewareConfigured]: true;
177
195
  }
178
196
  export interface IMiddlewareDefinitionConfigured<C extends Record<string, any> = {}> {
179
197
  middleware: IMiddleware<C>;
180
198
  config?: C;
181
199
  }
182
- export interface IMiddlewareExecutionInput {
183
- taskDefinition?: ITask;
184
- resourceDefinition?: IResource;
185
- config?: any;
186
- input?: any;
187
- next: (taskInputOrResourceConfig?: any) => Promise<any>;
200
+ export interface IMiddlewareExecutionInput<TTaskInput = any, TResourceConfig = any> {
201
+ task?: {
202
+ definition: ITask<TTaskInput>;
203
+ input: TTaskInput;
204
+ };
205
+ resource?: {
206
+ definition: IResource<TResourceConfig>;
207
+ config: TResourceConfig;
208
+ };
209
+ next: (taskInputOrResourceConfig?: TTaskInput | TResourceConfig) => Promise<any>;
188
210
  }
189
211
  export interface IHookDefinition<D extends DependencyMapType = {}, T = any, B extends boolean = false> {
190
212
  event: "*" | IEventDefinition<T>;
@@ -200,4 +222,3 @@ export interface IHookDefinition<D extends DependencyMapType = {}, T = any, B ex
200
222
  early?: B;
201
223
  run: (event: IEvent<T>, dependencies: T extends true ? void : DependencyValuesType<D>) => Promise<void> | void;
202
224
  }
203
- export {};
package/dist/defs.js CHANGED
@@ -1,20 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.symbols = exports.symbolFilePath = exports.symbolMiddlewareGlobal = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
3
+ exports.symbols = exports.symbolStore = exports.symbolDispose = exports.symbolFilePath = exports.symbolMiddlewareEverywhereResources = exports.symbolMiddlewareEverywhereTasks = exports.symbolMiddlewareGlobal = exports.symbolMiddlewareConfigured = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
4
4
  exports.symbolTask = Symbol("runner.task");
5
5
  exports.symbolResource = Symbol("runner.resource");
6
6
  exports.symbolResourceWithConfig = Symbol("runner.resourceWithConfig");
7
7
  exports.symbolEvent = Symbol("runner.event");
8
8
  exports.symbolMiddleware = Symbol("runner.middleware");
9
+ exports.symbolMiddlewareConfigured = Symbol("runner.middlewareConfigured");
9
10
  exports.symbolMiddlewareGlobal = Symbol("runner.middlewareGlobal");
11
+ exports.symbolMiddlewareEverywhereTasks = Symbol("runner.middlewareGlobalTasks");
12
+ exports.symbolMiddlewareEverywhereResources = Symbol("runner.middlewareGlobalResources");
10
13
  exports.symbolFilePath = Symbol("runner.filePath");
14
+ exports.symbolDispose = Symbol("runner.dispose");
15
+ exports.symbolStore = Symbol("runner.store");
11
16
  exports.symbols = {
12
17
  task: exports.symbolTask,
13
18
  resource: exports.symbolResource,
14
19
  resourceWithConfig: exports.symbolResourceWithConfig,
15
20
  event: exports.symbolEvent,
16
21
  middleware: exports.symbolMiddleware,
17
- middlewareGlobal: exports.symbolMiddlewareGlobal,
22
+ middlewareEverywhereTasks: exports.symbolMiddlewareEverywhereTasks,
23
+ middlewareEverywhereResources: exports.symbolMiddlewareEverywhereResources,
18
24
  filePath: exports.symbolFilePath,
25
+ dispose: exports.symbolDispose,
26
+ store: exports.symbolStore,
19
27
  };
20
28
  //# sourceMappingURL=defs.js.map
package/dist/defs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AACpD,QAAA,gBAAgB,GAAkB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC9D,QAAA,sBAAsB,GAAkB,MAAM,CACzD,yBAAyB,CAC1B,CAAC;AAEW,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE1D,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,kBAAU;IAChB,QAAQ,EAAE,sBAAc;IACxB,kBAAkB,EAAE,gCAAwB;IAC5C,KAAK,EAAE,mBAAW;IAClB,UAAU,EAAE,wBAAgB;IAC5B,gBAAgB,EAAE,8BAAsB;IACxC,QAAQ,EAAE,sBAAc;CACzB,CAAC"}
1
+ {"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AACpD,QAAA,gBAAgB,GAAkB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC9D,QAAA,0BAA0B,GAAkB,MAAM,CAC7D,6BAA6B,CAC9B,CAAC;AACW,QAAA,sBAAsB,GAAkB,MAAM,CACzD,yBAAyB,CAC1B,CAAC;AACW,QAAA,+BAA+B,GAAkB,MAAM,CAClE,8BAA8B,CAC/B,CAAC;AACW,QAAA,mCAAmC,GAAkB,MAAM,CACtE,kCAAkC,CACnC,CAAC;AAEW,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,aAAa,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACxD,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAEpD,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,kBAAU;IAChB,QAAQ,EAAE,sBAAc;IACxB,kBAAkB,EAAE,gCAAwB;IAC5C,KAAK,EAAE,mBAAW;IAClB,UAAU,EAAE,wBAAgB;IAC5B,yBAAyB,EAAE,uCAA+B;IAC1D,6BAA6B,EAAE,2CAAmC;IAClE,QAAQ,EAAE,sBAAc;IACxB,OAAO,EAAE,qBAAa;IACtB,KAAK,EAAE,mBAAW;CACnB,CAAC"}
package/dist/errors.js CHANGED
@@ -7,7 +7,7 @@ exports.Errors = {
7
7
  unknownItemType: (item) => new Error(`Unknown item type: ${item}`),
8
8
  circularDependencies: (cycles) => new Error(`Circular dependencies detected: ${cycles.join(", ")}`),
9
9
  eventNotFound: (id) => new Error(`Event "${id}" not found. Did you forget to register it?`),
10
- middlewareAlreadyGlobal: (id) => new Error("Cannot call global on a global middleware: " + id),
10
+ middlewareAlreadyGlobal: (id) => new Error("Cannot call .everywhere() on an already global middleware: " + id),
11
11
  locked: (what) => new Error(`Cannot modify the ${what} when it is locked.`),
12
12
  storeAlreadyInitialized: () => new Error("Store already initialized. Cannot reinitialize."),
13
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,qBAAqB,EAAE,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAClD,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,sBAAsB,CAAC;IAEjD,kBAAkB,EAAE,CAAC,GAAW,EAAE,EAAE,CAClC,IAAI,KAAK,CACP,cAAc,GAAG,+DAA+D,CACjF;IAEH,eAAe,EAAE,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEvE,oBAAoB,EAAE,CAAC,MAAgB,EAAE,EAAE,CACzC,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAEnE,aAAa,EAAE,CAAC,EAAU,EAAE,EAAE,CAC5B,IAAI,KAAK,CAAC,UAAU,EAAE,6CAA6C,CAAC;IAEtE,uBAAuB,EAAE,CAAC,EAAU,EAAE,EAAE,CACtC,IAAI,KAAK,CAAC,6CAA6C,GAAG,EAAE,CAAC;IAE/D,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CACvB,IAAI,KAAK,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IAE3D,uBAAuB,EAAE,GAAG,EAAE,CAC5B,IAAI,KAAK,CAAC,iDAAiD,CAAC;CAC/D,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,qBAAqB,EAAE,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAClD,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,sBAAsB,CAAC;IAEjD,kBAAkB,EAAE,CAAC,GAAW,EAAE,EAAE,CAClC,IAAI,KAAK,CACP,cAAc,GAAG,+DAA+D,CACjF;IAEH,eAAe,EAAE,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEvE,oBAAoB,EAAE,CAAC,MAAgB,EAAE,EAAE,CACzC,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAEnE,aAAa,EAAE,CAAC,EAAU,EAAE,EAAE,CAC5B,IAAI,KAAK,CAAC,UAAU,EAAE,6CAA6C,CAAC;IAEtE,uBAAuB,EAAE,CAAC,EAAU,EAAE,EAAE,CACtC,IAAI,KAAK,CACP,6DAA6D,GAAG,EAAE,CACnE;IAEH,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CACvB,IAAI,KAAK,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IAE3D,uBAAuB,EAAE,GAAG,EAAE,CAC5B,IAAI,KAAK,CAAC,iDAAiD,CAAC;CAC/D,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { IEventMeta } from "./common.types";
2
+ import { symbolEvent } from "./symbols";
3
+ export interface IEvent<TPayload = any> {
4
+ id: string;
5
+ data: TPayload;
6
+ timestamp: Date;
7
+ source: string;
8
+ }
9
+ export type EventHandlerType<T = any> = (event: IEvent<T>) => any | Promise<any>;
10
+ export interface IEventDefinitionConfig<TPayload = void> {
11
+ id: string;
12
+ meta?: IEventMeta;
13
+ }
14
+ export interface IEventDefinition<TPayload = void> {
15
+ id: string;
16
+ [symbolEvent]: true;
17
+ meta?: IEventMeta;
18
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const symbols_1 = require("./symbols");
4
+ //# sourceMappingURL=event.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.types.js","sourceRoot":"","sources":["../src/event.types.ts"],"names":[],"mappings":";;AACA,uCAAwC"}