@bluelibs/runner 5.1.0 → 5.2.1

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 (314) hide show
  1. package/README.md +25 -15
  2. package/dist/browser/index.cjs +851 -478
  3. package/dist/browser/index.cjs.map +1 -1
  4. package/dist/browser/index.mjs +849 -478
  5. package/dist/browser/index.mjs.map +1 -1
  6. package/dist/edge/index.cjs +851 -478
  7. package/dist/edge/index.cjs.map +1 -1
  8. package/dist/edge/index.mjs +849 -478
  9. package/dist/edge/index.mjs.map +1 -1
  10. package/dist/node/node.cjs +1305 -583
  11. package/dist/node/node.cjs.map +1 -1
  12. package/dist/node/node.mjs +1299 -583
  13. package/dist/node/node.mjs.map +1 -1
  14. package/dist/types/define.d.ts +9 -0
  15. package/dist/types/definers/builders/asyncContext/fluent-builder.d.ts +6 -0
  16. package/dist/types/definers/builders/asyncContext/fluent-builder.interface.d.ts +9 -0
  17. package/dist/types/definers/builders/asyncContext/index.d.ts +10 -0
  18. package/dist/types/definers/builders/asyncContext/types.d.ts +13 -0
  19. package/dist/types/definers/builders/asyncContext/utils.d.ts +5 -0
  20. package/dist/types/definers/builders/asyncContext.d.ts +1 -0
  21. package/dist/types/definers/builders/core.d.ts +30 -0
  22. package/dist/types/definers/builders/error/fluent-builder.d.ts +7 -0
  23. package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +10 -0
  24. package/dist/types/definers/builders/error/index.d.ts +11 -0
  25. package/dist/types/definers/builders/error/types.d.ts +14 -0
  26. package/dist/types/definers/builders/error/utils.d.ts +6 -0
  27. package/dist/types/definers/builders/error.d.ts +1 -0
  28. package/dist/types/definers/builders/event/fluent-builder.d.ts +7 -0
  29. package/dist/types/definers/builders/event/fluent-builder.interface.d.ts +18 -0
  30. package/dist/types/definers/builders/event/index.d.ts +10 -0
  31. package/dist/types/definers/builders/event/types.d.ts +8 -0
  32. package/dist/types/definers/builders/event/utils.d.ts +9 -0
  33. package/dist/types/definers/builders/event.d.ts +1 -0
  34. package/dist/types/definers/builders/hook/fluent-builder.d.ts +8 -0
  35. package/dist/types/definers/builders/hook/fluent-builder.interface.d.ts +27 -0
  36. package/dist/types/definers/builders/hook/index.d.ts +12 -0
  37. package/dist/types/definers/builders/hook/types.d.ts +14 -0
  38. package/dist/types/definers/builders/hook/utils.d.ts +14 -0
  39. package/dist/types/definers/builders/hook.d.ts +1 -0
  40. package/dist/types/definers/builders/middleware/index.d.ts +19 -0
  41. package/dist/types/definers/builders/middleware/resource.d.ts +7 -0
  42. package/dist/types/definers/builders/middleware/resource.interface.d.ts +18 -0
  43. package/dist/types/definers/builders/middleware/task.d.ts +7 -0
  44. package/dist/types/definers/builders/middleware/task.interface.d.ts +18 -0
  45. package/dist/types/definers/builders/middleware/types.d.ts +13 -0
  46. package/dist/types/definers/builders/middleware/utils.d.ts +18 -0
  47. package/dist/types/definers/builders/middleware.d.ts +1 -0
  48. package/dist/types/definers/builders/override/hook.d.ts +16 -0
  49. package/dist/types/definers/builders/override/index.d.ts +11 -0
  50. package/dist/types/definers/builders/override/resource-middleware.d.ts +3 -0
  51. package/dist/types/definers/builders/override/resource.d.ts +3 -0
  52. package/dist/types/definers/builders/override/task-middleware.d.ts +3 -0
  53. package/dist/types/definers/builders/override/task.d.ts +3 -0
  54. package/dist/types/definers/builders/resource/fluent-builder.d.ts +8 -0
  55. package/dist/types/definers/builders/resource/fluent-builder.interface.d.ts +42 -0
  56. package/dist/types/definers/builders/resource/index.d.ts +13 -0
  57. package/dist/types/definers/builders/resource/types.d.ts +37 -0
  58. package/dist/types/definers/builders/resource/utils.d.ts +26 -0
  59. package/dist/types/definers/builders/resource.d.ts +1 -0
  60. package/dist/types/definers/builders/tag/fluent-builder.d.ts +6 -0
  61. package/dist/types/definers/builders/tag/fluent-builder.interface.d.ts +8 -0
  62. package/dist/types/definers/builders/tag/index.d.ts +10 -0
  63. package/dist/types/definers/builders/tag/types.d.ts +12 -0
  64. package/dist/types/definers/builders/tag/utils.d.ts +5 -0
  65. package/dist/types/definers/builders/tag.d.ts +1 -0
  66. package/dist/types/definers/builders/task/fluent-builder.d.ts +8 -0
  67. package/dist/types/definers/builders/task/fluent-builder.interface.d.ts +33 -0
  68. package/dist/types/definers/builders/task/index.d.ts +21 -0
  69. package/dist/types/definers/builders/task/phantom-builder.d.ts +8 -0
  70. package/dist/types/definers/builders/task/phantom-builder.interface.d.ts +31 -0
  71. package/dist/types/definers/builders/task/types.d.ts +34 -0
  72. package/dist/types/definers/builders/task/utils.d.ts +14 -0
  73. package/dist/types/definers/builders/task.d.ts +1 -0
  74. package/dist/types/definers/builders/task.phantom.d.ts +1 -0
  75. package/dist/types/definers/builders/utils.d.ts +4 -0
  76. package/dist/types/definers/defineAsyncContext.d.ts +15 -0
  77. package/dist/types/definers/defineError.d.ts +27 -0
  78. package/dist/types/definers/defineEvent.d.ts +2 -0
  79. package/dist/types/definers/defineHook.d.ts +6 -0
  80. package/dist/types/definers/defineOverride.d.ts +12 -0
  81. package/dist/types/definers/defineResource.d.ts +2 -0
  82. package/dist/types/definers/defineResourceMiddleware.d.ts +2 -0
  83. package/dist/types/definers/defineTag.d.ts +12 -0
  84. package/dist/types/definers/defineTask.d.ts +18 -0
  85. package/dist/types/definers/defineTaskMiddleware.d.ts +2 -0
  86. package/dist/types/definers/middlewareConfig.d.ts +1 -0
  87. package/dist/types/definers/resourceFork.d.ts +13 -0
  88. package/dist/types/definers/tools.d.ts +53 -0
  89. package/dist/types/defs.d.ts +33 -0
  90. package/dist/types/errors.d.ts +75 -0
  91. package/dist/types/globals/debug.d.ts +10 -0
  92. package/dist/types/globals/globalEvents.d.ts +8 -0
  93. package/dist/types/globals/globalMiddleware.d.ts +97 -0
  94. package/dist/types/globals/globalResources.d.ts +64 -0
  95. package/dist/types/globals/globalTags.d.ts +12 -0
  96. package/dist/types/globals/middleware/cache.middleware.d.ts +36 -0
  97. package/dist/types/globals/middleware/circuitBreaker.middleware.d.ts +56 -0
  98. package/dist/types/globals/middleware/concurrency.middleware.d.ts +47 -0
  99. package/dist/types/globals/middleware/fallback.middleware.d.ts +23 -0
  100. package/dist/types/globals/middleware/rateLimit.middleware.d.ts +47 -0
  101. package/dist/types/globals/middleware/requireContext.middleware.d.ts +5 -0
  102. package/dist/types/globals/middleware/retry.middleware.d.ts +31 -0
  103. package/dist/types/globals/middleware/temporal.middleware.d.ts +48 -0
  104. package/dist/types/globals/middleware/timeout.middleware.d.ts +24 -0
  105. package/dist/types/globals/middleware/tunnel.middleware.d.ts +3 -0
  106. package/dist/types/globals/resources/debug/debug.resource.d.ts +7 -0
  107. package/dist/types/globals/resources/debug/debug.tag.d.ts +2 -0
  108. package/dist/types/globals/resources/debug/debugConfig.resource.d.ts +22 -0
  109. package/dist/types/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
  110. package/dist/types/globals/resources/debug/globalEvent.hook.d.ts +27 -0
  111. package/dist/types/globals/resources/debug/hook.hook.d.ts +30 -0
  112. package/dist/types/globals/resources/debug/index.d.ts +6 -0
  113. package/dist/types/globals/resources/debug/middleware.hook.d.ts +30 -0
  114. package/dist/types/globals/resources/debug/types.d.ts +25 -0
  115. package/dist/types/globals/resources/debug/utils.d.ts +2 -0
  116. package/dist/types/globals/resources/httpClientFactory.resource.d.ts +28 -0
  117. package/dist/types/globals/resources/queue.resource.d.ts +10 -0
  118. package/dist/types/globals/resources/tunnel/error-utils.d.ts +1 -0
  119. package/dist/types/globals/resources/tunnel/plan.d.ts +19 -0
  120. package/dist/types/globals/resources/tunnel/protocol.d.ts +48 -0
  121. package/dist/types/globals/resources/tunnel/tunnel.policy.tag.d.ts +26 -0
  122. package/dist/types/globals/resources/tunnel/tunnel.tag.d.ts +2 -0
  123. package/dist/types/globals/resources/tunnel/types.d.ts +48 -0
  124. package/dist/types/globals/tunnels/index.d.ts +23 -0
  125. package/dist/types/globals/types.d.ts +15 -0
  126. package/dist/types/http-client.d.ts +26 -0
  127. package/dist/types/http-fetch-tunnel.resource.d.ts +11 -0
  128. package/dist/types/index.d.ts +44 -0
  129. package/dist/types/models/DependencyProcessor.d.ts +46 -0
  130. package/dist/types/models/EventManager.d.ts +115 -0
  131. package/dist/types/models/ExecutionJournal.d.ts +35 -0
  132. package/dist/types/models/LogPrinter.d.ts +56 -0
  133. package/dist/types/models/Logger.d.ts +85 -0
  134. package/dist/types/models/MiddlewareManager.d.ts +73 -0
  135. package/dist/types/models/OverrideManager.d.ts +13 -0
  136. package/dist/types/models/Queue.d.ts +40 -0
  137. package/dist/types/models/ResourceInitializer.d.ts +20 -0
  138. package/dist/types/models/RunResult.d.ts +41 -0
  139. package/dist/types/models/Semaphore.d.ts +80 -0
  140. package/dist/types/models/Store.d.ts +76 -0
  141. package/dist/types/models/StoreRegistry.d.ts +49 -0
  142. package/dist/types/models/StoreValidator.d.ts +8 -0
  143. package/dist/types/models/TaskRunner.d.ts +28 -0
  144. package/dist/types/models/UnhandledError.d.ts +11 -0
  145. package/dist/types/models/event/CycleContext.d.ts +9 -0
  146. package/dist/types/models/event/EmissionExecutor.d.ts +11 -0
  147. package/dist/types/models/event/InterceptorPipeline.d.ts +5 -0
  148. package/dist/types/models/event/ListenerRegistry.d.ts +31 -0
  149. package/dist/types/models/event/types.d.ts +50 -0
  150. package/dist/types/models/index.d.ts +13 -0
  151. package/dist/types/models/middleware/InterceptorRegistry.d.ts +56 -0
  152. package/dist/types/models/middleware/MiddlewareResolver.d.ts +31 -0
  153. package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +34 -0
  154. package/dist/types/models/middleware/TaskMiddlewareComposer.d.ts +44 -0
  155. package/dist/types/models/middleware/ValidationHelper.d.ts +20 -0
  156. package/dist/types/models/middleware/index.d.ts +6 -0
  157. package/dist/types/models/middleware/types.d.ts +10 -0
  158. package/dist/types/models/utils/findCircularDependencies.d.ts +16 -0
  159. package/dist/types/models/utils/safeStringify.d.ts +3 -0
  160. package/dist/types/node/durable/bus/MemoryEventBus.d.ts +7 -0
  161. package/dist/types/node/durable/bus/NoopEventBus.d.ts +6 -0
  162. package/dist/types/node/durable/bus/RedisEventBus.d.ts +30 -0
  163. package/dist/types/node/durable/core/CronParser.d.ts +15 -0
  164. package/dist/types/node/durable/core/DurableContext.d.ts +64 -0
  165. package/dist/types/node/durable/core/DurableOperator.d.ts +47 -0
  166. package/dist/types/node/durable/core/DurableResource.d.ts +80 -0
  167. package/dist/types/node/durable/core/DurableService.d.ts +73 -0
  168. package/dist/types/node/durable/core/DurableWorker.d.ts +19 -0
  169. package/dist/types/node/durable/core/StepBuilder.d.ts +23 -0
  170. package/dist/types/node/durable/core/audit.d.ts +152 -0
  171. package/dist/types/node/durable/core/createRunnerDurableRuntime.d.ts +18 -0
  172. package/dist/types/node/durable/core/durable-context/DurableContext.audit.d.ts +14 -0
  173. package/dist/types/node/durable/core/durable-context/DurableContext.determinism.d.ts +13 -0
  174. package/dist/types/node/durable/core/durable-context/DurableContext.emit.d.ts +16 -0
  175. package/dist/types/node/durable/core/durable-context/DurableContext.sleep.d.ts +16 -0
  176. package/dist/types/node/durable/core/durable-context/DurableContext.steps.d.ts +25 -0
  177. package/dist/types/node/durable/core/durable-context/DurableContext.switch.d.ts +22 -0
  178. package/dist/types/node/durable/core/durable-context/DurableContext.waitForSignal.d.ts +23 -0
  179. package/dist/types/node/durable/core/flowShape.d.ts +50 -0
  180. package/dist/types/node/durable/core/ids.d.ts +11 -0
  181. package/dist/types/node/durable/core/index.d.ts +11 -0
  182. package/dist/types/node/durable/core/interfaces/bus.d.ts +13 -0
  183. package/dist/types/node/durable/core/interfaces/context.d.ts +105 -0
  184. package/dist/types/node/durable/core/interfaces/queue.d.ts +17 -0
  185. package/dist/types/node/durable/core/interfaces/service.d.ts +146 -0
  186. package/dist/types/node/durable/core/interfaces/store.d.ts +66 -0
  187. package/dist/types/node/durable/core/managers/AuditLogger.d.ts +29 -0
  188. package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +48 -0
  189. package/dist/types/node/durable/core/managers/PollingManager.d.ts +48 -0
  190. package/dist/types/node/durable/core/managers/ScheduleManager.d.ts +33 -0
  191. package/dist/types/node/durable/core/managers/SignalHandler.d.ts +25 -0
  192. package/dist/types/node/durable/core/managers/TaskRegistry.d.ts +16 -0
  193. package/dist/types/node/durable/core/managers/WaitManager.d.ts +26 -0
  194. package/dist/types/node/durable/core/managers/index.d.ts +7 -0
  195. package/dist/types/node/durable/core/resource.d.ts +14 -0
  196. package/dist/types/node/durable/core/types.d.ts +84 -0
  197. package/dist/types/node/durable/core/utils.d.ts +28 -0
  198. package/dist/types/node/durable/dashboard/server.d.ts +20 -0
  199. package/dist/types/node/durable/emitters/runnerAuditEmitter.d.ts +6 -0
  200. package/dist/types/node/durable/events.d.ts +76 -0
  201. package/dist/types/node/durable/index.d.ts +34 -0
  202. package/dist/types/node/durable/optionalDeps/amqplib.d.ts +1 -0
  203. package/dist/types/node/durable/optionalDeps/ioredis.d.ts +1 -0
  204. package/dist/types/node/durable/queue/MemoryQueue.d.ts +12 -0
  205. package/dist/types/node/durable/queue/RabbitMQQueue.d.ts +30 -0
  206. package/dist/types/node/durable/resources/isolation.d.ts +15 -0
  207. package/dist/types/node/durable/resources/memoryDurableResource.d.ts +21 -0
  208. package/dist/types/node/durable/resources/redisDurableResource.d.ts +35 -0
  209. package/dist/types/node/durable/store/MemoryStore.d.ts +56 -0
  210. package/dist/types/node/durable/store/RedisStore.d.ts +89 -0
  211. package/dist/types/node/durable/test-utils.d.ts +29 -0
  212. package/dist/types/node/exposure/allowList.d.ts +3 -0
  213. package/dist/types/node/exposure/authenticator.d.ts +16 -0
  214. package/dist/types/node/exposure/cors.d.ts +4 -0
  215. package/dist/types/node/exposure/createNodeExposure.d.ts +2 -0
  216. package/dist/types/node/exposure/exposureServer.d.ts +18 -0
  217. package/dist/types/node/exposure/handlers/contextWrapper.d.ts +18 -0
  218. package/dist/types/node/exposure/handlers/errorHandlers.d.ts +23 -0
  219. package/dist/types/node/exposure/handlers/eventHandler.d.ts +20 -0
  220. package/dist/types/node/exposure/handlers/taskHandler.d.ts +24 -0
  221. package/dist/types/node/exposure/httpResponse.d.ts +10 -0
  222. package/dist/types/node/exposure/index.d.ts +3 -0
  223. package/dist/types/node/exposure/logging.d.ts +4 -0
  224. package/dist/types/node/exposure/multipart.d.ts +36 -0
  225. package/dist/types/node/exposure/requestBody.d.ts +11 -0
  226. package/dist/types/node/exposure/requestContext.d.ts +17 -0
  227. package/dist/types/node/exposure/requestHandlers.d.ts +29 -0
  228. package/dist/types/node/exposure/resource.d.ts +12 -0
  229. package/dist/types/node/exposure/resourceTypes.d.ts +73 -0
  230. package/dist/types/node/exposure/router.d.ts +17 -0
  231. package/dist/types/node/exposure/serverLifecycle.d.ts +13 -0
  232. package/dist/types/node/exposure/types.d.ts +45 -0
  233. package/dist/types/node/exposure/utils.d.ts +17 -0
  234. package/dist/types/node/files/createNodeFile.d.ts +9 -0
  235. package/dist/types/node/files/index.d.ts +4 -0
  236. package/dist/types/node/files/inputFile.model.d.ts +22 -0
  237. package/dist/types/node/files/inputFile.utils.d.ts +14 -0
  238. package/dist/types/node/http/http-mixed-client.d.ts +45 -0
  239. package/dist/types/node/http/http-mixed-client.factory.resource.d.ts +17 -0
  240. package/dist/types/node/http/http-smart-client.factory.resource.d.ts +16 -0
  241. package/dist/types/node/http/http-smart-client.model.d.ts +27 -0
  242. package/dist/types/node/http/index.d.ts +4 -0
  243. package/dist/types/node/index.d.ts +1 -0
  244. package/dist/types/node/node.d.ts +193 -0
  245. package/dist/types/node/platform/createFile.d.ts +9 -0
  246. package/dist/types/node/tunnel/allowlist.d.ts +7 -0
  247. package/dist/types/node/tunnel/index.d.ts +2 -0
  248. package/dist/types/node/upload/manifest.d.ts +23 -0
  249. package/dist/types/platform/adapters/browser.d.ts +14 -0
  250. package/dist/types/platform/adapters/edge.d.ts +5 -0
  251. package/dist/types/platform/adapters/node-als.d.ts +1 -0
  252. package/dist/types/platform/adapters/node.d.ts +15 -0
  253. package/dist/types/platform/adapters/universal-generic.d.ts +14 -0
  254. package/dist/types/platform/adapters/universal.d.ts +18 -0
  255. package/dist/types/platform/createFile.d.ts +10 -0
  256. package/dist/types/platform/createWebFile.d.ts +11 -0
  257. package/dist/types/platform/factory.d.ts +2 -0
  258. package/dist/types/platform/index.d.ts +27 -0
  259. package/dist/types/platform/types.d.ts +31 -0
  260. package/dist/types/processHooks.d.ts +2 -0
  261. package/dist/types/public-types.d.ts +13 -0
  262. package/dist/types/public.d.ts +210 -0
  263. package/dist/types/run.d.ts +14 -0
  264. package/dist/types/serializer/Serializer.d.ts +84 -0
  265. package/dist/types/serializer/binary-builtins.d.ts +5 -0
  266. package/dist/types/serializer/builtins.d.ts +47 -0
  267. package/dist/types/serializer/deserializer.d.ts +27 -0
  268. package/dist/types/serializer/error-url-builtins.d.ts +13 -0
  269. package/dist/types/serializer/graph-serializer.d.ts +27 -0
  270. package/dist/types/serializer/index.d.ts +6 -0
  271. package/dist/types/serializer/option-normalizers.d.ts +2 -0
  272. package/dist/types/serializer/regexp-validator.d.ts +34 -0
  273. package/dist/types/serializer/serialize-utils.d.ts +15 -0
  274. package/dist/types/serializer/special-values.d.ts +20 -0
  275. package/dist/types/serializer/tree-serializer.d.ts +20 -0
  276. package/dist/types/serializer/type-registry.d.ts +58 -0
  277. package/dist/types/serializer/types.d.ts +126 -0
  278. package/dist/types/serializer/validation.d.ts +34 -0
  279. package/dist/types/testing.d.ts +19 -0
  280. package/dist/types/tools/detectRunnerMode.d.ts +9 -0
  281. package/dist/types/tools/getCallerFile.d.ts +1 -0
  282. package/dist/types/tools/throws.d.ts +7 -0
  283. package/dist/types/tunnels/buildUniversalManifest.d.ts +24 -0
  284. package/dist/types/types/asyncContext.d.ts +41 -0
  285. package/dist/types/types/contracts.d.ts +62 -0
  286. package/dist/types/types/error.d.ts +39 -0
  287. package/dist/types/types/event.d.ts +79 -0
  288. package/dist/types/types/executionJournal.d.ts +29 -0
  289. package/dist/types/types/hook.d.ts +23 -0
  290. package/dist/types/types/inputFile.d.ts +34 -0
  291. package/dist/types/types/meta.d.ts +22 -0
  292. package/dist/types/types/resource.d.ts +133 -0
  293. package/dist/types/types/resourceMiddleware.d.ts +48 -0
  294. package/dist/types/types/runner.d.ts +68 -0
  295. package/dist/types/types/storeTypes.d.ts +46 -0
  296. package/dist/types/types/symbols.d.ts +34 -0
  297. package/dist/types/types/tag.d.ts +45 -0
  298. package/dist/types/types/task.d.ts +76 -0
  299. package/dist/types/types/taskMiddleware.d.ts +55 -0
  300. package/dist/types/types/utilities.d.ts +125 -0
  301. package/dist/universal/index.cjs +851 -476
  302. package/dist/universal/index.cjs.map +1 -1
  303. package/dist/universal/index.mjs +849 -476
  304. package/dist/universal/index.mjs.map +1 -1
  305. package/package.json +15 -14
  306. package/readmes/AI.md +30 -9
  307. package/dist/browser/index.d.mts +0 -2919
  308. package/dist/browser/index.d.ts +0 -2919
  309. package/dist/edge/index.d.mts +0 -2919
  310. package/dist/edge/index.d.ts +0 -2919
  311. package/dist/node/node.d.mts +0 -4622
  312. package/dist/node/node.d.ts +0 -4622
  313. package/dist/universal/index.d.mts +0 -2919
  314. package/dist/universal/index.d.ts +0 -2919
