@bluelibs/runner 4.5.0-alpha → 4.5.0-alpha.2

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 (228) hide show
  1. package/dist/index.cjs +4265 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.mts +1734 -0
  4. package/dist/index.d.ts +1696 -45
  5. package/dist/index.mjs +4233 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +11 -14
  8. package/dist/context.d.ts +0 -29
  9. package/dist/context.js +0 -52
  10. package/dist/context.js.map +0 -1
  11. package/dist/define.d.ts +0 -9
  12. package/dist/define.js +0 -32
  13. package/dist/define.js.map +0 -1
  14. package/dist/definers/defineEvent.d.ts +0 -2
  15. package/dist/definers/defineEvent.js +0 -23
  16. package/dist/definers/defineEvent.js.map +0 -1
  17. package/dist/definers/defineHook.d.ts +0 -6
  18. package/dist/definers/defineHook.js +0 -24
  19. package/dist/definers/defineHook.js.map +0 -1
  20. package/dist/definers/defineOverride.d.ts +0 -14
  21. package/dist/definers/defineOverride.js +0 -13
  22. package/dist/definers/defineOverride.js.map +0 -1
  23. package/dist/definers/defineResource.d.ts +0 -2
  24. package/dist/definers/defineResource.js +0 -69
  25. package/dist/definers/defineResource.js.map +0 -1
  26. package/dist/definers/defineResourceMiddleware.d.ts +0 -2
  27. package/dist/definers/defineResourceMiddleware.js +0 -42
  28. package/dist/definers/defineResourceMiddleware.js.map +0 -1
  29. package/dist/definers/defineTag.d.ts +0 -12
  30. package/dist/definers/defineTag.js +0 -107
  31. package/dist/definers/defineTag.js.map +0 -1
  32. package/dist/definers/defineTask.d.ts +0 -15
  33. package/dist/definers/defineTask.js +0 -42
  34. package/dist/definers/defineTask.js.map +0 -1
  35. package/dist/definers/defineTaskMiddleware.d.ts +0 -2
  36. package/dist/definers/defineTaskMiddleware.js +0 -42
  37. package/dist/definers/defineTaskMiddleware.js.map +0 -1
  38. package/dist/definers/tools.d.ts +0 -45
  39. package/dist/definers/tools.js +0 -75
  40. package/dist/definers/tools.js.map +0 -1
  41. package/dist/defs.d.ts +0 -29
  42. package/dist/defs.js +0 -45
  43. package/dist/defs.js.map +0 -1
  44. package/dist/errors.d.ts +0 -96
  45. package/dist/errors.js +0 -178
  46. package/dist/errors.js.map +0 -1
  47. package/dist/globals/globalEvents.d.ts +0 -17
  48. package/dist/globals/globalEvents.js +0 -33
  49. package/dist/globals/globalEvents.js.map +0 -1
  50. package/dist/globals/globalMiddleware.d.ts +0 -31
  51. package/dist/globals/globalMiddleware.js +0 -25
  52. package/dist/globals/globalMiddleware.js.map +0 -1
  53. package/dist/globals/globalResources.d.ts +0 -30
  54. package/dist/globals/globalResources.js +0 -55
  55. package/dist/globals/globalResources.js.map +0 -1
  56. package/dist/globals/globalTags.d.ts +0 -9
  57. package/dist/globals/globalTags.js +0 -23
  58. package/dist/globals/globalTags.js.map +0 -1
  59. package/dist/globals/middleware/cache.middleware.d.ts +0 -27
  60. package/dist/globals/middleware/cache.middleware.js +0 -73
  61. package/dist/globals/middleware/cache.middleware.js.map +0 -1
  62. package/dist/globals/middleware/requireContext.middleware.d.ts +0 -6
  63. package/dist/globals/middleware/requireContext.middleware.js +0 -16
  64. package/dist/globals/middleware/requireContext.middleware.js.map +0 -1
  65. package/dist/globals/middleware/retry.middleware.d.ts +0 -21
  66. package/dist/globals/middleware/retry.middleware.js +0 -61
  67. package/dist/globals/middleware/retry.middleware.js.map +0 -1
  68. package/dist/globals/middleware/timeout.middleware.d.ts +0 -9
  69. package/dist/globals/middleware/timeout.middleware.js +0 -61
  70. package/dist/globals/middleware/timeout.middleware.js.map +0 -1
  71. package/dist/globals/resources/debug/debug.resource.d.ts +0 -7
  72. package/dist/globals/resources/debug/debug.resource.js +0 -29
  73. package/dist/globals/resources/debug/debug.resource.js.map +0 -1
  74. package/dist/globals/resources/debug/debug.tag.d.ts +0 -2
  75. package/dist/globals/resources/debug/debug.tag.js +0 -12
  76. package/dist/globals/resources/debug/debug.tag.js.map +0 -1
  77. package/dist/globals/resources/debug/debugConfig.resource.d.ts +0 -22
  78. package/dist/globals/resources/debug/debugConfig.resource.js +0 -20
  79. package/dist/globals/resources/debug/debugConfig.resource.js.map +0 -1
  80. package/dist/globals/resources/debug/executionTracker.middleware.d.ts +0 -50
  81. package/dist/globals/resources/debug/executionTracker.middleware.js +0 -78
  82. package/dist/globals/resources/debug/executionTracker.middleware.js.map +0 -1
  83. package/dist/globals/resources/debug/globalEvent.hook.d.ts +0 -27
  84. package/dist/globals/resources/debug/globalEvent.hook.js +0 -38
  85. package/dist/globals/resources/debug/globalEvent.hook.js.map +0 -1
  86. package/dist/globals/resources/debug/hook.hook.d.ts +0 -30
  87. package/dist/globals/resources/debug/hook.hook.js +0 -48
  88. package/dist/globals/resources/debug/hook.hook.js.map +0 -1
  89. package/dist/globals/resources/debug/index.d.ts +0 -6
  90. package/dist/globals/resources/debug/index.js +0 -23
  91. package/dist/globals/resources/debug/index.js.map +0 -1
  92. package/dist/globals/resources/debug/middleware.hook.d.ts +0 -30
  93. package/dist/globals/resources/debug/middleware.hook.js +0 -75
  94. package/dist/globals/resources/debug/middleware.hook.js.map +0 -1
  95. package/dist/globals/resources/debug/types.d.ts +0 -25
  96. package/dist/globals/resources/debug/types.js +0 -65
  97. package/dist/globals/resources/debug/types.js.map +0 -1
  98. package/dist/globals/resources/debug/utils.d.ts +0 -2
  99. package/dist/globals/resources/debug/utils.js +0 -13
  100. package/dist/globals/resources/debug/utils.js.map +0 -1
  101. package/dist/globals/resources/queue.resource.d.ts +0 -10
  102. package/dist/globals/resources/queue.resource.js +0 -31
  103. package/dist/globals/resources/queue.resource.js.map +0 -1
  104. package/dist/globals/types.d.ts +0 -1
  105. package/dist/globals/types.js +0 -18
  106. package/dist/globals/types.js.map +0 -1
  107. package/dist/index.js +0 -48
  108. package/dist/index.js.map +0 -1
  109. package/dist/models/DependencyProcessor.d.ts +0 -48
  110. package/dist/models/DependencyProcessor.js +0 -276
  111. package/dist/models/DependencyProcessor.js.map +0 -1
  112. package/dist/models/EventManager.d.ts +0 -153
  113. package/dist/models/EventManager.js +0 -421
  114. package/dist/models/EventManager.js.map +0 -1
  115. package/dist/models/LogPrinter.d.ts +0 -55
  116. package/dist/models/LogPrinter.js +0 -202
  117. package/dist/models/LogPrinter.js.map +0 -1
  118. package/dist/models/Logger.d.ts +0 -85
  119. package/dist/models/Logger.js +0 -194
  120. package/dist/models/Logger.js.map +0 -1
  121. package/dist/models/MiddlewareManager.d.ts +0 -86
  122. package/dist/models/MiddlewareManager.js +0 -391
  123. package/dist/models/MiddlewareManager.js.map +0 -1
  124. package/dist/models/OverrideManager.d.ts +0 -13
  125. package/dist/models/OverrideManager.js +0 -84
  126. package/dist/models/OverrideManager.js.map +0 -1
  127. package/dist/models/Queue.d.ts +0 -25
  128. package/dist/models/Queue.js +0 -56
  129. package/dist/models/Queue.js.map +0 -1
  130. package/dist/models/ResourceInitializer.d.ts +0 -20
  131. package/dist/models/ResourceInitializer.js +0 -34
  132. package/dist/models/ResourceInitializer.js.map +0 -1
  133. package/dist/models/RunResult.d.ts +0 -35
  134. package/dist/models/RunResult.js +0 -62
  135. package/dist/models/RunResult.js.map +0 -1
  136. package/dist/models/Semaphore.d.ts +0 -61
  137. package/dist/models/Semaphore.js +0 -164
  138. package/dist/models/Semaphore.js.map +0 -1
  139. package/dist/models/Store.d.ts +0 -56
  140. package/dist/models/Store.js +0 -209
  141. package/dist/models/Store.js.map +0 -1
  142. package/dist/models/StoreRegistry.d.ts +0 -43
  143. package/dist/models/StoreRegistry.js +0 -375
  144. package/dist/models/StoreRegistry.js.map +0 -1
  145. package/dist/models/StoreValidator.d.ts +0 -8
  146. package/dist/models/StoreValidator.js +0 -73
  147. package/dist/models/StoreValidator.js.map +0 -1
  148. package/dist/models/TaskRunner.d.ts +0 -27
  149. package/dist/models/TaskRunner.js +0 -53
  150. package/dist/models/TaskRunner.js.map +0 -1
  151. package/dist/models/UnhandledError.d.ts +0 -11
  152. package/dist/models/UnhandledError.js +0 -32
  153. package/dist/models/UnhandledError.js.map +0 -1
  154. package/dist/models/index.d.ts +0 -11
  155. package/dist/models/index.js +0 -28
  156. package/dist/models/index.js.map +0 -1
  157. package/dist/models/utils/findCircularDependencies.d.ts +0 -16
  158. package/dist/models/utils/findCircularDependencies.js +0 -45
  159. package/dist/models/utils/findCircularDependencies.js.map +0 -1
  160. package/dist/models/utils/safeStringify.d.ts +0 -3
  161. package/dist/models/utils/safeStringify.js +0 -45
  162. package/dist/models/utils/safeStringify.js.map +0 -1
  163. package/dist/platform/browser.d.ts +0 -15
  164. package/dist/platform/browser.js +0 -98
  165. package/dist/platform/browser.js.map +0 -1
  166. package/dist/platform/index.d.ts +0 -8
  167. package/dist/platform/index.js +0 -47
  168. package/dist/platform/index.js.map +0 -1
  169. package/dist/platform/node.d.ts +0 -11
  170. package/dist/platform/node.js +0 -45
  171. package/dist/platform/node.js.map +0 -1
  172. package/dist/platform/types.d.ts +0 -28
  173. package/dist/platform/types.js +0 -19
  174. package/dist/platform/types.js.map +0 -1
  175. package/dist/platform/universal.d.ts +0 -16
  176. package/dist/platform/universal.js +0 -57
  177. package/dist/platform/universal.js.map +0 -1
  178. package/dist/processHooks.d.ts +0 -2
  179. package/dist/processHooks.js +0 -79
  180. package/dist/processHooks.js.map +0 -1
  181. package/dist/run.d.ts +0 -14
  182. package/dist/run.js +0 -126
  183. package/dist/run.js.map +0 -1
  184. package/dist/testing.d.ts +0 -25
  185. package/dist/testing.js +0 -42
  186. package/dist/testing.js.map +0 -1
  187. package/dist/tools/getCallerFile.d.ts +0 -1
  188. package/dist/tools/getCallerFile.js +0 -30
  189. package/dist/tools/getCallerFile.js.map +0 -1
  190. package/dist/types/contracts.d.ts +0 -55
  191. package/dist/types/contracts.js +0 -4
  192. package/dist/types/contracts.js.map +0 -1
  193. package/dist/types/event.d.ts +0 -74
  194. package/dist/types/event.js +0 -17
  195. package/dist/types/event.js.map +0 -1
  196. package/dist/types/hook.d.ts +0 -23
  197. package/dist/types/hook.js +0 -4
  198. package/dist/types/hook.js.map +0 -1
  199. package/dist/types/meta.d.ts +0 -18
  200. package/dist/types/meta.js +0 -7
  201. package/dist/types/meta.js.map +0 -1
  202. package/dist/types/resource.d.ts +0 -84
  203. package/dist/types/resource.js +0 -4
  204. package/dist/types/resource.js.map +0 -1
  205. package/dist/types/resourceMiddleware.d.ts +0 -47
  206. package/dist/types/resourceMiddleware.js +0 -4
  207. package/dist/types/resourceMiddleware.js.map +0 -1
  208. package/dist/types/runner.d.ts +0 -55
  209. package/dist/types/runner.js +0 -3
  210. package/dist/types/runner.js.map +0 -1
  211. package/dist/types/storeTypes.d.ts +0 -40
  212. package/dist/types/storeTypes.js +0 -3
  213. package/dist/types/storeTypes.js.map +0 -1
  214. package/dist/types/symbols.d.ts +0 -30
  215. package/dist/types/symbols.js +0 -40
  216. package/dist/types/symbols.js.map +0 -1
  217. package/dist/types/tag.d.ts +0 -46
  218. package/dist/types/tag.js +0 -4
  219. package/dist/types/tag.js.map +0 -1
  220. package/dist/types/task.d.ts +0 -44
  221. package/dist/types/task.js +0 -4
  222. package/dist/types/task.js.map +0 -1
  223. package/dist/types/taskMiddleware.d.ts +0 -48
  224. package/dist/types/taskMiddleware.js +0 -4
  225. package/dist/types/taskMiddleware.js.map +0 -1
  226. package/dist/types/utilities.d.ts +0 -110
  227. package/dist/types/utilities.js +0 -19
  228. package/dist/types/utilities.js.map +0 -1
