@bluelibs/runner 2.2.4 → 3.1.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 (211) hide show
  1. package/README.md +1409 -935
  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 +24 -5
  9. package/dist/define.js +89 -20
  10. package/dist/define.js.map +1 -1
  11. package/dist/defs.d.ts +109 -73
  12. package/dist/defs.js +12 -2
  13. package/dist/defs.js.map +1 -1
  14. package/dist/errors.d.ts +5 -5
  15. package/dist/errors.js +6 -5
  16. package/dist/errors.js.map +1 -1
  17. package/dist/event.types.d.ts +18 -0
  18. package/dist/event.types.js +4 -0
  19. package/dist/event.types.js.map +1 -0
  20. package/dist/examples/registrator-example.d.ts +122 -0
  21. package/dist/examples/registrator-example.js +147 -0
  22. package/dist/examples/registrator-example.js.map +1 -0
  23. package/dist/globals/globalEvents.d.ts +41 -0
  24. package/dist/globals/globalEvents.js +94 -0
  25. package/dist/globals/globalEvents.js.map +1 -0
  26. package/dist/globals/globalMiddleware.d.ts +23 -0
  27. package/dist/globals/globalMiddleware.js +15 -0
  28. package/dist/globals/globalMiddleware.js.map +1 -0
  29. package/dist/globals/globalResources.d.ts +27 -0
  30. package/dist/globals/globalResources.js +47 -0
  31. package/dist/globals/globalResources.js.map +1 -0
  32. package/dist/globals/middleware/cache.middleware.d.ts +34 -0
  33. package/dist/globals/middleware/cache.middleware.js +85 -0
  34. package/dist/globals/middleware/cache.middleware.js.map +1 -0
  35. package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
  36. package/dist/globals/middleware/requireContext.middleware.js +25 -0
  37. package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
  38. package/dist/globals/middleware/retry.middleware.d.ts +20 -0
  39. package/dist/globals/middleware/retry.middleware.js +34 -0
  40. package/dist/globals/middleware/retry.middleware.js.map +1 -0
  41. package/dist/globals/resources/queue.resource.d.ts +7 -0
  42. package/dist/globals/resources/queue.resource.js +31 -0
  43. package/dist/globals/resources/queue.resource.js.map +1 -0
  44. package/dist/index.d.ts +54 -18
  45. package/dist/index.js +14 -9
  46. package/dist/index.js.map +1 -1
  47. package/dist/middleware.types.d.ts +40 -0
  48. package/dist/middleware.types.js +4 -0
  49. package/dist/middleware.types.js.map +1 -0
  50. package/dist/models/DependencyProcessor.d.ts +6 -5
  51. package/dist/models/DependencyProcessor.js +13 -15
  52. package/dist/models/DependencyProcessor.js.map +1 -1
  53. package/dist/models/EventManager.d.ts +9 -4
  54. package/dist/models/EventManager.js +44 -2
  55. package/dist/models/EventManager.js.map +1 -1
  56. package/dist/models/Logger.d.ts +30 -13
  57. package/dist/models/Logger.js +132 -54
  58. package/dist/models/Logger.js.map +1 -1
  59. package/dist/models/OverrideManager.d.ts +13 -0
  60. package/dist/models/OverrideManager.js +70 -0
  61. package/dist/models/OverrideManager.js.map +1 -0
  62. package/dist/models/Queue.d.ts +25 -0
  63. package/dist/models/Queue.js +54 -0
  64. package/dist/models/Queue.js.map +1 -0
  65. package/dist/models/ResourceInitializer.d.ts +5 -2
  66. package/dist/models/ResourceInitializer.js +22 -14
  67. package/dist/models/ResourceInitializer.js.map +1 -1
  68. package/dist/models/Semaphore.d.ts +61 -0
  69. package/dist/models/Semaphore.js +166 -0
  70. package/dist/models/Semaphore.js.map +1 -0
  71. package/dist/models/Store.d.ts +18 -73
  72. package/dist/models/Store.js +71 -269
  73. package/dist/models/Store.js.map +1 -1
  74. package/dist/models/StoreConstants.d.ts +11 -0
  75. package/dist/models/StoreConstants.js +18 -0
  76. package/dist/models/StoreConstants.js.map +1 -0
  77. package/dist/models/StoreRegistry.d.ts +25 -0
  78. package/dist/models/StoreRegistry.js +171 -0
  79. package/dist/models/StoreRegistry.js.map +1 -0
  80. package/dist/models/StoreTypes.d.ts +21 -0
  81. package/dist/models/StoreTypes.js +3 -0
  82. package/dist/models/StoreTypes.js.map +1 -0
  83. package/dist/models/StoreValidator.d.ts +10 -0
  84. package/dist/models/StoreValidator.js +41 -0
  85. package/dist/models/StoreValidator.js.map +1 -0
  86. package/dist/models/TaskRunner.d.ts +1 -1
  87. package/dist/models/TaskRunner.js +39 -24
  88. package/dist/models/TaskRunner.js.map +1 -1
  89. package/dist/models/VarStore.d.ts +17 -0
  90. package/dist/models/VarStore.js +60 -0
  91. package/dist/models/VarStore.js.map +1 -0
  92. package/dist/models/index.d.ts +3 -0
  93. package/dist/models/index.js +3 -0
  94. package/dist/models/index.js.map +1 -1
  95. package/dist/resource.types.d.ts +31 -0
  96. package/dist/resource.types.js +3 -0
  97. package/dist/resource.types.js.map +1 -0
  98. package/dist/run.d.ts +4 -1
  99. package/dist/run.js +6 -3
  100. package/dist/run.js.map +1 -1
  101. package/dist/symbols.d.ts +24 -0
  102. package/dist/symbols.js +29 -0
  103. package/dist/symbols.js.map +1 -0
  104. package/dist/task.types.d.ts +55 -0
  105. package/dist/task.types.js +23 -0
  106. package/dist/task.types.js.map +1 -0
  107. package/dist/tools/getCallerFile.d.ts +9 -1
  108. package/dist/tools/getCallerFile.js +41 -0
  109. package/dist/tools/getCallerFile.js.map +1 -1
  110. package/dist/tools/registratorId.d.ts +4 -0
  111. package/dist/tools/registratorId.js +40 -0
  112. package/dist/tools/registratorId.js.map +1 -0
  113. package/dist/tools/simpleHash.d.ts +9 -0
  114. package/dist/tools/simpleHash.js +34 -0
  115. package/dist/tools/simpleHash.js.map +1 -0
  116. package/dist/types/base-interfaces.d.ts +18 -0
  117. package/dist/types/base-interfaces.js +6 -0
  118. package/dist/types/base-interfaces.js.map +1 -0
  119. package/dist/types/base.d.ts +13 -0
  120. package/dist/types/base.js +3 -0
  121. package/dist/types/base.js.map +1 -0
  122. package/dist/types/dependencies.d.ts +22 -0
  123. package/dist/types/dependencies.js +3 -0
  124. package/dist/types/dependencies.js.map +1 -0
  125. package/dist/types/dependency-core.d.ts +14 -0
  126. package/dist/types/dependency-core.js +5 -0
  127. package/dist/types/dependency-core.js.map +1 -0
  128. package/dist/types/events.d.ts +52 -0
  129. package/dist/types/events.js +6 -0
  130. package/dist/types/events.js.map +1 -0
  131. package/dist/types/hooks.d.ts +16 -0
  132. package/dist/types/hooks.js +5 -0
  133. package/dist/types/hooks.js.map +1 -0
  134. package/dist/types/index.d.ts +14 -0
  135. package/dist/types/index.js +27 -0
  136. package/dist/types/index.js.map +1 -0
  137. package/dist/types/meta.d.ts +13 -0
  138. package/dist/types/meta.js +5 -0
  139. package/dist/types/meta.js.map +1 -0
  140. package/dist/types/middleware.d.ts +38 -0
  141. package/dist/types/middleware.js +6 -0
  142. package/dist/types/middleware.js.map +1 -0
  143. package/dist/types/registerable.d.ts +10 -0
  144. package/dist/types/registerable.js +5 -0
  145. package/dist/types/registerable.js.map +1 -0
  146. package/dist/types/resources.d.ts +44 -0
  147. package/dist/types/resources.js +5 -0
  148. package/dist/types/resources.js.map +1 -0
  149. package/dist/types/symbols.d.ts +24 -0
  150. package/dist/types/symbols.js +30 -0
  151. package/dist/types/symbols.js.map +1 -0
  152. package/dist/types/tasks.d.ts +41 -0
  153. package/dist/types/tasks.js +5 -0
  154. package/dist/types/tasks.js.map +1 -0
  155. package/dist/types/utilities.d.ts +7 -0
  156. package/dist/types/utilities.js +5 -0
  157. package/dist/types/utilities.js.map +1 -0
  158. package/package.json +10 -6
  159. package/src/__tests__/benchmark/benchmark.test.ts +1 -1
  160. package/src/__tests__/context.test.ts +91 -0
  161. package/src/__tests__/errors.test.ts +8 -5
  162. package/src/__tests__/globalEvents.test.ts +1 -1
  163. package/src/__tests__/globals/cache.middleware.test.ts +772 -0
  164. package/src/__tests__/globals/queue.resource.test.ts +141 -0
  165. package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
  166. package/src/__tests__/globals/retry.middleware.test.ts +157 -0
  167. package/src/__tests__/index.helper.test.ts +55 -0
  168. package/src/__tests__/models/EventManager.test.ts +157 -11
  169. package/src/__tests__/models/Logger.test.ts +291 -34
  170. package/src/__tests__/models/Queue.test.ts +189 -0
  171. package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
  172. package/src/__tests__/models/Semaphore.test.ts +713 -0
  173. package/src/__tests__/models/Store.test.ts +40 -0
  174. package/src/__tests__/models/TaskRunner.test.ts +86 -5
  175. package/src/__tests__/run.anonymous.test.ts +679 -0
  176. package/src/__tests__/run.middleware.test.ts +312 -12
  177. package/src/__tests__/run.overrides.test.ts +13 -10
  178. package/src/__tests__/run.test.ts +364 -13
  179. package/src/__tests__/setOutput.test.ts +244 -0
  180. package/src/__tests__/tools/getCallerFile.test.ts +124 -9
  181. package/src/__tests__/typesafety.test.ts +71 -41
  182. package/src/context.ts +86 -0
  183. package/src/define.ts +129 -34
  184. package/src/defs.ts +156 -119
  185. package/src/errors.ts +15 -10
  186. package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
  187. package/src/globals/globalMiddleware.ts +14 -0
  188. package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
  189. package/src/globals/middleware/cache.middleware.ts +115 -0
  190. package/src/globals/middleware/requireContext.middleware.ts +36 -0
  191. package/src/globals/middleware/retry.middleware.ts +56 -0
  192. package/src/globals/resources/queue.resource.ts +34 -0
  193. package/src/index.ts +9 -5
  194. package/src/models/DependencyProcessor.ts +42 -49
  195. package/src/models/EventManager.ts +64 -13
  196. package/src/models/Logger.ts +181 -64
  197. package/src/models/OverrideManager.ts +84 -0
  198. package/src/models/Queue.ts +66 -0
  199. package/src/models/ResourceInitializer.ts +40 -20
  200. package/src/models/Semaphore.ts +208 -0
  201. package/src/models/Store.ts +94 -342
  202. package/src/models/StoreConstants.ts +17 -0
  203. package/src/models/StoreRegistry.ts +228 -0
  204. package/src/models/StoreTypes.ts +46 -0
  205. package/src/models/StoreValidator.ts +43 -0
  206. package/src/models/TaskRunner.ts +54 -41
  207. package/src/models/index.ts +3 -0
  208. package/src/run.ts +7 -4
  209. package/src/tools/getCallerFile.ts +54 -2
  210. package/src/__tests__/index.ts +0 -15
  211. 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,10 +1,29 @@
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, IEvent, 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>;
4
- export declare function defineEvent<TPayload = any>(config: IEventDefinitionConfig<TPayload>): IEventDefinition<TPayload>;
5
- export declare function defineMiddleware<TDeps extends DependencyMapType = {}>(config: IMiddlewareDefinition<TDeps>): IMiddleware<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>;
13
+ export declare function defineEvent<TPayload = void>(config: IEventDefinition<TPayload>): IEvent<TPayload>;
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;
9
- export declare function isEvent(definition: any): definition is IEventDefinition;
28
+ export declare function isEvent(definition: any): definition is IEvent;
10
29
  export declare function isMiddleware(definition: any): definition is IMiddleware;
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;
@@ -15,30 +16,39 @@ const getCallerFile_1 = require("./tools/getCallerFile");
15
16
  // Helper function to get the caller file