@@ -0,0 +1,34 @@
1
+ export interface InputFileMeta {
2
+ name: string;
3
+ type?: string;
4
+ size?: number;
5
+ lastModified?: number;
6
+ extra?: Record<string, unknown>;
7
+ }
8
+ /** Universal interface exposed to tasks for streamed files. */
9
+ export interface InputFile<TStream = unknown> extends InputFileMeta {
10
+ /**
11
+ * Resolve the underlying stream for one-time consumption.
12
+ * Implementations must enforce single-use semantics.
13
+ */
14
+ resolve(): Promise<{
15
+ stream: TStream;
16
+ }>;
17
+ /**
18
+ * Return the underlying stream (single-use). Should throw if already consumed.
19
+ */
20
+ stream(): TStream;
21
+ /**
22
+ * Persist the stream to a temporary file on disk and return its path and number of bytes written.
23
+ */
24
+ toTempFile(dir?: string): Promise<{
25
+ path: string;
26
+ bytesWritten: number;
27
+ }>;
28
+ }
29
+ /** Client-side sentinel to declare file presence in an input structure. */
30
+ export interface RunnerFileSentinel {
31
+ $runnerFile: "File";
32
+ id: string;
33
+ meta: InputFileMeta;
34
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Common metadata you can attach to tasks/resources/events/middleware.
3
+ * Useful for docs, filtering and middleware decisions.
4
+ */
5
+ export interface IMeta {
6
+ title?: string;
7
+ description?: string;
8
+ }
9
+ export interface ITaskMeta extends IMeta {
10
+ }
11
+ export interface IResourceMeta extends IMeta {
12
+ }
13
+ export interface IEventMeta extends IMeta {
14
+ }
15
+ export interface IMiddlewareMeta extends IMeta {
16
+ }
17
+ export interface ITagMeta extends IMeta {
18
+ }
19
+ export interface IErrorMeta extends IMeta {
20
+ }
21
+ export interface IAsyncContextMeta extends IMeta {
22
+ }
@@ -0,0 +1,133 @@
1
+ import { DependencyMapType, IOptionalDependency, IValidationSchema, OverridableElements, RegisterableItems, ResourceDependencyValuesType } from "./utilities";
2
+ import { IResourceMiddleware, ResourceMiddlewareAttachmentType } from "./resourceMiddleware";
3
+ import { TagType } from "./tag";
4
+ import { IResourceMeta } from "./meta";
5
+ import type { ThrowsList } from "./error";
6
+ import { symbolFilePath, symbolResource, symbolResourceWithConfig, symbolResourceForkedFrom } from "./symbols";
7
+ import { EnsureInputSatisfiesContracts, EnsureOutputSatisfiesContracts, HasInputContracts, HasOutputContracts, InferInputOrViolationFromContracts } from "./contracts";
8
+ export type { DependencyMapType, IOptionalDependency, IValidationSchema, OverridableElements, RegisterableItems, ResourceDependencyValuesType, } from "./utilities";
9
+ export type { ResourceMiddlewareAttachmentType } from "./resourceMiddleware";
10
+ export type { TagType } from "./tag";
11
+ export type { IResourceMeta } from "./meta";
12
+ export type ResourceForkRegisterMode = "keep" | "drop" | "deep";
13
+ export interface ResourceForkOptions {
14
+ /**
15
+ * Control whether the fork keeps the base `register` list.
16
+ * - "keep" (default) keeps registration items
17
+ * - "drop" clears registration items
18
+ * - "deep" deep-forks registered resources with new ids (resource tree)
19
+ */
20
+ register?: ResourceForkRegisterMode;
21
+ /**
22
+ * Used with `register: "deep"` to derive ids for deep-forked resources.
23
+ * Defaults to `(id) => \`\${newId}.\${id}\``.
24
+ */
25
+ reId?: (id: string) => string;
26
+ }
27
+ export interface ResourceForkInfo {
28
+ /** The id of the resource that was forked. */
29
+ readonly fromId: string;
30
+ /** Best-effort call-site file path for the fork operation. */
31
+ readonly forkedAtFilePath: string;
32
+ }
33
+ export type IsAny<T> = 0 extends 1 & T ? true : false;
34
+ export type IsUnspecified<T> = [T] extends [undefined] ? true : [T] extends [void] ? true : IsAny<T> extends true ? true : false;
35
+ export 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[]> {
36
+ /** Stable identifier. */
37
+ id: string;
38
+ /** Static or lazy dependency map. Receives `config` when provided. */
39
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
40
+ /**
41
+ * Register other registerables (resources/tasks/middleware/events). Accepts a
42
+ * static array or a function of `config` to support dynamic wiring.
43
+ */
44
+ register?: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
45
+ /**
46
+ * Initialize and return the resource value. Called once during boot.
47
+ */
48
+ init?: (config: HasInputContracts<[...TTags, ...TMiddleware]> extends true ? IsUnspecified<TConfig> extends true ? InferInputOrViolationFromContracts<[...TTags, ...TMiddleware]> : EnsureInputSatisfiesContracts<[...TTags, ...TMiddleware], TConfig> : TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => HasOutputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureOutputSatisfiesContracts<[...TTags, ...TMiddleware], TValue> : TValue;
49
+ /**
50
+ * Optional validation schema for the resource's resolved value.
51
+ * When provided, the value will be validated immediately after `init` resolves,
52
+ * without considering middleware.
53
+ */
54
+ resultSchema?: IValidationSchema<TValue extends Promise<infer U> ? U : TValue>;
55
+ /**
56
+ * Clean-up function for the resource. This is called when the resource is no longer needed.
57
+ *
58
+ * @param value The value of the resource (undefined if no init method)
59
+ * @param config The configuration it received
60
+ * @param dependencies The dependencies it needed
61
+ * @returns Promise<void>
62
+ */
63
+ dispose?: (this: any, value: TValue extends Promise<infer U> ? U : TValue, config: TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => Promise<void>;
64
+ meta?: TMeta;
65
+ /**
66
+ * Declares which typed errors are part of this resource's contract.
67
+ *
68
+ * This is a declarative contract only:
69
+ * - It does not imply dependency injection
70
+ * - It does not enforce that only these errors can be thrown
71
+ *
72
+ * Use string ids or Error helpers.
73
+ */
74
+ throws?: ThrowsList;
75
+ /**
76
+ * Optional validation schema for runtime config validation.
77
+ * When provided, resource config will be validated when .with() is called.
78
+ */
79
+ configSchema?: IValidationSchema<TConfig>;
80
+ /**
81
+ * Safe overrides to swap behavior while preserving identities. See
82
+ * README: Overrides.
83
+ */
84
+ overrides?: Array<OverridableElements>;
85
+ /** Middleware applied around init/dispose. */
86
+ middleware?: TMiddleware;
87
+ /**
88
+ * Create a private, mutable context shared between `init` and `dispose`.
89
+ */
90
+ context?: () => TContext;
91
+ /**
92
+ * This is optional and used from an index resource to get the correct caller.
93
+ * This is the reason we allow it here as well.
94
+ */
95
+ [symbolFilePath]?: string;
96
+ tags?: TTags;
97
+ }
98
+ /**
99
+ * Helper alias describing the canonical resource init call signature.
100
+ * Shared with fluent builders to keep init typing consistent.
101
+ */
102
+ export type ResourceInitFn<TConfig, TValue extends Promise<any>, TDependencies extends DependencyMapType, TContext, TMeta extends IResourceMeta, TTags extends TagType[], TMiddleware extends ResourceMiddlewareAttachmentType[]> = NonNullable<IResourceDefinition<TConfig, TValue, TDependencies, TContext, any, any, TMeta, TTags, TMiddleware>["init"]>;
103
+ export 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> {
104
+ id: string;
105
+ with(config: HasInputContracts<[...TTags, ...TMiddleware]> extends true ? IsUnspecified<TConfig> extends true ? InferInputOrViolationFromContracts<[...TTags, ...TMiddleware]> : TConfig : TConfig): IResourceWithConfig<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
106
+ register: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
107
+ overrides: Array<OverridableElements>;
108
+ middleware: TMiddleware;
109
+ [symbolFilePath]: string;
110
+ [symbolResource]: true;
111
+ /** Present only on forked resources. */
112
+ [symbolResourceForkedFrom]?: ResourceForkInfo;
113
+ /** Normalized list of error ids declared via `throws`. */
114
+ throws?: readonly string[];
115
+ /** Return an optional dependency wrapper for this resource. */
116
+ optional: () => IOptionalDependency<IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>>;
117
+ tags: TTags;
118
+ /**
119
+ * Create a new resource with a different id but the same definition.
120
+ * Useful for creating multiple instances of a "template" resource.
121
+ * The forked resource should be exported and used as a dependency.
122
+ */
123
+ fork(newId: string, options?: ResourceForkOptions): IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
124
+ }
125
+ export 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[]> {
126
+ [symbolResourceWithConfig]: true;
127
+ /** The id of the underlying resource. */
128
+ id: string;
129
+ /** The underlying resource definition. */
130
+ resource: IResource<TConfig, TValue, TDependencies, TContext, TMeta, TTags, TMiddleware>;
131
+ /** The configuration captured by `.with(config)`. */
132
+ config: TConfig;
133
+ }
@@ -0,0 +1,48 @@
1
+ import { DependencyMapType, DependencyValuesType, IValidationSchema } from "./utilities";
2
+ import type { IResource } from "./resource";
3
+ import { TagType } from "./tag";
4
+ import { IMiddlewareMeta } from "./meta";
5
+ import { symbolFilePath, symbolMiddlewareConfigured, symbolResourceMiddleware } from "./symbols";
6
+ import { IContractable } from "./contracts";
7
+ export interface IResourceMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> {
8
+ id: string;
9
+ /** Static or lazy dependency map. */
10
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
11
+ /**
12
+ * Optional validation schema for runtime config validation.
13
+ * When provided, middleware config will be validated when .with() is called.
14
+ */
15
+ configSchema?: IValidationSchema<TConfig>;
16
+ /**
17
+ * The middleware body, called with resource execution input.
18
+ */
19
+ run: (input: IResourceMiddlewareExecutionInput<TEnforceInputContract extends void ? any : TEnforceInputContract, TEnforceOutputContract extends void ? any : TEnforceOutputContract>, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
20
+ meta?: IMiddlewareMeta;
21
+ tags?: TagType[];
22
+ everywhere?: boolean | ((resource: IResource<any, any, any, any, any>) => boolean);
23
+ }
24
+ export interface IResourceMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends IResourceMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
25
+ [symbolResourceMiddleware]: true;
26
+ id: string;
27
+ dependencies: TDependencies | ((config: TConfig) => TDependencies);
28
+ /** Current configuration object (empty by default). */
29
+ config: TConfig;
30
+ /** Configure the middleware and return a marked, configured instance. */
31
+ with: (config: TConfig) => IResourceMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
32
+ [symbolFilePath]: string;
33
+ tags: TagType[];
34
+ }
35
+ export interface IResourceMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends IResourceMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies> {
36
+ [symbolMiddlewareConfigured]: true;
37
+ }
38
+ export interface IResourceMiddlewareExecutionInput<TResourceConfig = any, TResourceOutput = any> {
39
+ /** Resource hook */
40
+ resource: {
41
+ definition: IResource<TResourceConfig, any, any, any, any>;
42
+ config: TResourceConfig;
43
+ };
44
+ next: (resourceConfig?: TResourceConfig) => Promise<TResourceOutput>;
45
+ }
46
+ export type ResourceMiddlewareAttachmentType = IResourceMiddleware<void, any, any, any> | IResourceMiddleware<{
47
+ [K in any]?: any;
48
+ }, any, any, any> | IResourceMiddlewareConfigured<any, any, any, any>;
@@ -0,0 +1,68 @@
1
+ import { DebugFriendlyConfig } from "../globals/resources/debug";
2
+ import { LogLevels, PrintStrategy } from "../models/Logger";
3
+ import { OnUnhandledError } from "../models/UnhandledError";
4
+ export type RunOptions = {
5
+ /**
6
+ * Defaults to undefined. If true, we introduce logging to the console.
7
+ */
8
+ debug?: DebugFriendlyConfig;
9
+ /**
10
+ * Configure logging settings.
11
+ */
12
+ logs?: {
13
+ /**
14
+ * Defaults to info. Use null to disable logging.
15
+ */
16
+ printThreshold?: null | LogLevels;
17
+ /**
18
+ * Defaults to PRETTY. How to print the logs.
19
+ */
20
+ printStrategy?: PrintStrategy;
21
+ /**
22
+ * Defaults to false. If true, we buffer logs until the root resource is ready.
23
+ * This provides you with the chance to see the logs before the root resource is ready.
24
+ */
25
+ bufferLogs?: boolean;
26
+ };
27
+ /**
28
+ * When true (default), installs a central error boundary that catches uncaught errors
29
+ * from process-level events and routes them to `onUnhandledError`.
30
+ */
31
+ errorBoundary?: boolean;
32
+ /**
33
+ * When true (default), installs SIGINT/SIGTERM handlers that call dispose() on the root allowing for graceful shutdown.
34
+ */
35
+ shutdownHooks?: boolean;
36
+ /**
37
+ * Custom handler for any unhandled error caught by Runner. Defaults to logging via the created logger.
38
+ */
39
+ onUnhandledError?: OnUnhandledError;
40
+ /**
41
+ * Defaults to false.
42
+ *
43
+ * Dry run mode. When true, the runner will setup the system, ensure there are no errors, but will not start the system.
44
+ * Your resources will not be initialized, and no events will be emitted. This is useful for testing and debugging.
45
+ *
46
+ * Note: this cannot catch init() errors that happen within resources.
47
+ */
48
+ dryRun?: boolean;
49
+ /**
50
+ * Defaults to true.
51
+ * When set, forces runtime cycle detection for event emissions. Disable if you're sure
52
+ * you don't have event deadlocks to improve event emission performance.
53
+ */
54
+ runtimeEventCycleDetection?: boolean;
55
+ /**
56
+ * Specify in which mode to run "dev", "prod" or "test".
57
+ * If inside Node this is automatically detected from the NODE_ENV environment variable if not provided.
58
+ */
59
+ mode?: RunnerMode;
60
+ };
61
+ /**
62
+ * The mode in which the runner is operating
63
+ */
64
+ export declare enum RunnerMode {
65
+ TEST = "test",
66
+ DEV = "dev",
67
+ PROD = "prod"
68
+ }
@@ -0,0 +1,46 @@
1
+ import { DependencyMapType, DependencyValuesType, ResourceDependencyValuesType } from "./utilities";
2
+ import { IResource } from "./resource";
3
+ import { ITask } from "./task";
4
+ import { IHook } from "./hook";
5
+ import { ITaskMiddleware } from "./taskMiddleware";
6
+ import { IResourceMiddleware } from "./resourceMiddleware";
7
+ import { IEvent } from "./event";
8
+ import { IEventDefinition } from "./event";
9
+ import { TaskLocalInterceptor } from "./utilities";
10
+ export declare enum HookDependencyState {
11
+ Pending = "pending",
12
+ Computing = "computing",
13
+ Ready = "ready"
14
+ }
15
+ export type ResourceStoreElementType<C = any, V extends Promise<any> = any, D extends DependencyMapType = {}, TContext = any> = {
16
+ resource: IResource<C, V, D, TContext>;
17
+ computedDependencies?: ResourceDependencyValuesType<D>;
18
+ config: C;
19
+ value: V;
20
+ context: TContext;
21
+ isInitialized?: boolean;
22
+ };
23
+ export type TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any> = {
24
+ task: ITask<Input, Output, D>;
25
+ computedDependencies: DependencyValuesType<D>;
26
+ isInitialized: boolean;
27
+ interceptors?: Array<TaskLocalInterceptor<any, any>>;
28
+ };
29
+ export type HookStoreElementType<D extends DependencyMapType = any, TOn extends "*" | IEventDefinition = any> = {
30
+ hook: IHook<D, TOn>;
31
+ computedDependencies: DependencyValuesType<D>;
32
+ dependencyState: HookDependencyState;
33
+ };
34
+ export type TaskMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
35
+ middleware: ITaskMiddleware<any, any, any, TDeps>;
36
+ computedDependencies: DependencyValuesType<TDeps>;
37
+ isInitialized: boolean;
38
+ };
39
+ export type ResourceMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
40
+ middleware: IResourceMiddleware<any, any, any, TDeps>;
41
+ computedDependencies: DependencyValuesType<TDeps>;
42
+ isInitialized: boolean;
43
+ };
44
+ export type EventStoreElementType = {
45
+ event: IEvent<any>;
46
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Internal brand symbols used to tag created objects at runtime and help with
3
+ * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`
4
+ * helpers instead of touching these directly.
5
+ * @internal
6
+ */
7
+ export declare const symbolTask: unique symbol;
8
+ /** Marks a task as a phantom task (no-op run; meant to be tunneled/routed). */
9
+ export declare const symbolPhantomTask: unique symbol;
10
+ export declare const symbolResource: unique symbol;
11
+ /** @internal Marks forked resources and records fork provenance */
12
+ export declare const symbolResourceForkedFrom: unique symbol;
13
+ export declare const symbolResourceWithConfig: unique symbol;
14
+ export declare const symbolEvent: unique symbol;
15
+ /** @internal Marks an error helper definition */
16
+ export declare const symbolError: unique symbol;
17
+ export declare const symbolMiddleware: unique symbol;
18
+ /** New brands for separated middleware kinds */
19
+ export declare const symbolTaskMiddleware: unique symbol;
20
+ export declare const symbolResourceMiddleware: unique symbol;
21
+ export declare const symbolMiddlewareConfigured: unique symbol;
22
+ /** Records which tunnel resource owns the task patching (exclusivity). */
23
+ export declare const symbolTunneledBy: unique symbol;
24
+ /** @internal Marks hook definitions (event listeners without middleware) */
25
+ export declare const symbolHook: unique symbol;
26
+ /** @internal Marks a tag definition */
27
+ export declare const symbolTag: unique symbol;
28
+ export declare const symbolTagConfigured: unique symbol;
29
+ /** @internal Marks an optional dependency wrapper */
30
+ export declare const symbolOptionalDependency: unique symbol;
31
+ /** @internal Path to aid anonymous id generation and error messages */
32
+ export declare const symbolFilePath: unique symbol;
33
+ /** @internal Marks an async context definition */
34
+ export declare const symbolAsyncContext: unique symbol;
@@ -0,0 +1,45 @@
1
+ import { IContractable } from "./contracts";
2
+ import { ITagMeta } from "./meta";
3
+ import { IValidationSchema, RequiredKeys, symbolFilePath, symbolTag, symbolTagConfigured } from "./utilities";
4
+ export interface ITaggable {
5
+ tags: TagType[];
6
+ }
7
+ export interface ITagDefinition<TConfig = void, _TEnforceInputContract = void, _TEnforceOutputContract = void> {
8
+ id: string;
9
+ meta?: ITagMeta;
10
+ configSchema?: IValidationSchema<TConfig>;
11
+ /**
12
+ * Utilizing config at definition level stores its defaults
13
+ */
14
+ config?: TConfig;
15
+ }
16
+ export interface ITag<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> extends ITagDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
17
+ /**
18
+ * A special validation property.
19
+ * It resolves to `true` if TConfig only has optional keys, otherwise `false`.
20
+ */
21
+ readonly __configHasOnlyOptionalKeys: RequiredKeys<TConfig> extends never ? true : false;
22
+ config?: TConfig;
23
+ /**
24
+ * Checks if the tag exists in a taggable or a list of tags.
25
+ */
26
+ exists(target: ITaggable | TagType[]): boolean;
27
+ /**
28
+ * Creates a configured instance of the tag.
29
+ */
30
+ with(config: TConfig): ITagConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract>;
31
+ /**
32
+ * Extracts the configuration of the tag from a taggable or a list of tags.
33
+ */
34
+ extract(target: ITaggable | TagType[]): TConfig | undefined;
35
+ [symbolFilePath]: string;
36
+ [symbolTag]: true;
37
+ }
38
+ export type ITagWithOptionalConfig<_TValue, TEnforceInputContract, TEnforceOutputContract> = ITag<any, TEnforceInputContract, TEnforceOutputContract> & {
39
+ readonly __configHasOnlyOptionalKeys: true;
40
+ };
41
+ export interface ITagConfigured<TConfig = void, TEnforceInputContract = void, TEnforceOutputContract = void> extends ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {
42
+ [symbolTagConfigured]: true;
43
+ config: TConfig;
44
+ }
45
+ export type TagType = ITag<void, any, any> | ITagWithOptionalConfig<any, any, any> | ITagConfigured<any, any, any>;
@@ -0,0 +1,76 @@
1
+ import { DependencyMapType, DependencyValuesType, IOptionalDependency, IValidationSchema } from "./utilities";
2
+ import { TaskMiddlewareAttachmentType } from "./taskMiddleware";
3
+ import { TagType } from "./tag";
4
+ import { ITaskMeta } from "./meta";
5
+ import type { ThrowsList } from "./error";
6
+ import type { ExecutionJournal } from "./executionJournal";
7
+ import { symbolFilePath, symbolTask, symbolPhantomTask, symbolTunneledBy } from "./symbols";
8
+ import { EnsureInputSatisfiesContracts, EnsureOutputSatisfiesContracts, HasInputContracts, HasOutputContracts, InferInputOrViolationFromContracts } from "./contracts";
9
+ export type { DependencyMapType, DependencyValuesType, IOptionalDependency, } from "./utilities";
10
+ export type { TaskMiddlewareAttachmentType } from "./taskMiddleware";
11
+ export type { TagType } from "./tag";
12
+ export type { ITaskMeta } from "./meta";
13
+ export interface ITaskDefinition<TInput = undefined, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> {
14
+ id: string;
15
+ /**
16
+ * Access other tasks/resources/events. Can be an object or a function when
17
+ * you need late or config‑dependent resolution.
18
+ */
19
+ dependencies?: TDependencies | (() => TDependencies);
20
+ /** Middleware applied around task execution. */
21
+ middleware?: TMiddleware;
22
+ /** Optional metadata used for docs, filtering and tooling. */
23
+ meta?: TMeta;
24
+ /**
25
+ * Optional validation schema for runtime input validation.
26
+ * When provided, task input will be validated before execution.
27
+ */
28
+ inputSchema?: IValidationSchema<TInput>;
29
+ /**
30
+ * Optional validation schema for the task result.
31
+ * When provided, the result will be validated immediately after the task's
32
+ * `run` resolves, without considering middleware.
33
+ */
34
+ resultSchema?: IValidationSchema<TOutput extends Promise<infer U> ? U : never>;
35
+ /**
36
+ * Declares which typed errors are part of this task's contract.
37
+ *
38
+ * This is a declarative contract only:
39
+ * - It does not imply dependency injection
40
+ * - It does not enforce that only these errors can be thrown
41
+ *
42
+ * Use string ids or Error helpers.
43
+ */
44
+ throws?: ThrowsList;
45
+ run: (input: HasInputContracts<[...TTags, ...TMiddleware]> extends true ? [TInput] extends [undefined] ? InferInputOrViolationFromContracts<[...TTags, ...TMiddleware]> : EnsureInputSatisfiesContracts<[...TTags, ...TMiddleware], TInput> : TInput, dependencies: DependencyValuesType<TDependencies>, context?: {
46
+ journal: ExecutionJournal;
47
+ }) => HasOutputContracts<[...TTags, ...TMiddleware]> extends true ? EnsureOutputSatisfiesContracts<[...TTags, ...TMiddleware], TOutput> : TOutput;
48
+ /**
49
+ * Tags applied to the task that might define its behvaiour or impact the systems.
50
+ */
51
+ tags?: TTags;
52
+ }
53
+ export 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> {
54
+ [symbolFilePath]: string;
55
+ [symbolTask]: true;
56
+ /** Present only for phantom tasks. */
57
+ [symbolPhantomTask]?: true;
58
+ /** Indicates if the task is tunneled through a tunnel client. */
59
+ isTunneled?: boolean;
60
+ /** Records which tunnel resource owns the task (exclusivity). */
61
+ [symbolTunneledBy]?: string;
62
+ id: string;
63
+ dependencies: TDependencies | (() => TDependencies);
64
+ computedDependencies?: DependencyValuesType<TDependencies>;
65
+ middleware: TMiddleware;
66
+ /** Normalized list of error ids declared via `throws`. */
67
+ throws?: readonly string[];
68
+ /** Return an optional dependency wrapper for this task. */
69
+ optional: () => IOptionalDependency<ITask<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware>>;
70
+ tags: TTags;
71
+ }
72
+ export type AnyTask = ITask<any, any, any, any, any, any>;
73
+ /** Narrowed type for phantom tasks (no-op run by default). */
74
+ export type IPhantomTask<TInput = any, TResolved = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> = ITask<TInput, Promise<TResolved>, TDependencies, TMeta, TTags, TMiddleware> & {
75
+ [symbolPhantomTask]: true;
76
+ };
@@ -0,0 +1,55 @@
1
+ import { DependencyMapType, DependencyValuesType, IValidationSchema } from "./utilities";
2
+ import type { ITask } from "./task";
3
+ import type { ExecutionJournal } from "./executionJournal";
4
+ import { TagType } from "./tag";
5
+ import { IMiddlewareMeta } from "./meta";
6
+ import { symbolFilePath, symbolMiddlewareConfigured, symbolTaskMiddleware } from "./symbols";
7
+ import { IContractable } from "./contracts";
8
+ export type { DependencyMapType, DependencyValuesType } from "./utilities";
9
+ export type { TagType } from "./tag";
10
+ export type { IMiddlewareMeta } from "./meta";
11
+ export interface ITaskMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> {
12
+ id: string;
13
+ /** Static or lazy dependency map. */
14
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
15
+ /**
16
+ * Optional validation schema for runtime config validation.
17
+ * When provided, middleware config will be validated when .with() is called.
18
+ */
19
+ configSchema?: IValidationSchema<TConfig>;
20
+ /**
21
+ * The middleware body, called with task execution input.
22
+ */
23
+ run: (input: ITaskMiddlewareExecutionInput<TEnforceInputContract extends void ? any : TEnforceInputContract, TEnforceOutputContract extends void ? any : TEnforceOutputContract>, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
24
+ meta?: IMiddlewareMeta;
25
+ tags?: TagType[];
26
+ everywhere?: boolean | ((task: ITask<any, any, any, any>) => boolean);
27
+ }
28
+ export interface ITaskMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
29
+ [symbolTaskMiddleware]: true;
30
+ [symbolFilePath]: string;
31
+ id: string;
32
+ dependencies: TDependencies | ((config: TConfig) => TDependencies);
33
+ /** Current configuration object (empty by default). */
34
+ config: TConfig;
35
+ /** Configure the middleware and return a marked, configured instance. */
36
+ with: (config: TConfig) => ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
37
+ tags: TagType[];
38
+ }
39
+ export interface ITaskMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies> {
40
+ [symbolMiddlewareConfigured]: true;
41
+ config: TConfig;
42
+ }
43
+ export interface ITaskMiddlewareExecutionInput<TTaskInput = any, TTaskOutput = any> {
44
+ /** Task hook */
45
+ task: {
46
+ definition: ITask<TTaskInput, any, any, any>;
47
+ input: TTaskInput;
48
+ };
49
+ next: (taskInput?: TTaskInput) => Promise<TTaskOutput>;
50
+ /** Per-execution registry for sharing state between middleware and task */
51
+ journal: ExecutionJournal;
52
+ }
53
+ export type TaskMiddlewareAttachmentType = ITaskMiddleware<void, any, any, any> | ITaskMiddleware<{
54
+ [K in any]?: any;
55
+ }, any, any, any> | ITaskMiddlewareConfigured<any, any, any, any>;