@@ -0,0 +1,1734 @@
1
+ declare const CONTRACT: unique symbol;
2
+ type CONTRACT = typeof CONTRACT;
3
+ interface IContractable<TConfig = any, TInput = void, TOutput = void> {
4
+ readonly __containsContract: true;
5
+ readonly [CONTRACT]: {
6
+ config: TConfig;
7
+ input: TInput;
8
+ output: TOutput;
9
+ };
10
+ }
11
+ type NonVoid<T> = [T] extends [void] ? never : T;
12
+ type IsTuple<T extends readonly unknown[]> = number extends T["length"] ? false : true;
13
+ type UnionToIntersection$1<U> = (U extends any ? (arg: U) => void : never) extends (arg: infer I) => void ? I : never;
14
+ type Simplify<T> = {
15
+ [K in keyof T]: T[K];
16
+ } & {};
17
+ type IsUnknown<T> = unknown extends T ? [T] extends [unknown] ? true : false : false;
18
+ type UnknownToNever<T> = IsUnknown<T> extends true ? never : T;
19
+ type ExtractContractOf<T, Kind extends "input" | "output"> = T extends IContractable<any, infer I, infer O> ? UnknownToNever<Kind extends "input" ? NonVoid<I> : NonVoid<O>> : never;
20
+ type FilterContractsKind<TItems extends readonly unknown[], Kind extends "input" | "output", Acc extends readonly unknown[] = []> = TItems extends readonly [infer H, ...infer R] ? ExtractContractOf<H, Kind> extends never ? FilterContractsKind<R, Kind, Acc> : FilterContractsKind<R, Kind, [...Acc, ExtractContractOf<H, Kind>]> : Acc;
21
+ type ExtractContractsFromCollection<TItems extends readonly unknown[], Kind extends "input" | "output"> = IsTuple<TItems> extends true ? FilterContractsKind<TItems, Kind> : Array<ExtractContractOf<TItems[number], Kind>>;
22
+ type ExtractInputTypeFromContracts<TItems extends readonly unknown[]> = ExtractContractsFromCollection<TItems, "input">;
23
+ type ExtractOutputTypeFromContracts<TItems extends readonly unknown[]> = ExtractContractsFromCollection<TItems, "output">;
24
+ type ContractsUnionInputs<TItems extends readonly unknown[]> = ExtractInputTypeFromContracts<TItems> extends readonly (infer U)[] ? U : never;
25
+ type ContractsUnionOutputs<TItems extends readonly unknown[]> = ExtractOutputTypeFromContracts<TItems> extends readonly (infer U)[] ? U : never;
26
+ type ContractsIntersectionInputs<TItems extends readonly unknown[]> = UnionToIntersection$1<ContractsUnionInputs<TItems>>;
27
+ type ContractsIntersectionOutputs<TItems extends readonly unknown[]> = UnionToIntersection$1<ContractsUnionOutputs<TItems>>;
28
+ type HasInputContracts<TItems extends readonly unknown[]> = [
29
+ ContractsUnionInputs<TItems>
30
+ ] extends [never] ? false : true;
31
+ type HasOutputContracts<TItems extends readonly unknown[]> = [
32
+ ContractsUnionOutputs<TItems>
33
+ ] extends [never] ? false : true;
34
+ type InputContractViolationError<TItems extends readonly unknown[], TActual> = {
35
+ message: "Value does not satisfy all input contracts";
36
+ expected: Simplify<ContractsIntersectionInputs<TItems>>;
37
+ received: TActual;
38
+ };
39
+ type OutputContractViolationError<TItems extends readonly unknown[], TActual> = {
40
+ message: "Value does not satisfy all output contracts";
41
+ expected: Simplify<ContractsIntersectionOutputs<TItems>>;
42
+ received: TActual;
43
+ };
44
+ type EnsureInputSatisfiesContracts<TItems extends readonly unknown[], TValue> = [ContractsUnionInputs<TItems>] extends [never] ? TValue : TValue extends Promise<infer U> ? Promise<U extends ContractsIntersectionInputs<TItems> ? U : InputContractViolationError<TItems, U>> : TValue extends ContractsIntersectionInputs<TItems> ? TValue : InputContractViolationError<TItems, TValue>;
45
+ type EnsureOutputSatisfiesContracts<TItems extends readonly unknown[], TResponse> = [ContractsUnionOutputs<TItems>] extends [never] ? TResponse : TResponse extends Promise<infer U> ? Promise<U extends ContractsIntersectionOutputs<TItems> ? U : OutputContractViolationError<TItems, U>> : TResponse extends ContractsIntersectionOutputs<TItems> ? TResponse : OutputContractViolationError<TItems, TResponse>;
46
+
47
+ /**
48
+ * Common metadata you can attach to tasks/resources/events/middleware.
49
+ * Useful for docs, filtering and middleware decisions.
50
+ */
51
+ interface IMeta {
52
+ title?: string;
53
+ description?: string;
54
+ }
55
+ interface ITaskMeta extends IMeta {
56
+ }
57
+ interface IResourceMeta extends IMeta {
58
+ }
59
+ interface IEventMeta extends IMeta {
60
+ }
61
+ interface IMiddlewareMeta extends IMeta {
62
+ }
63
+ interface ITagMeta extends IMeta {
64
+ }
65
+
66
+ interface ITaggable {
67
+ tags: TagType[];
68
+ }
69
+ interface ITagDefinition<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> {
70
+ id: string;
71
+ meta?: ITagMeta;
72
+ configSchema?: IValidationSchema<TConfig>;
73
+ /**
74
+ * Utilizing config at definition level stores its defaults
75
+ */
76
+ config?: TConfig;
77
+ }
78
+ interface ITag<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> extends ITagDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
79
+ /**
80
+ * A special validation property.
81
+ * It resolves to `true` if TConfig only has optional keys, otherwise `false`.
82
+ */
83
+ readonly __configHasOnlyOptionalKeys: RequiredKeys<TConfig> extends never ? true : false;
84
+ config?: TConfig;
85
+ /**
86
+ * Checks if the tag exists in a taggable or a list of tags.
87
+ */
88
+ exists(target: ITaggable | TagType[]): boolean;
89
+ /**
90
+ * Creates a configured instance of the tag.
91
+ */
92
+ with(config: TConfig): ITagConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract>;
93
+ /**
94
+ * Extracts the configuration of the tag from a taggable or a list of tags.
95
+ */
96
+ extract(target: ITaggable | TagType[]): TConfig | undefined;
97
+ [symbolFilePath]: string;
98
+ [symbolTag]: true;
99
+ }
100
+ type ITagWithOptionalConfig<TValue, TEnforceInputContract, TEnforceOutputContract> = ITag<any, TEnforceInputContract, TEnforceOutputContract> & {
101
+ readonly __configHasOnlyOptionalKeys: true;
102
+ };
103
+ interface ITagConfigured<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> extends ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {
104
+ [symbolTagConfigured]: true;
105
+ config: TConfig;
106
+ }
107
+ type TagType = ITag<void, any, any> | ITagWithOptionalConfig<any, any, any> | ITagConfigured<any, any, any>;
108
+
109
+ /**
110
+ * Internal brand symbols used to tag created objects at runtime and help with
111
+ * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`
112
+ * helpers instead of touching these directly.
113
+ * @internal
114
+ */
115
+ declare const symbolTask: unique symbol;
116
+ declare const symbolResource: unique symbol;
117
+ declare const symbolResourceWithConfig: unique symbol;
118
+ declare const symbolEvent: unique symbol;
119
+ declare const symbolMiddleware: unique symbol;
120
+ /** New brands for separated middleware kinds */
121
+ declare const symbolTaskMiddleware: unique symbol;
122
+ declare const symbolResourceMiddleware: unique symbol;
123
+ declare const symbolMiddlewareConfigured: unique symbol;
124
+ /** @internal Marks hook definitions (event listeners without middleware) */
125
+ declare const symbolHook: unique symbol;
126
+ /** @internal Marks a tag definition */
127
+ declare const symbolTag: unique symbol;
128
+ declare const symbolTagConfigured: unique symbol;
129
+ /** @internal Marks an optional dependency wrapper */
130
+ declare const symbolOptionalDependency: unique symbol;
131
+ /** @internal Path to aid anonymous id generation and error messages */
132
+ declare const symbolFilePath: unique symbol;
133
+ /** @internal Marks disposable instances */
134
+ declare const symbolDispose: unique symbol;
135
+ /** @internal Link to internal Store */
136
+ declare const symbolStore: unique symbol;
137
+ /** @internal Brand used by index() resources */
138
+ declare const symbolIndexResource: unique symbol;
139
+
140
+ interface IResourceDefinition<TConfig = any, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = {}, TContext = any, THooks = any, TRegisterableItems = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[]> {
141
+ /** Stable identifier. */
142
+ id: string;
143
+ /** Static or lazy dependency map. Receives `config` when provided. */
144
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
145
+ /**
146
+ * Register other registerables (resources/tasks/middleware/events). Accepts a
147
+ * static array or a function of `config` to support dynamic wiring.
148
+ */
149
+ register?: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
150
+ /**
151
+ * Initialize and return the resource value. Called once during boot.
152
+ */
153
+ init?: (config: HasInputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureInputSatisfiesContracts<[...TTags, ...TMiddleware], TConfig> : TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => HasOutputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureOutputSatisfiesContracts<[...TTags, ...TMiddleware], TValue> : TValue;
154
+ /**
155
+ * Optional validation schema for the resource's resolved value.
156
+ * When provided, the value will be validated immediately after `init` resolves,
157
+ * without considering middleware.
158
+ */
159
+ resultSchema?: IValidationSchema<TValue extends Promise<infer U> ? U : TValue>;
160
+ /**
161
+ * Clean-up function for the resource. This is called when the resource is no longer needed.
162
+ *
163
+ * @param value The value of the resource (undefined if no init method)
164
+ * @param config The configuration it received
165
+ * @param dependencies The dependencies it needed
166
+ * @returns Promise<void>
167
+ */
168
+ dispose?: (this: any, value: TValue extends Promise<infer U> ? U : TValue, config: TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => Promise<void>;
169
+ meta?: TMeta;
170
+ /**
171
+ * Optional validation schema for runtime config validation.
172
+ * When provided, resource config will be validated when .with() is called.
173
+ */
174
+ configSchema?: IValidationSchema<TConfig>;
175
+ /**
176
+ * Safe overrides to swap behavior while preserving identities. See
177
+ * README: Overrides.
178
+ */
179
+ overrides?: Array<OverridableElements>;
180
+ /** Middleware applied around init/dispose. */
181
+ middleware?: TMiddleware;
182
+ /**
183
+ * Create a private, mutable context shared between `init` and `dispose`.
184
+ */
185
+ context?: () => TContext;
186
+ /**
187
+ * This is optional and used from an index resource to get the correct caller.
188
+ * This is the reason we allow it here as well.
189
+ */
190
+ [symbolFilePath]?: string;
191
+ /**
192
+ * This is used internally when creating index resources.
193
+ */
194
+ [symbolIndexResource]?: boolean;
195
+ tags?: TTags;
196
+ }
197
+ interface IResource<TConfig = void, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = any, TContext = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[]> extends IResourceDefinition<TConfig, TValue, TDependencies, TContext, any, any, TMeta, TTags, TMiddleware> {
198
+ id: string;
199
+ with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
200
+ register: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
201
+ overrides: Array<OverridableElements>;
202
+ middleware: TMiddleware;
203
+ [symbolFilePath]: string;
204
+ [symbolIndexResource]: boolean;
205
+ [symbolResource]: true;
206
+ /** Return an optional dependency wrapper for this resource. */
207
+ optional: () => IOptionalDependency<IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>>;
208
+ tags: TTags;
209
+ }
210
+ interface IResourceWithConfig<TConfig = any, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = any, TContext = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends IResourceMiddleware<any, any, any, any>[] = IResourceMiddleware[]> {
211
+ [symbolResourceWithConfig]: true;
212
+ /** The id of the underlying resource. */
213
+ id: string;
214
+ /** The underlying resource definition. */
215
+ resource: IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
216
+ /** The configuration captured by `.with(config)`. */
217
+ config: TConfig;
218
+ }
219
+
220
+ interface ITaskDefinition<TInput = undefined, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> {
221
+ id: string;
222
+ /**
223
+ * Access other tasks/resources/events. Can be an object or a function when
224
+ * you need late or config‑dependent resolution.
225
+ */
226
+ dependencies?: TDependencies | (() => TDependencies);
227
+ /** Middleware applied around task execution. */
228
+ middleware?: TMiddleware;
229
+ /** Optional metadata used for docs, filtering and tooling. */
230
+ meta?: TMeta;
231
+ /**
232
+ * Optional validation schema for runtime input validation.
233
+ * When provided, task input will be validated before execution.
234
+ */
235
+ inputSchema?: IValidationSchema<TInput>;
236
+ /**
237
+ * Optional validation schema for the task result.
238
+ * When provided, the result will be validated immediately after the task's
239
+ * `run` resolves, without considering middleware.
240
+ */
241
+ resultSchema?: IValidationSchema<TOutput extends Promise<infer U> ? U : never>;
242
+ run: (input: HasInputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureInputSatisfiesContracts<[...TTags, ...TMiddleware], TInput> : TInput, dependencies: DependencyValuesType<TDependencies>) => HasOutputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureOutputSatisfiesContracts<[...TTags, ...TMiddleware], TOutput> : TOutput;
243
+ /**
244
+ * Tags applied to the task that might define its behvaiour or impact the systems.
245
+ */
246
+ tags?: TTags;
247
+ }
248
+ interface ITask<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> extends ITaskDefinition<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware> {
249
+ [symbolFilePath]: string;
250
+ [symbolTask]: true;
251
+ id: string;
252
+ dependencies: TDependencies | (() => TDependencies);
253
+ computedDependencies?: DependencyValuesType<TDependencies>;
254
+ middleware: TMiddleware;
255
+ /** Return an optional dependency wrapper for this task. */
256
+ optional: () => IOptionalDependency<ITask<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware>>;
257
+ tags: TTags;
258
+ }
259
+
260
+ interface ITaskMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> {
261
+ id: string;
262
+ /** Static or lazy dependency map. */
263
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
264
+ /**
265
+ * Optional validation schema for runtime config validation.
266
+ * When provided, middleware config will be validated when .with() is called.
267
+ */
268
+ configSchema?: IValidationSchema<TConfig>;
269
+ /**
270
+ * The middleware body, called with task execution input.
271
+ */
272
+ run: (input: ITaskMiddlewareExecutionInput<TEnforceInputContract extends void ? any : TEnforceInputContract, TEnforceOutputContract extends void ? any : TEnforceOutputContract>, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
273
+ meta?: IMiddlewareMeta;
274
+ tags?: TagType[];
275
+ everywhere?: boolean | ((task: ITask<any, any, any, any>) => boolean);
276
+ }
277
+ interface ITaskMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
278
+ [symbolTaskMiddleware]: true;
279
+ [symbolFilePath]: string;
280
+ id: string;
281
+ dependencies: TDependencies | (() => TDependencies);
282
+ /** Current configuration object (empty by default). */
283
+ config: TConfig;
284
+ /** Configure the middleware and return a marked, configured instance. */
285
+ with: (config: TConfig) => ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
286
+ tags: TagType[];
287
+ }
288
+ interface ITaskMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies> {
289
+ [symbolMiddlewareConfigured]: true;
290
+ config: TConfig;
291
+ }
292
+ interface ITaskMiddlewareExecutionInput<TTaskInput = any, TTaskOutput = any> {
293
+ /** Task hook */
294
+ task: {
295
+ definition: ITask<TTaskInput, any, any, any>;
296
+ input: TTaskInput;
297
+ };
298
+ next: (taskInput?: TTaskInput) => Promise<TTaskOutput>;
299
+ }
300
+ type TaskMiddlewareAttachmentType = ITaskMiddleware<void, any, any, any> | ITaskMiddleware<{
301
+ [K in any]?: any;
302
+ }, any, any, any> | ITaskMiddlewareConfigured<any, any, any, any>;
303
+
304
+ interface IResourceMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> {
305
+ id: string;
306
+ /** Static or lazy dependency map. */
307
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
308
+ /**
309
+ * Optional validation schema for runtime config validation.
310
+ * When provided, middleware config will be validated when .with() is called.
311
+ */
312
+ configSchema?: IValidationSchema<TConfig>;
313
+ /**
314
+ * The middleware body, called with resource execution input.
315
+ */
316
+ run: (input: IResourceMiddlewareExecutionInput<TEnforceInputContract extends void ? any : TEnforceInputContract, TEnforceOutputContract extends void ? any : TEnforceOutputContract>, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
317
+ meta?: IMiddlewareMeta;
318
+ tags?: TagType[];
319
+ everywhere?: boolean | ((resource: IResource<any, any, any, any, any>) => boolean);
320
+ }
321
+ interface IResourceMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends IResourceMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
322
+ [symbolResourceMiddleware]: true;
323
+ id: string;
324
+ dependencies: TDependencies | (() => TDependencies);
325
+ /** Current configuration object (empty by default). */
326
+ config: TConfig;
327
+ /** Configure the middleware and return a marked, configured instance. */
328
+ with: (config: TConfig) => IResourceMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
329
+ [symbolFilePath]: string;
330
+ tags: TagType[];
331
+ }
332
+ interface IResourceMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends IResourceMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies> {
333
+ [symbolMiddlewareConfigured]: true;
334
+ }
335
+ interface IResourceMiddlewareExecutionInput<TResourceConfig = any, TResourceOutput = any> {
336
+ /** Resource hook */
337
+ resource: {
338
+ definition: IResource<TResourceConfig, any, any, any, any>;
339
+ config: TResourceConfig;
340
+ };
341
+ next: (resourceConfig?: TResourceConfig) => Promise<TResourceOutput>;
342
+ }
343
+ type ResourceMiddlewareAttachmentType = IResourceMiddleware<void, any, any, any> | IResourceMiddleware<{
344
+ [K in any]?: any;
345
+ }, any, any, any> | IResourceMiddlewareConfigured<any, any, any, any>;
346
+
347
+ type OnType = "*" | IEventDefinition<any> | readonly IEventDefinition<any>[];
348
+ interface IHookDefinition<TDependencies extends DependencyMapType = {}, TOn extends OnType = any, TMeta extends ITaskMeta = any> {
349
+ id: string;
350
+ dependencies?: TDependencies | (() => TDependencies);
351
+ on: TOn;
352
+ /** Listener execution order. Lower numbers run first. */
353
+ order?: number;
354
+ meta?: TMeta;
355
+ run: (event: IEventEmission<TOn extends "*" ? any : TOn extends readonly IEventDefinition<any>[] ? CommonPayload<TOn> : ExtractEventParams<TOn>>, dependencies: DependencyValuesType<TDependencies>) => Promise<any>;
356
+ tags?: TagType[];
357
+ }
358
+ interface IHook<TDependencies extends DependencyMapType = {}, TOn extends OnType = any, TMeta extends ITaskMeta = any> extends IHookDefinition<TDependencies, TOn, TMeta> {
359
+ id: string;
360
+ dependencies: TDependencies | (() => TDependencies);
361
+ [symbolFilePath]: string;
362
+ [symbolHook]: true;
363
+ tags: TagType[];
364
+ }
365
+
366
+ type EventHandlerType<T = any> = (event: IEventEmission<T>) => any | Promise<any>;
367
+ declare function onAnyOf<T extends readonly IEventDefinition<any>[]>(...defs: T): T;
368
+ /**
369
+ * Runtime guard that checks if an emission belongs to one of the given event defs.
370
+ * Narrows payload type to the intersection of the provided events' payloads.
371
+ */
372
+ declare function isOneOf<TDefs extends readonly IEventDefinition<any>[]>(emission: IEventEmission<any>, defs: TDefs): emission is IEventEmission<CommonPayload<TDefs>>;
373
+ interface IEventDefinition<TPayload = void> {
374
+ id: string;
375
+ meta?: IEventMeta;
376
+ /**
377
+ * Optional validation schema for runtime payload validation.
378
+ * When provided, event payload will be validated when emitted.
379
+ */
380
+ payloadSchema?: IValidationSchema<TPayload>;
381
+ tags?: TagType[];
382
+ }
383
+ /**
384
+ * The definioten of the event.
385
+ * This is different from the event emission.
386
+ */
387
+ interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {
388
+ id: string;
389
+ /**
390
+ * We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.
391
+ */
392
+ [symbolEvent]: true;
393
+ [symbolFilePath]: string;
394
+ /** Return an optional dependency wrapper for this event. */
395
+ optional: () => IOptionalDependency<IEvent<TPayload>>;
396
+ tags: TagType[];
397
+ }
398
+ /**
399
+ * This represents the object that is passed to event handlers
400
+ */
401
+ interface IEventEmission<TPayload = any> {
402
+ /**
403
+ * The ID of the event. This is the same as the event's ID.
404
+ * This is useful for global event listeners.
405
+ */
406
+ id: string;
407
+ /**
408
+ * The data that the event carries. It can be anything.
409
+ */
410
+ data: TPayload;
411
+ /**
412
+ * The timestamp when the event was created.
413
+ */
414
+ timestamp: Date;
415
+ /**
416
+ * The source of the event. This can be useful for debugging.
417
+ */
418
+ source: string;
419
+ /**
420
+ * Metadata associated with the event definition.
421
+ */
422
+ meta: IEventMeta;
423
+ /**
424
+ * Stops propagation to remaining event listeners.
425
+ */
426
+ stopPropagation(): void;
427
+ /**
428
+ * Returns true if propagation has been stopped.
429
+ */
430
+ isPropagationStopped(): boolean;
431
+ /**
432
+ * The tags that the event carries.
433
+ */
434
+ tags: TagType[];
435
+ }
436
+
437
+ /**
438
+ * Generic validation schema interface that can be implemented by any validation library.
439
+ * Compatible with Zod, Yup, Joi, and other validation libraries.
440
+ */
441
+ interface IValidationSchema<T = any> {
442
+ /**
443
+ * Parse and validate the input data.
444
+ * Should throw an error if validation fails.
445
+ * Can transform the data if the schema supports transformations.
446
+ */
447
+ parse(input: unknown): T;
448
+ }
449
+ /**
450
+ * Core public TypeScript types for BlueLibs Runner.
451
+ *
452
+ * This file contains the strongly-typed contract for tasks, resources, events
453
+ * and middleware. It mirrors the mental model described in the README:
454
+ * - Tasks are functions
455
+ * - Resources are singletons (with init/dispose hooks)
456
+ * - Events are simple, strongly-typed emissions
457
+ * - Middleware can target both tasks and resources
458
+ *
459
+ * DX goals:
460
+ * - Crystal‑clear generics and helper types that infer dependency shapes
461
+ * - Friendly JSDoc you can hover in editors to understand usage instantly
462
+ * - Safe overrides and strong typing around config and register mechanics
463
+ */
464
+ type RequiredKeys<T> = {
465
+ [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
466
+ }[keyof T];
467
+ /**
468
+ * The reason we accept null and undefined is because we want to be able to offer beautiful DX:
469
+ * overrides: [
470
+ * process.env.NODE_ENV === 'production' ? prodEmailer : null,
471
+ * ]
472
+ */
473
+ type OverridableElements = IResource<any, any, any, any, any> | ITask<any, any, any, any> | ITaskMiddleware<any> | IResourceMiddleware<any, any> | IResourceWithConfig<any, any, any> | IHook<any, any> | undefined | null;
474
+ /**
475
+ * A mapping of dependency keys to Runner definitions. Used in `dependencies`
476
+ * for tasks and resources. Values are later transformed into the actual
477
+ * callable/value shape by `DependencyValuesType`.
478
+ */
479
+ type DependencyMapType = Record<string, ITask<any, any, any, any, any, any> | IResource<any, any, any, any, any, any, any> | IEvent<any> | IOptionalDependency<ITask<any, any, any, any, any, any>> | IOptionalDependency<IResource<any, any, any, any, any, any, any>> | IOptionalDependency<IEvent<any>>>;
480
+ /** Wrapper type marking a dependency as optional at wiring time */
481
+ interface IOptionalDependency<T> {
482
+ /** The wrapped dependency definition */
483
+ inner: T;
484
+ /** Brand symbol for optional dependency */
485
+ [symbolOptionalDependency]: true;
486
+ }
487
+ type ExtractTaskInput<T> = T extends ITask<infer I, any, infer D> ? I : never;
488
+ type ExtractTaskOutput<T> = T extends ITask<any, infer O, infer D> ? O : never;
489
+ type ExtractResourceValue<T> = T extends IResource<any, infer V, infer D> ? V extends Promise<infer U> ? U : V : never;
490
+ type ExtractEventParams<T> = T extends IEventDefinition<infer P> ? P : T extends IEvent<infer P> ? P : never;
491
+ type UnionToIntersection<U> = (U extends any ? (x: U) => any : never) extends (x: infer I) => any ? I : never;
492
+ type CommonPayload<T extends readonly IEventDefinition<any>[] | IEventDefinition<any>> = T extends readonly IEventDefinition<any>[] ? {
493
+ [K in keyof ExtractEventParams<T[number]>]: UnionToIntersection<ExtractEventParams<T[number]> extends any ? ExtractEventParams<T[number]>[K] : never>;
494
+ } : ExtractEventParams<T>;
495
+ /**
496
+ * Task dependencies transform into callable functions: call with the task input
497
+ * and you receive the task output.
498
+ */
499
+ type TaskDependency<I, O> = (...args: I extends null | void ? [] : [I]) => O;
500
+ /**
501
+ * Resource dependencies resolve to the resource's value directly.
502
+ */
503
+ type ResourceDependency<V> = V;
504
+ /**
505
+ * Event dependencies resolve to an emitter function. If the payload type is
506
+ * `void`, the function can be called with zero args (or an empty object).
507
+ */
508
+ type EventDependency<P> = P extends void ? (() => Promise<void>) & ((input?: Record<string, never>) => Promise<void>) : (input: P) => Promise<void>;
509
+ /**
510
+ * Transforms a dependency definition into the usable shape inside `run`/`init`:
511
+ * - Task -> callable function
512
+ * - Resource -> resolved value
513
+ * - Event -> emit function
514
+ */
515
+ type DependencyValueType<T> = T extends ITask<any, any, any> ? TaskDependency<ExtractTaskInput<T>, ExtractTaskOutput<T>> : T extends IResource<any, any> ? ResourceDependency<ExtractResourceValue<T>> : T extends IEventDefinition<any> ? EventDependency<ExtractEventParams<T>> : T extends IOptionalDependency<infer U> ? DependencyValueType<U> | undefined : never;
516
+ type DependencyValuesType<T extends DependencyMapType> = {
517
+ [K in keyof T]: DependencyValueType<T[K]>;
518
+ };
519
+ type TaskLocalInterceptor<TInput, TOutput> = (next: (input: TInput) => TOutput, input: TInput) => TOutput;
520
+ type TaskDependencyWithIntercept<TInput, TOutput> = TaskDependency<TInput, TOutput> & {
521
+ intercept: (middleware: TaskLocalInterceptor<TInput, TOutput>) => void;
522
+ };
523
+ /** Resource-context dependency typing where tasks expose intercept() */
524
+ type ResourceDependencyValueType<T> = T extends ITask<any, any, any> ? TaskDependencyWithIntercept<ExtractTaskInput<T>, ExtractTaskOutput<T>> : T extends IResource<any, any> ? ResourceDependency<ExtractResourceValue<T>> : T extends IEventDefinition<any> ? EventDependency<ExtractEventParams<T>> : T extends IOptionalDependency<infer U> ? ResourceDependencyValueType<U> | undefined : never;
525
+ type ResourceDependencyValuesType<T extends DependencyMapType> = {
526
+ [K in keyof T]: ResourceDependencyValueType<T[K]>;
527
+ };
528
+ /**
529
+ * Anything you can put inside a resource's `register: []`.
530
+ * - Resources (with or without `.with()`)
531
+ * - Tasks
532
+ * - Middleware
533
+ * - Events
534
+ */
535
+ type RegisterableItems<T = any> = IResourceWithConfig<any, any, any, any, any, any, any> | IResource<void, any, any, any, any, any, any> | IResource<{
536
+ [K in any]?: any;
537
+ }, any, any, any, any, any, any> | ITask<any, any, any, any> | IHook<any, any> | ITaskMiddleware<any, any, any, any> | IResourceMiddleware<any, any, any, any> | IEvent<any> | ITag<any, any, any>;
538
+
539
+ type DebugConfig = {
540
+ logResourceConfig: boolean;
541
+ logResourceValue: boolean;
542
+ logResourceBeforeRun: boolean;
543
+ logResourceAfterRun: boolean;
544
+ logTaskBeforeRun: boolean;
545
+ logTaskInput: boolean;
546
+ logTaskOutput: boolean;
547
+ logTaskAfterRun: boolean;
548
+ logMiddlewareBeforeRun: boolean;
549
+ logMiddlewareAfterRun: boolean;
550
+ logEventEmissionOnRun: boolean;
551
+ logEventEmissionInput: boolean;
552
+ logHookTriggered: boolean;
553
+ logHookCompleted: boolean;
554
+ };
555
+ declare const allFalse: DebugConfig;
556
+ declare const levelNormal: DebugConfig;
557
+ declare const levelVerbose: DebugConfig;
558
+ /**
559
+ * If you choose to specify your own config, all values will be set to false by default and extended by your config.
560
+ */
561
+ type DebugFriendlyConfig = "normal" | "verbose" | Partial<DebugConfig>;
562
+ declare const getConfig: (config: DebugFriendlyConfig, taggable?: ITaggable) => DebugConfig;
563
+
564
+ type PrintStrategy$1 = "pretty" | "plain" | "json" | "json_pretty";
565
+ type LogLevels$1 = "trace" | "debug" | "info" | "warn" | "error" | "critical";
566
+ interface PrintableLog {
567
+ level: LogLevels$1;
568
+ source?: string;
569
+ message: any;
570
+ timestamp: Date;
571
+ error?: {
572
+ name: string;
573
+ message: string;
574
+ stack?: string;
575
+ };
576
+ data?: Record<string, any>;
577
+ context?: Record<string, any>;
578
+ }
579
+ type ColorTheme = {
580
+ trace: string;
581
+ debug: string;
582
+ info: string;
583
+ warn: string;
584
+ error: string;
585
+ critical: string;
586
+ reset: string;
587
+ bold: string;
588
+ dim: string;
589
+ blue: string;
590
+ cyan: string;
591
+ gray: string;
592
+ };
593
+ declare class LogPrinter {
594
+ private strategy;
595
+ private colors;
596
+ constructor(options: {
597
+ strategy: PrintStrategy$1;
598
+ useColors: boolean;
599
+ colorTheme?: Partial<ColorTheme>;
600
+ });
601
+ print(log: PrintableLog): void;
602
+ private pickWriter;
603
+ private formatTime;
604
+ private formatLevel;
605
+ private formatSource;
606
+ private formatMessage;
607
+ private formatError;
608
+ private formatData;
609
+ private formatContext;
610
+ private normalizeForJson;
611
+ private static NO_COLORS;
612
+ private static writers;
613
+ static setWriters(writers: Partial<{
614
+ log: (msg: any) => void;
615
+ error?: (msg: any) => void;
616
+ }>): void;
617
+ static resetWriters(): void;
618
+ }
619
+
620
+ type LogLevels = "trace" | "debug" | "info" | "warn" | "error" | "critical";
621
+ interface ILogInfo {
622
+ source?: string;
623
+ error?: unknown | Error;
624
+ data?: Record<string, any>;
625
+ context?: Record<string, any>;
626
+ [key: string]: any;
627
+ }
628
+ interface ILog {
629
+ level: LogLevels;
630
+ source?: string;
631
+ message: any;
632
+ timestamp: Date;
633
+ error?: {
634
+ name: string;
635
+ message: string;
636
+ stack?: string;
637
+ };
638
+ data?: Record<string, any>;
639
+ context?: Record<string, any>;
640
+ }
641
+ type PrintStrategy = PrintStrategy$1;
642
+ declare class Logger {
643
+ private printThreshold;
644
+ private printStrategy;
645
+ private bufferLogs;
646
+ private buffer;
647
+ private boundContext;
648
+ private isLocked;
649
+ private useColors;
650
+ private printer;
651
+ private source?;
652
+ private rootLogger?;
653
+ localListeners: Array<(log: ILog) => void | Promise<void>>;
654
+ static Severity: {
655
+ trace: number;
656
+ debug: number;
657
+ info: number;
658
+ warn: number;
659
+ error: number;
660
+ critical: number;
661
+ };
662
+ constructor(options: {
663
+ printThreshold: null | LogLevels;
664
+ printStrategy: PrintStrategy;
665
+ bufferLogs: boolean;
666
+ useColors?: boolean;
667
+ }, boundContext?: Record<string, any>, source?: string, printer?: LogPrinter);
668
+ private detectColorSupport;
669
+ /**
670
+ * Creates a new logger instance with additional bound context
671
+ */
672
+ with({ source, additionalContext: context, }: {
673
+ source?: string;
674
+ additionalContext?: Record<string, any>;
675
+ }): Logger;
676
+ /**
677
+ * Core logging method with structured LogInfo
678
+ */
679
+ log(level: LogLevels, message: any, logInfo?: ILogInfo): Promise<void>;
680
+ private extractErrorInfo;
681
+ info(message: any, logInfo?: ILogInfo): Promise<void>;
682
+ error(message: any, logInfo?: ILogInfo): Promise<void>;
683
+ warn(message: any, logInfo?: ILogInfo): Promise<void>;
684
+ debug(message: any, logInfo?: ILogInfo): Promise<void>;
685
+ trace(message: any, logInfo?: ILogInfo): Promise<void>;
686
+ critical(message: any, logInfo?: ILogInfo): Promise<void>;
687
+ /**
688
+ * Direct print for tests and advanced scenarios. Delegates to LogPrinter.
689
+ */
690
+ print(log: ILog): void;
691
+ /**
692
+ * @param listener - A listener that will be triggered for every log.
693
+ */
694
+ onLog(listener: (log: ILog) => any): void;
695
+ /**
696
+ * Marks the logger as ready.
697
+ * This is used to trigger the local listeners and print the buffered logs (if they exists)
698
+ * @returns A promise that resolves when the logger is ready.
699
+ */
700
+ lock(): Promise<void>;
701
+ private canPrint;
702
+ private triggerLogListeners;
703
+ }
704
+
705
+ type UnhandledErrorKind = "process" | "task" | "middleware" | "resourceInit" | "hook" | "run";
706
+ interface OnUnhandledErrorInfo {
707
+ error: unknown;
708
+ kind?: UnhandledErrorKind;
709
+ source?: string;
710
+ }
711
+ type OnUnhandledError = (info: OnUnhandledErrorInfo) => void | Promise<void>;
712
+ declare function createDefaultUnhandledError(logger: Logger): OnUnhandledError;
713
+ declare function bindProcessErrorHandler(handler: OnUnhandledError): (error: unknown, source: "uncaughtException" | "unhandledRejection") => void | Promise<void>;
714
+ declare function safeReportUnhandledError(handler: OnUnhandledError, info: OnUnhandledErrorInfo): Promise<void>;
715
+
716
+ type RunOptions = {
717
+ /**
718
+ * Defaults to undefined. If true, we introduce logging to the console.
719
+ */
720
+ debug?: DebugFriendlyConfig;
721
+ /**
722
+ * Configure logging settings.
723
+ */
724
+ logs?: {
725
+ /**
726
+ * Defaults to info. Use null to disable logging.
727
+ */
728
+ printThreshold?: null | LogLevels;
729
+ /**
730
+ * Defaults to PRETTY. How to print the logs.
731
+ */
732
+ printStrategy?: PrintStrategy;
733
+ /**
734
+ * Defaults to false. If true, we buffer logs until the root resource is ready.
735
+ * This provides you with the chance to see the logs before the root resource is ready.
736
+ */
737
+ bufferLogs?: boolean;
738
+ };
739
+ /**
740
+ * When true (default), installs a central error boundary that catches uncaught errors
741
+ * from process-level events and routes them to `onUnhandledError`.
742
+ */
743
+ errorBoundary?: boolean;
744
+ /**
745
+ * When true (default), installs SIGINT/SIGTERM handlers that call dispose() on the root allowing for graceful shutdown.
746
+ */
747
+ shutdownHooks?: boolean;
748
+ /**
749
+ * Custom handler for any unhandled error caught by Runner. Defaults to logging via the created logger.
750
+ */
751
+ onUnhandledError?: OnUnhandledError;
752
+ /**
753
+ * Defaults to false.
754
+ *
755
+ * Dry run mode. When true, the runner will setup the system, ensure there are no errors, but will not start the system.
756
+ * Your resources will not be initialized, and no events will be emitted. This is useful for testing and debugging.
757
+ *
758
+ * Note: this cannot catch init() errors that happen within resources.
759
+ */
760
+ dryRun?: boolean;
761
+ /**
762
+ * Defaults to true.
763
+ * When set, forces runtime cycle detection for event emissions. Disable if you're sure
764
+ * you don't have event deadlocks to improve event emission performance.
765
+ */
766
+ runtimeCycleDetection?: boolean;
767
+ };
768
+
769
+ interface ICacheInstance {
770
+ set(key: string, value: any): void;
771
+ get(key: string): any;
772
+ clear(): void;
773
+ }
774
+
775
+ type ResourceStoreElementType<C = any, V extends Promise<any> = any, D extends DependencyMapType = {}, TContext = any> = {
776
+ resource: IResource<C, V, D>;
777
+ computedDependencies?: ResourceDependencyValuesType<D>;
778
+ config: C;
779
+ value: V;
780
+ context: TContext;
781
+ isInitialized?: boolean;
782
+ };
783
+ type TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any> = {
784
+ task: ITask<Input, Output, D>;
785
+ computedDependencies: DependencyValuesType<D>;
786
+ isInitialized: boolean;
787
+ interceptors?: Array<TaskLocalInterceptor<any, any>>;
788
+ };
789
+ type HookStoreElementType<D extends DependencyMapType = any, TOn extends "*" | IEventDefinition = any> = {
790
+ hook: IHook<D, TOn>;
791
+ computedDependencies: DependencyValuesType<D>;
792
+ };
793
+ type TaskMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
794
+ middleware: ITaskMiddleware<any, TDeps>;
795
+ computedDependencies: DependencyValuesType<TDeps>;
796
+ isInitialized: boolean;
797
+ };
798
+ type ResourceMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
799
+ middleware: IResourceMiddleware<any, TDeps>;
800
+ computedDependencies: DependencyValuesType<TDeps>;
801
+ isInitialized: boolean;
802
+ };
803
+ type EventStoreElementType = {
804
+ event: IEvent<any>;
805
+ };
806
+
807
+ /**
808
+ * Core public TypeScript types for BlueLibs Runner.
809
+ *
810
+ * This file contains the strongly-typed contract for tasks, resources, events
811
+ * and middleware. It mirrors the mental model described in the README:
812
+ * - Tasks are functions
813
+ * - Resources are singletons (with init/dispose hooks)
814
+ * - Hooks are event listeners without middleware
815
+ * - Events are simple, strongly-typed emissions
816
+ * - Middleware can target both tasks and resources (taskMiddleware, resourceMiddleware)
817
+ *
818
+ * DX goals:
819
+ * - Crystal‑clear generics and helper types that infer dependency shapes
820
+ * - Friendly JSDoc you can hover in editors to understand usage instantly
821
+ * - Safe overrides and strong typing around config and register mechanics
822
+ */
823
+
824
+ type defs_CommonPayload<T extends readonly IEventDefinition<any>[] | IEventDefinition<any>> = CommonPayload<T>;
825
+ type defs_DependencyMapType = DependencyMapType;
826
+ type defs_DependencyValueType<T> = DependencyValueType<T>;
827
+ type defs_DependencyValuesType<T extends DependencyMapType> = DependencyValuesType<T>;
828
+ type defs_EventHandlerType<T = any> = EventHandlerType<T>;
829
+ type defs_EventStoreElementType = EventStoreElementType;
830
+ type defs_ExtractEventParams<T> = ExtractEventParams<T>;
831
+ type defs_HookStoreElementType<D extends DependencyMapType = any, TOn extends "*" | IEventDefinition = any> = HookStoreElementType<D, TOn>;
832
+ type defs_ICacheInstance = ICacheInstance;
833
+ type defs_IEvent<TPayload = any> = IEvent<TPayload>;
834
+ type defs_IEventDefinition<TPayload = void> = IEventDefinition<TPayload>;
835
+ type defs_IEventEmission<TPayload = any> = IEventEmission<TPayload>;
836
+ type defs_IEventMeta = IEventMeta;
837
+ type defs_IHook<TDependencies extends DependencyMapType = {}, TOn extends OnType = any, TMeta extends ITaskMeta = any> = IHook<TDependencies, TOn, TMeta>;
838
+ type defs_IHookDefinition<TDependencies extends DependencyMapType = {}, TOn extends OnType = any, TMeta extends ITaskMeta = any> = IHookDefinition<TDependencies, TOn, TMeta>;
839
+ type defs_IMeta = IMeta;
840
+ type defs_IMiddlewareMeta = IMiddlewareMeta;
841
+ type defs_IOptionalDependency<T> = IOptionalDependency<T>;
842
+ type defs_IResource<TConfig = void, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = any, TContext = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[]> = IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
843
+ type defs_IResourceDefinition<TConfig = any, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = {}, TContext = any, THooks = any, TRegisterableItems = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[]> = IResourceDefinition<TConfig, TValue, TDependencies, TContext, THooks, TRegisterableItems, TMeta, TTags, TMiddleware>;
844
+ type defs_IResourceMeta = IResourceMeta;
845
+ type defs_IResourceMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = IResourceMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
846
+ type defs_IResourceMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = IResourceMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
847
+ type defs_IResourceMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = IResourceMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
848
+ type defs_IResourceMiddlewareExecutionInput<TResourceConfig = any, TResourceOutput = any> = IResourceMiddlewareExecutionInput<TResourceConfig, TResourceOutput>;
849
+ type defs_IResourceWithConfig<TConfig = any, TValue extends Promise<any> = Promise<any>, TDependencies extends DependencyMapType = any, TContext = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends IResourceMiddleware<any, any, any, any>[] = IResourceMiddleware[]> = IResourceWithConfig<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
850
+ type defs_ITag<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> = ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;
851
+ type defs_ITagConfigured<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> = ITagConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract>;
852
+ type defs_ITagDefinition<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> = ITagDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract>;
853
+ type defs_ITagMeta = ITagMeta;
854
+ type defs_ITaggable = ITaggable;
855
+ type defs_ITask<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> = ITask<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware>;
856
+ type defs_ITaskDefinition<TInput = undefined, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> = ITaskDefinition<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware>;
857
+ type defs_ITaskMeta = ITaskMeta;
858
+ type defs_ITaskMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = ITaskMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
859
+ type defs_ITaskMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
860
+ type defs_ITaskMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> = ITaskMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
861
+ type defs_ITaskMiddlewareExecutionInput<TTaskInput = any, TTaskOutput = any> = ITaskMiddlewareExecutionInput<TTaskInput, TTaskOutput>;
862
+ type defs_IValidationSchema<T = any> = IValidationSchema<T>;
863
+ type defs_OverridableElements = OverridableElements;
864
+ type defs_RegisterableItems<T = any> = RegisterableItems<T>;
865
+ type defs_RequiredKeys<T> = RequiredKeys<T>;
866
+ type defs_ResourceDependencyValueType<T> = ResourceDependencyValueType<T>;
867
+ type defs_ResourceDependencyValuesType<T extends DependencyMapType> = ResourceDependencyValuesType<T>;
868
+ type defs_ResourceMiddlewareAttachmentType = ResourceMiddlewareAttachmentType;
869
+ type defs_ResourceMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = ResourceMiddlewareStoreElementType<TDeps>;
870
+ type defs_ResourceStoreElementType<C = any, V extends Promise<any> = any, D extends DependencyMapType = {}, TContext = any> = ResourceStoreElementType<C, V, D, TContext>;
871
+ type defs_RunOptions = RunOptions;
872
+ type defs_TagType = TagType;
873
+ type defs_TaskDependencyWithIntercept<TInput, TOutput> = TaskDependencyWithIntercept<TInput, TOutput>;
874
+ type defs_TaskLocalInterceptor<TInput, TOutput> = TaskLocalInterceptor<TInput, TOutput>;
875
+ type defs_TaskMiddlewareAttachmentType = TaskMiddlewareAttachmentType;
876
+ type defs_TaskMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = TaskMiddlewareStoreElementType<TDeps>;
877
+ type defs_TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any> = TaskStoreElementType<Input, Output, D>;
878
+ type defs_UnionToIntersection<U> = UnionToIntersection<U>;
879
+ declare const defs_isOneOf: typeof isOneOf;
880
+ declare const defs_onAnyOf: typeof onAnyOf;
881
+ declare const defs_symbolDispose: typeof symbolDispose;
882
+ declare const defs_symbolEvent: typeof symbolEvent;
883
+ declare const defs_symbolFilePath: typeof symbolFilePath;
884
+ declare const defs_symbolHook: typeof symbolHook;
885
+ declare const defs_symbolIndexResource: typeof symbolIndexResource;
886
+ declare const defs_symbolMiddleware: typeof symbolMiddleware;
887
+ declare const defs_symbolMiddlewareConfigured: typeof symbolMiddlewareConfigured;
888
+ declare const defs_symbolOptionalDependency: typeof symbolOptionalDependency;
889
+ declare const defs_symbolResource: typeof symbolResource;
890
+ declare const defs_symbolResourceMiddleware: typeof symbolResourceMiddleware;
891
+ declare const defs_symbolResourceWithConfig: typeof symbolResourceWithConfig;
892
+ declare const defs_symbolStore: typeof symbolStore;
893
+ declare const defs_symbolTag: typeof symbolTag;
894
+ declare const defs_symbolTagConfigured: typeof symbolTagConfigured;
895
+ declare const defs_symbolTask: typeof symbolTask;
896
+ declare const defs_symbolTaskMiddleware: typeof symbolTaskMiddleware;
897
+ declare namespace defs {
898
+ export { type defs_CommonPayload as CommonPayload, type defs_DependencyMapType as DependencyMapType, type defs_DependencyValueType as DependencyValueType, type defs_DependencyValuesType as DependencyValuesType, type defs_EventHandlerType as EventHandlerType, type defs_EventStoreElementType as EventStoreElementType, type defs_ExtractEventParams as ExtractEventParams, type defs_HookStoreElementType as HookStoreElementType, type defs_ICacheInstance as ICacheInstance, type defs_IEvent as IEvent, type defs_IEventDefinition as IEventDefinition, type defs_IEventEmission as IEventEmission, type defs_IEventMeta as IEventMeta, type defs_IHook as IHook, type defs_IHookDefinition as IHookDefinition, type defs_IMeta as IMeta, type defs_IMiddlewareMeta as IMiddlewareMeta, type defs_IOptionalDependency as IOptionalDependency, type defs_IResource as IResource, type defs_IResourceDefinition as IResourceDefinition, type defs_IResourceMeta as IResourceMeta, type defs_IResourceMiddleware as IResourceMiddleware, type defs_IResourceMiddlewareConfigured as IResourceMiddlewareConfigured, type defs_IResourceMiddlewareDefinition as IResourceMiddlewareDefinition, type defs_IResourceMiddlewareExecutionInput as IResourceMiddlewareExecutionInput, type defs_IResourceWithConfig as IResourceWithConfig, type defs_ITag as ITag, type defs_ITagConfigured as ITagConfigured, type defs_ITagDefinition as ITagDefinition, type defs_ITagMeta as ITagMeta, type defs_ITaggable as ITaggable, type defs_ITask as ITask, type defs_ITaskDefinition as ITaskDefinition, type defs_ITaskMeta as ITaskMeta, type defs_ITaskMiddleware as ITaskMiddleware, type defs_ITaskMiddlewareConfigured as ITaskMiddlewareConfigured, type defs_ITaskMiddlewareDefinition as ITaskMiddlewareDefinition, type defs_ITaskMiddlewareExecutionInput as ITaskMiddlewareExecutionInput, type defs_IValidationSchema as IValidationSchema, type defs_OverridableElements as OverridableElements, type defs_RegisterableItems as RegisterableItems, type defs_RequiredKeys as RequiredKeys, type defs_ResourceDependencyValueType as ResourceDependencyValueType, type defs_ResourceDependencyValuesType as ResourceDependencyValuesType, type defs_ResourceMiddlewareAttachmentType as ResourceMiddlewareAttachmentType, type defs_ResourceMiddlewareStoreElementType as ResourceMiddlewareStoreElementType, type defs_ResourceStoreElementType as ResourceStoreElementType, type defs_RunOptions as RunOptions, type defs_TagType as TagType, type defs_TaskDependencyWithIntercept as TaskDependencyWithIntercept, type defs_TaskLocalInterceptor as TaskLocalInterceptor, type defs_TaskMiddlewareAttachmentType as TaskMiddlewareAttachmentType, type defs_TaskMiddlewareStoreElementType as TaskMiddlewareStoreElementType, type defs_TaskStoreElementType as TaskStoreElementType, type defs_UnionToIntersection as UnionToIntersection, defs_isOneOf as isOneOf, defs_onAnyOf as onAnyOf, defs_symbolDispose as symbolDispose, defs_symbolEvent as symbolEvent, defs_symbolFilePath as symbolFilePath, defs_symbolHook as symbolHook, defs_symbolIndexResource as symbolIndexResource, defs_symbolMiddleware as symbolMiddleware, defs_symbolMiddlewareConfigured as symbolMiddlewareConfigured, defs_symbolOptionalDependency as symbolOptionalDependency, defs_symbolResource as symbolResource, defs_symbolResourceMiddleware as symbolResourceMiddleware, defs_symbolResourceWithConfig as symbolResourceWithConfig, defs_symbolStore as symbolStore, defs_symbolTag as symbolTag, defs_symbolTagConfigured as symbolTagConfigured, defs_symbolTask as symbolTask, defs_symbolTaskMiddleware as symbolTaskMiddleware };
899
+ }
900
+
901
+ interface TimeoutMiddlewareConfig {
902
+ /**
903
+ * Maximum time in milliseconds before the wrapped operation is aborted
904
+ * and a timeout error is thrown. Defaults to 5000ms.
905
+ */
906
+ ttl: number;
907
+ }
908
+
909
+ /**
910
+ * Configuration options for the retry middleware
911
+ */
912
+ interface RetryMiddlewareConfig {
913
+ /**
914
+ * Maximum number of retry attempts (default: 3)
915
+ */
916
+ retries?: number;
917
+ /**
918
+ * Callback to determine if retry should stop based on error
919
+ * @default () => false (retry all errors)
920
+ */
921
+ stopRetryIf?: (error: Error) => boolean;
922
+ /**
923
+ * Custom delay strategy function
924
+ * @default Exponential backoff starting at 100ms
925
+ */
926
+ delayStrategy?: (attempt: number, error: Error) => number;
927
+ }
928
+
929
+ /**
930
+ * Base error class for all BlueLibs Runner errors
931
+ */
932
+ declare class RuntimeError extends Error {
933
+ constructor(message: string);
934
+ }
935
+ /**
936
+ * Error thrown when attempting to register a component with a duplicate ID
937
+ */
938
+ declare class DuplicateRegistrationError extends RuntimeError {
939
+ constructor(type: string, id: string);
940
+ }
941
+ /**
942
+ * Error thrown when a dependency is not found in the registry
943
+ */
944
+ declare class DependencyNotFoundError extends RuntimeError {
945
+ constructor(key: string);
946
+ }
947
+ /**
948
+ * Error thrown when an unknown item type is encountered
949
+ */
950
+ declare class UnknownItemTypeError extends RuntimeError {
951
+ constructor(item: any);
952
+ }
953
+ /**
954
+ * Error thrown whenever a requested context is not available.
955
+ */
956
+ declare class ContextError extends Error {
957
+ constructor(message: string);
958
+ }
959
+ /**
960
+ * Error thrown when circular dependencies are detected
961
+ */
962
+ declare class CircularDependenciesError extends RuntimeError {
963
+ constructor(cycles: string[]);
964
+ }
965
+ /**
966
+ * Error thrown when an event is not found in the registry
967
+ */
968
+ declare class EventNotFoundError extends RuntimeError {
969
+ constructor(id: string);
970
+ }
971
+ /**
972
+ * Error thrown when a resource is not found in the store
973
+ */
974
+ declare class ResourceNotFoundError extends RuntimeError {
975
+ constructor(id: string);
976
+ }
977
+ declare class MiddlewareNotRegisteredError extends RuntimeError {
978
+ constructor(type: "task" | "resource", source: string, middlewareId: string);
979
+ }
980
+ /**
981
+ * Error thrown when a tag is not found in the registry
982
+ */
983
+ declare class TagNotFoundError extends RuntimeError {
984
+ constructor(id: string);
985
+ }
986
+ /**
987
+ * Error thrown when attempting to modify a locked component
988
+ */
989
+ declare class LockedError extends RuntimeError {
990
+ constructor(what: string);
991
+ }
992
+ /**
993
+ * Error thrown when attempting to initialize a store that's already initialized
994
+ */
995
+ declare class StoreAlreadyInitializedError extends RuntimeError {
996
+ constructor();
997
+ }
998
+ /**
999
+ * Error thrown when validation fails for task input, resource config, middleware config, or event payload
1000
+ */
1001
+ declare class ValidationError extends RuntimeError {
1002
+ constructor(type: string, id: string, originalError: Error | string);
1003
+ }
1004
+ /**
1005
+ * Error thrown when an event emission cycle is detected
1006
+ */
1007
+ declare class EventCycleError extends RuntimeError {
1008
+ constructor(path: Array<{
1009
+ id: string;
1010
+ source: string;
1011
+ }>);
1012
+ }
1013
+ /**
1014
+ * Error thrown when a compile-time event emission cycle is detected
1015
+ */
1016
+ declare class EventEmissionCycleError extends RuntimeError {
1017
+ constructor(cycles: string[]);
1018
+ }
1019
+ /**
1020
+ * Error thrown when a platform function is not supported in the current environment.
1021
+ */
1022
+ declare class PlatformUnsupportedFunction extends RuntimeError {
1023
+ constructor(functionName: string);
1024
+ }
1025
+
1026
+ type errors_CircularDependenciesError = CircularDependenciesError;
1027
+ declare const errors_CircularDependenciesError: typeof CircularDependenciesError;
1028
+ type errors_ContextError = ContextError;
1029
+ declare const errors_ContextError: typeof ContextError;
1030
+ type errors_DependencyNotFoundError = DependencyNotFoundError;
1031
+ declare const errors_DependencyNotFoundError: typeof DependencyNotFoundError;
1032
+ type errors_DuplicateRegistrationError = DuplicateRegistrationError;
1033
+ declare const errors_DuplicateRegistrationError: typeof DuplicateRegistrationError;
1034
+ type errors_EventCycleError = EventCycleError;
1035
+ declare const errors_EventCycleError: typeof EventCycleError;
1036
+ type errors_EventEmissionCycleError = EventEmissionCycleError;
1037
+ declare const errors_EventEmissionCycleError: typeof EventEmissionCycleError;
1038
+ type errors_EventNotFoundError = EventNotFoundError;
1039
+ declare const errors_EventNotFoundError: typeof EventNotFoundError;
1040
+ type errors_LockedError = LockedError;
1041
+ declare const errors_LockedError: typeof LockedError;
1042
+ type errors_MiddlewareNotRegisteredError = MiddlewareNotRegisteredError;
1043
+ declare const errors_MiddlewareNotRegisteredError: typeof MiddlewareNotRegisteredError;
1044
+ type errors_PlatformUnsupportedFunction = PlatformUnsupportedFunction;
1045
+ declare const errors_PlatformUnsupportedFunction: typeof PlatformUnsupportedFunction;
1046
+ type errors_ResourceNotFoundError = ResourceNotFoundError;
1047
+ declare const errors_ResourceNotFoundError: typeof ResourceNotFoundError;
1048
+ type errors_RuntimeError = RuntimeError;
1049
+ declare const errors_RuntimeError: typeof RuntimeError;
1050
+ type errors_StoreAlreadyInitializedError = StoreAlreadyInitializedError;
1051
+ declare const errors_StoreAlreadyInitializedError: typeof StoreAlreadyInitializedError;
1052
+ type errors_TagNotFoundError = TagNotFoundError;
1053
+ declare const errors_TagNotFoundError: typeof TagNotFoundError;
1054
+ type errors_UnknownItemTypeError = UnknownItemTypeError;
1055
+ declare const errors_UnknownItemTypeError: typeof UnknownItemTypeError;
1056
+ type errors_ValidationError = ValidationError;
1057
+ declare const errors_ValidationError: typeof ValidationError;
1058
+ declare namespace errors {
1059
+ export { errors_CircularDependenciesError as CircularDependenciesError, errors_ContextError as ContextError, errors_DependencyNotFoundError as DependencyNotFoundError, errors_DuplicateRegistrationError as DuplicateRegistrationError, errors_EventCycleError as EventCycleError, errors_EventEmissionCycleError as EventEmissionCycleError, errors_EventNotFoundError as EventNotFoundError, errors_LockedError as LockedError, errors_MiddlewareNotRegisteredError as MiddlewareNotRegisteredError, errors_PlatformUnsupportedFunction as PlatformUnsupportedFunction, errors_ResourceNotFoundError as ResourceNotFoundError, errors_RuntimeError as RuntimeError, errors_StoreAlreadyInitializedError as StoreAlreadyInitializedError, errors_TagNotFoundError as TagNotFoundError, errors_UnknownItemTypeError as UnknownItemTypeError, errors_ValidationError as ValidationError };
1060
+ }
1061
+
1062
+ /**
1063
+ * The generic Context object returned by `createContext`.
1064
+ */
1065
+ interface Context<T> {
1066
+ /** unique symbol used as key in the AsyncLocalStorage map */
1067
+ readonly id: symbol;
1068
+ /** Retrieve the current context value or throw */
1069
+ use(): T;
1070
+ /**
1071
+ * Provide a value for this context during the lifetime of `fn()`
1072
+ */
1073
+ provide<R>(value: T, fn: () => Promise<R> | R): Promise<R> | R;
1074
+ /**
1075
+ * Generates a middleware that guarantees the context exists (and optionally
1076
+ * enforces that certain keys are present on the context object).
1077
+ */
1078
+ require<K extends keyof T = never>(keys?: K[]): ITaskMiddlewareConfigured<{
1079
+ context: Context<T>;
1080
+ }>;
1081
+ }
1082
+ /**
1083
+ * Create a new typed Context. The result contains helpers similar to React’s
1084
+ * Context API but adapted for async usage in Runner.
1085
+ */
1086
+ declare function createContext<T>(name?: string): Context<T>;
1087
+
1088
+ /**
1089
+ * Options for configuring event listeners
1090
+ */
1091
+ interface IEventHandlerOptions<T = any> {
1092
+ order?: number;
1093
+ filter?: (event: IEventEmission<T>) => boolean;
1094
+ /**
1095
+ * Represents the listener ID. Use this to avoid a listener calling himself.
1096
+ */
1097
+ id?: string;
1098
+ }
1099
+ /**
1100
+ * Interceptor for event emissions
1101
+ */
1102
+ type EventEmissionInterceptor = (next: (event: IEventEmission<any>) => Promise<void>, event: IEventEmission<any>) => Promise<void>;
1103
+ /**
1104
+ * Interceptor for hook execution
1105
+ */
1106
+ type HookExecutionInterceptor = (next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>, hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>;
1107
+ /**
1108
+ * EventManager handles event emission, listener registration, and event processing.
1109
+ * It supports both specific event listeners and global listeners that handle all events.
1110
+ * Listeners are processed in order based on their priority.
1111
+ */
1112
+ declare class EventManager {
1113
+ #private;
1114
+ private listeners;
1115
+ private globalListeners;
1116
+ private cachedMergedListeners;
1117
+ private globalListenersCacheValid;
1118
+ private emissionInterceptors;
1119
+ private hookInterceptors;
1120
+ private readonly emissionStack;
1121
+ private readonly currentHookIdContext;
1122
+ private readonly runtimeCycleDetection;
1123
+ constructor(options?: {
1124
+ runtimeCycleDetection?: boolean;
1125
+ });
1126
+ /**
1127
+ * Gets the current lock status of the EventManager
1128
+ */
1129
+ get isLocked(): boolean;
1130
+ /**
1131
+ * Locks the EventManager, preventing any further modifications to listeners
1132
+ */
1133
+ lock(): void;
1134
+ /**
1135
+ * Emits an event to all registered listeners for that event type.
1136
+ * Listeners are processed in order of priority and can stop event propagation.
1137
+ *
1138
+ * @param eventDefinition - The event definition to emit
1139
+ * @param data - The event payload data
1140
+ * @param source - The source identifier of the event emitter
1141
+ */
1142
+ emit<TInput>(eventDefinition: IEvent<TInput>, data: TInput, source: string): Promise<void>;
1143
+ /**
1144
+ * Registers an event listener for specific event(s).
1145
+ * Listeners are ordered by priority and executed in ascending order.
1146
+ *
1147
+ * @param event - The event definition(s) to listen for
1148
+ * @param handler - The callback function to handle the event
1149
+ * @param options - Configuration options for the listener
1150
+ */
1151
+ addListener<T>(event: IEvent<T> | Array<IEvent<T>>, handler: EventHandlerType<T>, options?: IEventHandlerOptions<T>): void;
1152
+ /**
1153
+ * Registers a global event listener that handles all events.
1154
+ * Global listeners are mixed with specific listeners and ordered by priority.
1155
+ *
1156
+ * @param handler - The callback function to handle events
1157
+ * @param options - Configuration options for the listener
1158
+ */
1159
+ addGlobalListener(handler: EventHandlerType, options?: IEventHandlerOptions): void;
1160
+ /**
1161
+ * Checks if there are any listeners registered for the given event
1162
+ *
1163
+ * @param eventDefinition - The event definition to check
1164
+ * @returns true if listeners exist, false otherwise
1165
+ */
1166
+ hasListeners<T>(eventDefinition: IEvent<T>): boolean;
1167
+ /**
1168
+ * Adds an interceptor for all event emissions
1169
+ * Interceptors are executed in the order they are added, with the ability to
1170
+ * modify, log, or prevent event emissions
1171
+ *
1172
+ * @param interceptor - The interceptor function to add
1173
+ */
1174
+ intercept(interceptor: EventEmissionInterceptor): void;
1175
+ /**
1176
+ * Adds an interceptor for hook execution
1177
+ * Interceptors are executed in the order they are added, with the ability to
1178
+ * modify, log, or prevent hook execution
1179
+ *
1180
+ * @param interceptor - The interceptor function to add
1181
+ */
1182
+ interceptHook(interceptor: HookExecutionInterceptor): void;
1183
+ /**
1184
+ * Executes a hook with all registered hook interceptors applied
1185
+ * This method should be used by TaskRunner when executing hooks
1186
+ *
1187
+ * @param hook - The hook to execute
1188
+ * @param event - The event that triggered the hook
1189
+ * @param computedDependencies - The computed dependencies for the hook
1190
+ * @returns Promise resolving to the hook execution result
1191
+ */
1192
+ executeHookWithInterceptors(hook: IHook<any, any>, event: IEventEmission<any>, computedDependencies: DependencyValuesType<any>): Promise<any>;
1193
+ /**
1194
+ * Throws an error if the EventManager is locked
1195
+ */
1196
+ private checkLock;
1197
+ /**
1198
+ * Merges two sorted arrays of listeners while maintaining order.
1199
+ * Used to combine event-specific listeners with global listeners.
1200
+ *
1201
+ * @param a - First array of listeners
1202
+ * @param b - Second array of listeners
1203
+ * @returns Merged and sorted array of listeners
1204
+ */
1205
+ private mergeSortedListeners;
1206
+ /**
1207
+ * Inserts a new listener into a sorted array using binary search.
1208
+ * Maintains order based on listener priority.
1209
+ *
1210
+ * @param listeners - Array to insert into
1211
+ * @param newListener - Listener to insert
1212
+ */
1213
+ private insertListener;
1214
+ /**
1215
+ * Returns true if the given emission carries the tag that marks
1216
+ * it as excluded from global ("*") listeners.
1217
+ *
1218
+ * @param event - The event emission to check
1219
+ * @returns true if event should exclude global listeners
1220
+ */
1221
+ private isExcludedFromGlobal;
1222
+ /**
1223
+ * Retrieves cached merged listeners for an event, or creates them if not cached.
1224
+ * Combines event-specific listeners with global listeners and sorts them by priority.
1225
+ *
1226
+ * @param eventId - The event ID to get listeners for
1227
+ * @returns Array of merged listeners sorted by priority
1228
+ */
1229
+ private getCachedMergedListeners;
1230
+ /**
1231
+ * Invalidates the cached merged listeners.
1232
+ * If eventId is provided, only invalidates cache for that specific event.
1233
+ * Otherwise, invalidates the global cache.
1234
+ *
1235
+ * @param eventId - Optional specific event ID to invalidate
1236
+ */
1237
+ private invalidateCache;
1238
+ }
1239
+
1240
+ declare class TaskRunner {
1241
+ protected readonly store: Store;
1242
+ protected readonly eventManager: EventManager;
1243
+ protected readonly logger: Logger;
1244
+ protected readonly runnerStore: Map<string | symbol, (input: any) => Promise<any>>;
1245
+ constructor(store: Store, eventManager: EventManager, logger: Logger);
1246
+ private readonly middlewareManager;
1247
+ /**
1248
+ * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
1249
+ * This function can throw only if any of the event listeners or run function throws
1250
+ * @param task the task to be run
1251
+ * @param input the input to be passed to the task
1252
+ */
1253
+ run<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>, input?: TInput): Promise<TOutput | undefined>;
1254
+ /**
1255
+ * Creates the function with the chain of middleware.
1256
+ * @param task
1257
+ * @param input
1258
+ * @param taskDependencies
1259
+ * @returns
1260
+ */
1261
+ protected createRunnerWithMiddleware<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>): (input: any) => Promise<TOutput | (TOutput extends Promise<infer U> ? U : never)>;
1262
+ }
1263
+
1264
+ /**
1265
+ * Interceptor for task middleware execution
1266
+ */
1267
+ type TaskMiddlewareInterceptor = (next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>, input: ITaskMiddlewareExecutionInput<any>) => Promise<any>;
1268
+ /**
1269
+ * Interceptor for resource middleware execution
1270
+ */
1271
+ type ResourceMiddlewareInterceptor = (next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>, input: IResourceMiddlewareExecutionInput<any>) => Promise<any>;
1272
+ /**
1273
+ * Centralizes middleware composition and execution for both tasks and resources.
1274
+ * Keeps observability emissions and unhandled error routing consistent.
1275
+ */
1276
+ declare class MiddlewareManager {
1277
+ #private;
1278
+ protected readonly store: Store;
1279
+ protected readonly eventManager: EventManager;
1280
+ protected readonly logger: Logger;
1281
+ private taskMiddlewareInterceptors;
1282
+ private resourceMiddlewareInterceptors;
1283
+ private perMiddlewareInterceptors;
1284
+ private perResourceMiddlewareInterceptors;
1285
+ constructor(store: Store, eventManager: EventManager, logger: Logger);
1286
+ /**
1287
+ * Gets the current lock status of the MiddlewareManager
1288
+ */
1289
+ get isLocked(): boolean;
1290
+ /**
1291
+ * Locks the MiddlewareManager, preventing any further modifications to interceptors
1292
+ */
1293
+ lock(): void;
1294
+ /**
1295
+ * Throws an error if the MiddlewareManager is locked
1296
+ */
1297
+ private checkLock;
1298
+ /**
1299
+ * Adds an interceptor for task or resource middleware execution
1300
+ * Interceptors are executed in the order they are added, with the ability to
1301
+ * modify, log, or prevent middleware execution
1302
+ *
1303
+ * @param kind - The type of middleware to intercept ("task" or "resource")
1304
+ * @param interceptor - The interceptor function to add
1305
+ */
1306
+ intercept(kind: "task" | "resource", interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor): void;
1307
+ /**
1308
+ * Adds an interceptor for a specific middleware instance with better type safety
1309
+ * This method automatically determines the type and provides type-safe access
1310
+ *
1311
+ * @param middleware - The middleware instance to intercept
1312
+ * @param interceptor - The interceptor function with proper typing
1313
+ */
1314
+ interceptMiddleware(middleware: ITaskMiddleware<any, any, any, any> | IResourceMiddleware<any, any, any, any>, interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor): void;
1315
+ /**
1316
+ * Wrap a middleware with its specific interceptors in onion style
1317
+ */
1318
+ private wrapMiddlewareWithInterceptors;
1319
+ /**
1320
+ * Wrap a resource middleware with its specific interceptors in onion style
1321
+ */
1322
+ private wrapResourceMiddlewareWithInterceptors;
1323
+ /**
1324
+ * Compose a runner for a task with its local interceptors and applicable middlewares.
1325
+ * Returns a function that accepts the task input and resolves to the task output.
1326
+ */
1327
+ composeTaskRunner<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>): (input: any) => Promise<TOutput | (TOutput extends Promise<infer U> ? U : never)>;
1328
+ /**
1329
+ * Run a resource init wrapped with its applicable middlewares.
1330
+ */
1331
+ runResourceInit<C, V extends Promise<any>, D extends DependencyMapType, TContext>(resource: IResource<C, V, D, TContext>, config: C, dependencies: any, context: TContext): Promise<V | undefined>;
1332
+ private getApplicableTaskMiddlewares;
1333
+ private getApplicableResourceMiddlewares;
1334
+ /**
1335
+ * @param task
1336
+ * @returns
1337
+ */
1338
+ getEverywhereMiddlewareForTasks(task: ITask<any, any, any, any>): ITaskMiddleware[];
1339
+ /**
1340
+ * Returns all global middleware for resource, which do not depend on the target resource.
1341
+ */
1342
+ getEverywhereMiddlewareForResources(target: IResource<any, any, any, any>): IResourceMiddleware[];
1343
+ }
1344
+
1345
+ /**
1346
+ * Store class which is used to store all the resources, tasks, middleware and events.
1347
+ */
1348
+ declare class Store {
1349
+ #private;
1350
+ protected readonly eventManager: EventManager;
1351
+ protected readonly logger: Logger;
1352
+ readonly onUnhandledError: OnUnhandledError;
1353
+ root: ResourceStoreElementType;
1354
+ private registry;
1355
+ private overrideManager;
1356
+ private validator;
1357
+ private taskRunner?;
1358
+ private middlewareManager;
1359
+ constructor(eventManager: EventManager, logger: Logger, onUnhandledError: OnUnhandledError);
1360
+ get tasks(): Map<string, TaskStoreElementType>;
1361
+ get hooks(): Map<string, HookStoreElementType>;
1362
+ get resources(): Map<string, ResourceStoreElementType>;
1363
+ get events(): Map<string, EventStoreElementType>;
1364
+ get taskMiddlewares(): Map<string, TaskMiddlewareStoreElementType>;
1365
+ get resourceMiddlewares(): Map<string, ResourceMiddlewareStoreElementType>;
1366
+ get tags(): Map<string, ITag<void, void, void>>;
1367
+ get overrides(): Map<string, IResourceMiddleware<any, void, void, any> | ITask<any, any, {}, any, TagType[], TaskMiddlewareAttachmentType[]> | IHook<{}, any, any> | IResource<void, Promise<any>, any, any, any, TagType[], ResourceMiddlewareAttachmentType[]> | ITaskMiddleware<any, void, void, any> | IResourceWithConfig<any, Promise<any>, any, any, any, TagType[], IResourceMiddleware<any, void, void, any>[]>>;
1368
+ get overrideRequests(): Set<{
1369
+ source: string;
1370
+ override: RegisterableItems;
1371
+ }>;
1372
+ getMiddlewareManager(): MiddlewareManager;
1373
+ get isLocked(): boolean;
1374
+ lock(): void;
1375
+ checkLock(): void;
1376
+ private registerGlobalComponents;
1377
+ setTaskRunner(taskRunner: TaskRunner): void;
1378
+ private setupRootResource;
1379
+ validateDependencyGraph(): void;
1380
+ validateEventEmissionGraph(): void;
1381
+ initializeStore(root: IResource<any, any, any, any, any>, config: any): void;
1382
+ dispose(): Promise<void>;
1383
+ processOverrides(): void;
1384
+ storeGenericItem<C>(item: RegisterableItems): void;
1385
+ /**
1386
+ * Returns all tasks with the given tag.
1387
+ * @param tag - The tag to filter by.
1388
+ * @returns The tasks with the given tag.
1389
+ */
1390
+ getTasksWithTag(tag: string | ITag): ITask<any, any, any, any, TagType[], TaskMiddlewareAttachmentType[]>[];
1391
+ getResourcesWithTag(tag: string | ITag): IResource<any, any, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>[];
1392
+ }
1393
+
1394
+ declare class ResourceInitializer {
1395
+ protected readonly store: Store;
1396
+ protected readonly eventManager: EventManager;
1397
+ protected readonly logger: Logger;
1398
+ constructor(store: Store, eventManager: EventManager, logger: Logger);
1399
+ private readonly middlewareManager;
1400
+ /**
1401
+ * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
1402
+ * This function can throw only if any of the event listeners or run function throws
1403
+ */
1404
+ initializeResource<TConfig = null, TValue extends Promise<any> = Promise<any>, TDeps extends DependencyMapType = {}, TContext = any>(resource: IResource<TConfig, TValue, TDeps>, config: TConfig, dependencies: ResourceDependencyValuesType<TDeps>): Promise<{
1405
+ value: TValue;
1406
+ context: TContext;
1407
+ }>;
1408
+ initWithMiddleware<C, V extends Promise<any>, D extends DependencyMapType, TContext>(resource: IResource<C, V, D, TContext>, config: C, dependencies: ResourceDependencyValuesType<D>, context: TContext): Promise<V | undefined>;
1409
+ }
1410
+
1411
+ /**
1412
+ * This class is responsible of setting up dependencies with their respective computedValues.
1413
+ * Note that all elements must have been previously registered otherwise errors will be thrown
1414
+ * when trying to depend on something not in the store.
1415
+ */
1416
+ declare class DependencyProcessor {
1417
+ protected readonly store: Store;
1418
+ protected readonly eventManager: EventManager;
1419
+ protected readonly taskRunner: TaskRunner;
1420
+ protected readonly resourceInitializer: ResourceInitializer;
1421
+ protected readonly logger: Logger;
1422
+ constructor(store: Store, eventManager: EventManager, taskRunner: TaskRunner, logger: Logger);
1423
+ /**
1424
+ * This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
1425
+ */
1426
+ computeAllDependencies(): Promise<void>;
1427
+ private computeTaskDependencies;
1428
+ initializeUninitializedResources(): Promise<void>;
1429
+ /**
1430
+ * Processes dependencies and hooks
1431
+ * @param resource
1432
+ */
1433
+ protected processResourceDependencies<TD extends DependencyMapType>(resource: ResourceStoreElementType<any, any, TD>): Promise<void>;
1434
+ private wrapResourceDependencies;
1435
+ private makeTaskWithIntercept;
1436
+ initializeRoot(): Promise<void>;
1437
+ /**
1438
+ * Processes all hooks, should run before emission of any event.
1439
+ */
1440
+ attachListeners(): void;
1441
+ extractDependencies<T extends DependencyMapType>(map: T, source: string): Promise<DependencyValuesType<T>>;
1442
+ extractDependency(object: any, source: string): Promise<any>;
1443
+ /**
1444
+ * Converts the event into a running functions with real inputs
1445
+ * @param object
1446
+ * @returns
1447
+ */
1448
+ extractEventDependency(object: IEvent<any>, source: string): (input: any) => Promise<void>;
1449
+ extractTaskDependency(object: ITask<any, any, {}>): Promise<(input: unknown) => Promise<any>>;
1450
+ extractResourceDependency(object: IResource<any, any, any>): Promise<any>;
1451
+ }
1452
+
1453
+ /**
1454
+ * A semaphore that limits the number of concurrent operations.
1455
+ * Used to prevent connection pool exhaustion by limiting concurrent
1456
+ * database operations to the pool size.
1457
+ */
1458
+ declare class Semaphore {
1459
+ private permits;
1460
+ private readonly waitingQueue;
1461
+ private disposed;
1462
+ private readonly maxPermits;
1463
+ constructor(maxPermits: number);
1464
+ /**
1465
+ * Acquire a permit. If no permits are available, waits until one becomes available.
1466
+ */
1467
+ acquire(options?: {
1468
+ timeout?: number;
1469
+ signal?: AbortSignal;
1470
+ }): Promise<void>;
1471
+ /**
1472
+ * Release a permit, allowing waiting operations to proceed.
1473
+ */
1474
+ release(): void;
1475
+ private removeFromQueue;
1476
+ /**
1477
+ * Execute a function with a permit, automatically releasing it afterwards.
1478
+ */
1479
+ withPermit<T>(fn: () => Promise<T>, options?: {
1480
+ timeout?: number;
1481
+ signal?: AbortSignal;
1482
+ }): Promise<T>;
1483
+ /**
1484
+ * Dispose the semaphore, rejecting all waiting operations and preventing new ones.
1485
+ */
1486
+ dispose(): void;
1487
+ /**
1488
+ * Get current number of available permits (for debugging)
1489
+ */
1490
+ getAvailablePermits(): number;
1491
+ /**
1492
+ * Get current number of waiting operations (for debugging)
1493
+ */
1494
+ getWaitingCount(): number;
1495
+ /**
1496
+ * Get maximum number of permits
1497
+ */
1498
+ getMaxPermits(): number;
1499
+ /**
1500
+ * Check if the semaphore has been disposed
1501
+ */
1502
+ isDisposed(): boolean;
1503
+ /**
1504
+ * Get metrics about the current state of the semaphore
1505
+ */
1506
+ getMetrics(): {
1507
+ availablePermits: number;
1508
+ waitingCount: number;
1509
+ maxPermits: number;
1510
+ utilization: number;
1511
+ disposed: boolean;
1512
+ };
1513
+ }
1514
+
1515
+ /**
1516
+ * Cooperative task queue.
1517
+ * • Tasks run one‑after‑another (FIFO ordering).
1518
+ * • Dead‑lock detection prevents nesting.
1519
+ * • dispose() drains or cancels outstanding tasks, then rejects new ones.
1520
+ */
1521
+ declare class Queue {
1522
+ private tail;
1523
+ private disposed;
1524
+ private abortController;
1525
+ private readonly executionContext;
1526
+ /**
1527
+ * Schedule an asynchronous task.
1528
+ * @param task – receives an AbortSignal so it can cancel early if desired.
1529
+ */
1530
+ run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T>;
1531
+ /**
1532
+ * Disposes the queue.
1533
+ * @param options.cancel – if true, broadcasts AbortSignal to running task.
1534
+ * default: false (waits for tasks to finish).
1535
+ */
1536
+ dispose(options?: {
1537
+ cancel?: boolean;
1538
+ }): Promise<void>;
1539
+ }
1540
+
1541
+ declare class RunResult<V> {
1542
+ readonly value: V;
1543
+ readonly logger: Logger;
1544
+ readonly store: Store;
1545
+ private readonly eventManager;
1546
+ private readonly taskRunner;
1547
+ private readonly disposeFn;
1548
+ constructor(value: V, logger: Logger, store: Store, eventManager: EventManager, taskRunner: TaskRunner, disposeFn: () => Promise<void>);
1549
+ /**
1550
+ * Run a task within the context of the run result.
1551
+ * @param task - The task to run.
1552
+ * @param args - The arguments to pass to the task.
1553
+ * @returns The result of the task.
1554
+ */
1555
+ runTask: <I = undefined, O extends Promise<any> = any, D extends DependencyMapType = any>(task: ITask<I, O, D> | string, ...args: I extends undefined | void ? [] : [I]) => Promise<O | undefined>;
1556
+ /**
1557
+ * Emit an event within the context of the run result.
1558
+ * @param event - The event to emit.
1559
+ * @param payload - The payload to emit.
1560
+ */
1561
+ emitEvent: <P>(event: IEvent<P> | string, payload?: P extends undefined | void ? undefined : P) => Promise<void>;
1562
+ /**
1563
+ * Get the value of a resource from the run result.
1564
+ * @param resource - The resource to get the value of.
1565
+ * @returns The value of the resource.
1566
+ */
1567
+ getResourceValue: <Output extends Promise<any>>(resource: string | IResource<any, Output, any, any, any>) => Output extends Promise<infer U> ? U : Output;
1568
+ dispose: () => Promise<void>;
1569
+ }
1570
+
1571
+ /**
1572
+ * Define a task.
1573
+ * Generates a strongly-typed task object with id, dependencies,
1574
+ * middleware, and metadata.
1575
+ *
1576
+ * @typeParam Input - Input type accepted by the task's `run` function.
1577
+ * @typeParam Output - Promise type returned by the `run` function.
1578
+ * @typeParam Deps - Dependency map type this task requires.
1579
+ * @typeParam TOn - Event type or "*" this task listens to.
1580
+ * @typeParam TMeta - Arbitrary metadata type carried by the task.
1581
+ * @param taskConfig - The task definition config.
1582
+ * @returns A branded task definition usable by the runner.
1583
+ */
1584
+ declare function defineTask<Input = undefined, Output extends Promise<any> = any, Deps extends DependencyMapType = any, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]>(taskConfig: ITaskDefinition<Input, Output, Deps, TMeta, TTags, TMiddleware>): ITask<Input, Output, Deps, TMeta, TTags, TMiddleware>;
1585
+
1586
+ /**
1587
+ * Define a hook (event listeners).
1588
+ * Same shape as task with mandatory `on` and without `middleware`.
1589
+ */
1590
+ declare function defineHook<D extends DependencyMapType = any, TOn extends "*" | IEventDefinition<any> | readonly IEventDefinition<any>[] = any, TMeta extends ITaskMeta = any>(hookDef: IHookDefinition<D, TOn, TMeta>): IHook<D, TOn, TMeta>;
1591
+
1592
+ declare function defineResource<TConfig = void, TValue extends Promise<any> = Promise<any>, TDeps extends DependencyMapType = {}, TPrivate = any, TMeta extends IResourceMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[]>(constConfig: IResourceDefinition<TConfig, TValue, TDeps, TPrivate, any, any, TMeta, TTags, TMiddleware>): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>;
1593
+
1594
+ declare function defineEvent<TPayload = void>(config: IEventDefinition<TPayload>): IEvent<TPayload>;
1595
+
1596
+ declare function defineTaskMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any>(middlewareDef: ITaskMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>): ITaskMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
1597
+
1598
+ declare function defineResourceMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any>(middlewareDef: IResourceMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>): IResourceMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
1599
+
1600
+ /**
1601
+ * Override helper that preserves the original `id` and returns the same type.
1602
+ * You can override any property except `id`. The override is shallow-merged over the base.
1603
+ *
1604
+ * @param base - The base definition to override.
1605
+ * @param patch - Properties to override (except `id`).
1606
+ * @returns A definition of the same kind with overrides applied.
1607
+ */
1608
+ declare function defineOverride<T extends ITask<any, any, any, any, any, any>>(base: T, patch: Omit<Partial<T>, "id"> & Pick<T, "run">): T;
1609
+ declare function defineOverride<T extends IResource<any, any, any, any, any, any>>(base: T, patch: Omit<Partial<T>, "id"> & Pick<T, "init">): T;
1610
+ declare function defineOverride<T extends ITaskMiddleware<any, any, any, any>>(base: T, patch: Omit<Partial<T>, "id">): T;
1611
+ declare function defineOverride<T extends IResourceMiddleware<any, any, any, any>>(base: T, patch: Omit<Partial<T>, "id"> & Pick<T, "run">): T;
1612
+ declare function defineOverride<T extends IHook<any, any, any>>(base: T, patch: Omit<Partial<T>, "id" | "on"> & Pick<T, "run">): T;
1613
+
1614
+ /**
1615
+ * Create a tag definition.
1616
+ * - `.with(config)` to create configured instances
1617
+ * - `.extract(tags)` to extract this tag from a list of tags or a taggable's meta
1618
+ *
1619
+ * @typeParam TConfig - Configuration type carried by configured tags.
1620
+ * @typeParam TEnforceContract - Optional helper type to enforce a contract when tags are used.
1621
+ * @param definition - The tag definition (id).
1622
+ * @returns A tag object with helpers to configure and extract.
1623
+ */
1624
+ declare function defineTag<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void>(definition: ITagDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract>): ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;
1625
+
1626
+ /**
1627
+ * This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.
1628
+ *
1629
+ * @param resourceOrResourceWithConfig - The resource or resource with config to run.
1630
+ * @param options - The options for the run.
1631
+ * @returns A promise that resolves to the result of the run.
1632
+ */
1633
+ declare function run<C, V extends Promise<any>>(resourceOrResourceWithConfig: IResourceWithConfig<C, V> | IResource<void, V, any, any> | IResource<{
1634
+ [K in any]?: any;
1635
+ }, V, any, any>, // For optional config
1636
+ options?: RunOptions): Promise<RunResult<V extends Promise<infer U> ? U : V>>;
1637
+
1638
+ /**
1639
+ * Helper to create a minimal test harness resource that wraps a root app (or any registerable)
1640
+ * and exposes convenient testing utilities while running the full ecosystem
1641
+ * (registration, overrides, middleware, events) without modifying the core API.
1642
+ * @deprecated Use `run` instead with your testResource, as it provides the necessary toolkit.
1643
+ */
1644
+ declare function createTestResource(root: RegisterableItems, options?: {
1645
+ overrides?: Array<IResource | ITask | ITaskMiddleware | IResourceMiddleware | IResourceWithConfig>;
1646
+ }): IResource<void, Promise<ReturnType<typeof buildTestFacade>>>;
1647
+ declare function buildTestFacade(deps: {
1648
+ taskRunner: TaskRunner;
1649
+ store: Store;
1650
+ logger: Logger;
1651
+ eventManager: EventManager;
1652
+ }): {
1653
+ runTask: <I, O extends Promise<any>, D extends DependencyMapType>(task: ITask<I, O, D>, ...args: I extends undefined ? [] : [I]) => Promise<Awaited<O> | undefined>;
1654
+ getResource: (id: string) => any;
1655
+ taskRunner: TaskRunner;
1656
+ store: Store;
1657
+ logger: Logger;
1658
+ eventManager: EventManager;
1659
+ };
1660
+
1661
+ declare const globals: {
1662
+ events: {
1663
+ readonly ready: IEvent<{
1664
+ root: IResource<any, any, any, any>;
1665
+ }>;
1666
+ readonly unhandledError: IEvent<{
1667
+ kind: "task" | "middleware" | "resourceInit" | "hook" | "process" | "run";
1668
+ error: any;
1669
+ }>;
1670
+ };
1671
+ resources: {
1672
+ store: IResource<void, Promise<Store>, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1673
+ middlewareManager: IResource<void, Promise<MiddlewareManager>, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1674
+ eventManager: IResource<void, Promise<EventManager>, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1675
+ taskRunner: IResource<void, Promise<TaskRunner>, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1676
+ logger: IResource<void, Promise<Logger>, {}, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1677
+ cache: IResource<{
1678
+ defaultOptions?: any;
1679
+ }, Promise<{
1680
+ map: Map<string, ICacheInstance>;
1681
+ cacheFactoryTask: TaskDependencyWithIntercept<any, Promise<ICacheInstance>>;
1682
+ defaultOptions: any;
1683
+ }>, {
1684
+ cacheFactoryTask: ITask<any, Promise<ICacheInstance>, any, any, TagType[], TaskMiddlewareAttachmentType[]>;
1685
+ }, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1686
+ queue: IResource<void, Promise<{
1687
+ map: Map<string, Queue>;
1688
+ run: <T>(id: string, task: (signal: AbortSignal) => Promise<T>) => Promise<T>;
1689
+ }>, {}, {
1690
+ map: Map<string, Queue>;
1691
+ }, {
1692
+ title: string;
1693
+ description: string;
1694
+ }, TagType[], ResourceMiddlewareAttachmentType[]>;
1695
+ };
1696
+ middleware: {
1697
+ requireContext: ITaskMiddleware<{
1698
+ context: Context<any>;
1699
+ }, void, void, any>;
1700
+ task: {
1701
+ requireContext: ITaskMiddleware<{
1702
+ context: Context<any>;
1703
+ }, void, void, any>;
1704
+ cache: ITaskMiddleware<any, void, void, {
1705
+ cache: IResource<{
1706
+ defaultOptions?: any;
1707
+ }, Promise<{
1708
+ map: Map<string, ICacheInstance>;
1709
+ cacheFactoryTask: TaskDependencyWithIntercept<any, Promise<ICacheInstance>>;
1710
+ defaultOptions: any;
1711
+ }>, {
1712
+ cacheFactoryTask: ITask<any, Promise<ICacheInstance>, any, any, TagType[], TaskMiddlewareAttachmentType[]>;
1713
+ }, any, any, TagType[], ResourceMiddlewareAttachmentType[]>;
1714
+ }>;
1715
+ retry: ITaskMiddleware<RetryMiddlewareConfig, void, void, any>;
1716
+ timeout: ITaskMiddleware<TimeoutMiddlewareConfig, void, void, any>;
1717
+ };
1718
+ resource: {
1719
+ retry: IResourceMiddleware<RetryMiddlewareConfig, void, void, any>;
1720
+ timeout: IResourceMiddleware<TimeoutMiddlewareConfig, void, void, any>;
1721
+ };
1722
+ };
1723
+ tags: {
1724
+ system: ITag<{
1725
+ metadata?: Record<string, any>;
1726
+ }, void, void>;
1727
+ excludeFromGlobalHooks: ITag<{
1728
+ metadata?: Record<string, any>;
1729
+ }, void, void>;
1730
+ debug: ITag<DebugFriendlyConfig, void, void>;
1731
+ };
1732
+ };
1733
+
1734
+ export { type Context, type DebugConfig, type DebugFriendlyConfig, DependencyProcessor, errors as Errors, type EventEmissionInterceptor, EventManager, type EventStoreElementType, type HookExecutionInterceptor, type IEventHandlerOptions, type ILog, type ILogInfo, type LogLevels, Logger, MiddlewareManager, type OnUnhandledError, type OnUnhandledErrorInfo, type PrintStrategy, Queue, ResourceInitializer, type ResourceMiddlewareInterceptor, type ResourceStoreElementType, RunResult, Semaphore, Store, type TaskMiddlewareInterceptor, TaskRunner, type TaskStoreElementType, type UnhandledErrorKind, allFalse, bindProcessErrorHandler, createContext, createDefaultUnhandledError, createTestResource, defs as definitions, defineEvent as event, getConfig, globals, defineHook as hook, levelNormal, levelVerbose, defineOverride as override, defineResource as resource, defineResourceMiddleware as resourceMiddleware, run, safeReportUnhandledError, defineTag as tag, defineTask as task, defineTaskMiddleware as taskMiddleware };