16
17
  function defineTask(taskConfig) {
17
18
  const filePath = (0, getCallerFile_1.getCallerFile)();
19
+ const isAnonymous = !Boolean(taskConfig.id);
20
+ const id = taskConfig.id || (0, getCallerFile_1.generateCallerIdFromFile)(filePath, "task");
18
21
  return {
19
22
  [defs_1.symbols.task]: true,
20
23
  [defs_1.symbols.filePath]: filePath,
21
- id: taskConfig.id,
24
+ id,
22
25
  dependencies: taskConfig.dependencies || {},
23
26
  middleware: taskConfig.middleware || [],
24
27
  run: taskConfig.run,
25
28
  on: taskConfig.on,
29
+ listenerOrder: taskConfig.listenerOrder,
26
30
  events: {
27
31
  beforeRun: {
28
32
  ...defineEvent({
29
- id: `${taskConfig.id}.events.beforeRun`,
33
+ id: isAnonymous
34
+ ? Symbol(`anonymous-task.events.beforeRun`)
35
+ : `${id}.events.beforeRun`,
30
36
  }),
31
37
  [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
32
38
  },
33
39
  afterRun: {
34
40
  ...defineEvent({
35
- id: `${taskConfig.id}.events.afterRun`,
41
+ id: isAnonymous
42
+ ? Symbol(`anonymous-task.events.afterRun`)
43
+ : `${id}.events.afterRun`,
36
44
  }),
37
45
  [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
38
46
  },
39
47
  onError: {
40
48
  ...defineEvent({
41
- id: `${taskConfig.id}.events.onError`,
49
+ id: isAnonymous
50
+ ? Symbol(`anonymous-task.events.onError`)
51
+ : `${id}.events.onError`,
42
52
  }),
43
53
  [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
44
54
  },
@@ -48,16 +58,22 @@ function defineTask(taskConfig) {
48
58
  };
49
59
  }
50
60
  function defineResource(constConfig) {
51
- const filePath = (0, getCallerFile_1.getCallerFile)();
61
+ // The symbolFilePath might already come from defineIndex() for example
62
+ const filePath = constConfig[defs_1.symbolFilePath] || (0, getCallerFile_1.getCallerFile)();
63
+ const isIndexResource = constConfig[defs_1.symbolIndexResource] || false;
64
+ const isAnonymous = !Boolean(constConfig.id);
65
+ const id = constConfig.id ||
66
+ (0, getCallerFile_1.generateCallerIdFromFile)(filePath, isIndexResource ? "index" : "resource");
52
67
  return {
53
68
  [defs_1.symbols.resource]: true,
54
69
  [defs_1.symbols.filePath]: filePath,
55
- id: constConfig.id,
70
+ id,
56
71
  dependencies: constConfig.dependencies,
57
72
  dispose: constConfig.dispose,
58
73
  register: constConfig.register || [],
59
74
  overrides: constConfig.overrides || [],
60
- init: constConfig.init || (async (...args) => undefined),
75
+ init: constConfig.init,
76
+ context: constConfig.context,
61
77
  with: function (config) {
62
78
  return {
63
79
  [defs_1.symbols.resourceWithConfig]: true,
@@ -69,19 +85,25 @@ function defineResource(constConfig) {
69
85
  events: {
70
86
  beforeInit: {
71
87
  ...defineEvent({
72
- id: `${constConfig.id}.events.beforeInit`,
88
+ id: isAnonymous
89
+ ? Symbol(`anonymous-resource.events.beforeInit`)
90
+ : `${id}.events.beforeInit`,
73
91
  }),
74
92
  [defs_1.symbols.filePath]: filePath,
75
93
  },
76
94
  afterInit: {
77
95
  ...defineEvent({
78
- id: `${constConfig.id}.events.afterInit`,
96
+ id: isAnonymous
97
+ ? Symbol(`anonymous-resource.events.afterInit`)
98
+ : `${id}.events.afterInit`,
79
99
  }),
80
100
  [defs_1.symbols.filePath]: filePath,
81
101
  },
82
102
  onError: {
83
103
  ...defineEvent({
84
- id: `${constConfig.id}.events.onError`,
104
+ id: isAnonymous
105
+ ? Symbol(`anonymous-resource.events.onError`)
106
+ : `${id}.events.onError`,
85
107
  }),
86
108
  [defs_1.symbols.filePath]: filePath,
87
109
  },
@@ -90,28 +112,75 @@ function defineResource(constConfig) {
90
112
  middleware: constConfig.middleware || [],
91
113
  };
92
114
  }
115
+ /**
116
+ * Creates an "index" resource which groups multiple registerable items under
117
+ * a single dependency. The resulting resource registers every item, depends
118
+ * on the same items, and returns the resolved dependency map so users can
119
+ * access them naturally: `deps.services.myTask()` or `deps.services.myResource`.
120
+ */
121
+ function defineIndex(items) {
122
+ const dependencies = {};
123
+ const register = [];
124
+ for (const key of Object.keys(items)) {
125
+ const item = items[key];
126
+ register.push(item);
127
+ if (isResourceWithConfig(item)) {
128
+ dependencies[key] = item.resource;
129
+ }
130
+ else {
131
+ dependencies[key] = item;
132
+ }
133
+ }
134
+ const callerFilePath = (0, getCallerFile_1.getCallerFile)();
135
+ return defineResource({
136
+ register,
137
+ dependencies,
138
+ async init(_, deps) {
139
+ return deps;
140
+ },
141
+ [defs_1.symbols.filePath]: callerFilePath,
142
+ [defs_1.symbols.indexResource]: true,
143
+ });
144
+ }
93
145
  function defineEvent(config) {
146
+ const callerFilePath = (0, getCallerFile_1.getCallerFile)();
94
147
  return {
95
- [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
96
- [defs_1.symbolEvent]: true,
97
148
  ...config,
149
+ id: config.id || (0, getCallerFile_1.generateCallerIdFromFile)(callerFilePath, "event"),
150
+ [defs_1.symbols.filePath]: callerFilePath,
151
+ [defs_1.symbolEvent]: true, // This is a workaround
98
152
  };
99
153
  }
100
- function defineMiddleware(config) {
154
+ function defineMiddleware(middlewareDef) {
155
+ const filePath = (0, getCallerFile_1.getCallerFile)();
101
156
  const object = {
102
- [defs_1.symbols.filePath]: (0, getCallerFile_1.getCallerFile)(),
157
+ [defs_1.symbols.filePath]: filePath,
103
158
  [defs_1.symbols.middleware]: true,
104
- ...config,
105
- dependencies: config.dependencies || {},
159
+ config: {},
160
+ id: middlewareDef.id || (0, getCallerFile_1.generateCallerIdFromFile)(filePath, "middleware"),
161
+ ...middlewareDef,
162
+ dependencies: middlewareDef.dependencies || {},
106
163
  };
107
164
  return {
108
165
  ...object,
109
- global() {
166
+ with: (config) => {
167
+ return {
168
+ ...object,
169
+ [defs_1.symbolMiddlewareConfigured]: true,
170
+ config: {
171
+ ...object.config,
172
+ ...config,
173
+ },
174
+ };
175
+ },
176
+ everywhere(options = {}) {
177
+ const { tasks = true, resources = true } = options;
110
178
  return {
111
179
  ...object,
112
- [defs_1.symbols.middlewareGlobal]: true,
113
- global() {
114
- throw errors_1.Errors.middlewareAlreadyGlobal(config.id);
180
+ [defs_1.symbols.middlewareEverywhereTasks]: tasks,
181
+ [defs_1.symbols.middlewareEverywhereResources]: resources,
182
+ everywhere() {
183
+ throw errors_1.Errors.middlewareAlreadyGlobal(object.id);
115
184
  },
116
185
  };
117
186
  },
@@ -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":"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"}