@bluelibs/runner 3.4.2 → 4.0.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 (375) hide show
  1. package/AI.md +621 -0
  2. package/README.md +1024 -577
  3. package/dist/context.d.ts +4 -8
  4. package/dist/context.js +5 -12
  5. package/dist/context.js.map +1 -1
  6. package/dist/define.d.ts +9 -113
  7. package/dist/define.js +29 -358
  8. package/dist/define.js.map +1 -1
  9. package/dist/definers/defineEvent.d.ts +2 -0
  10. package/dist/definers/defineEvent.js +23 -0
  11. package/dist/definers/defineEvent.js.map +1 -0
  12. package/dist/definers/defineHook.d.ts +6 -0
  13. package/dist/definers/defineHook.js +24 -0
  14. package/dist/definers/defineHook.js.map +1 -0
  15. package/dist/definers/defineOverride.d.ts +14 -0
  16. package/dist/definers/defineOverride.js +13 -0
  17. package/dist/definers/defineOverride.js.map +1 -0
  18. package/dist/definers/defineResource.d.ts +2 -0
  19. package/dist/definers/defineResource.js +69 -0
  20. package/dist/definers/defineResource.js.map +1 -0
  21. package/dist/definers/defineResourceMiddleware.d.ts +2 -0
  22. package/dist/definers/defineResourceMiddleware.js +42 -0
  23. package/dist/definers/defineResourceMiddleware.js.map +1 -0
  24. package/dist/definers/defineTag.d.ts +12 -0
  25. package/dist/definers/defineTag.js +106 -0
  26. package/dist/definers/defineTag.js.map +1 -0
  27. package/dist/definers/defineTask.d.ts +15 -0
  28. package/dist/definers/defineTask.js +42 -0
  29. package/dist/definers/defineTask.js.map +1 -0
  30. package/dist/definers/defineTaskMiddleware.d.ts +2 -0
  31. package/dist/definers/defineTaskMiddleware.js +42 -0
  32. package/dist/definers/defineTaskMiddleware.js.map +1 -0
  33. package/dist/definers/tools.d.ts +45 -0
  34. package/dist/definers/tools.js +75 -0
  35. package/dist/definers/tools.js.map +1 -0
  36. package/dist/defs.d.ts +16 -424
  37. package/dist/defs.js +26 -38
  38. package/dist/defs.js.map +1 -1
  39. package/dist/errors.d.ts +23 -8
  40. package/dist/errors.js +50 -10
  41. package/dist/errors.js.map +1 -1
  42. package/dist/globals/globalEvents.d.ts +15 -39
  43. package/dist/globals/globalEvents.js +20 -81
  44. package/dist/globals/globalEvents.js.map +1 -1
  45. package/dist/globals/globalMiddleware.d.ts +24 -17
  46. package/dist/globals/globalMiddleware.js +12 -4
  47. package/dist/globals/globalMiddleware.js.map +1 -1
  48. package/dist/globals/globalResources.d.ts +13 -28
  49. package/dist/globals/globalResources.js +15 -7
  50. package/dist/globals/globalResources.js.map +1 -1
  51. package/dist/globals/globalTags.d.ts +9 -0
  52. package/dist/globals/globalTags.js +23 -0
  53. package/dist/globals/globalTags.js.map +1 -0
  54. package/dist/globals/middleware/cache.middleware.d.ts +10 -17
  55. package/dist/globals/middleware/cache.middleware.js +4 -16
  56. package/dist/globals/middleware/cache.middleware.js.map +1 -1
  57. package/dist/globals/middleware/requireContext.middleware.d.ts +1 -1
  58. package/dist/globals/middleware/requireContext.middleware.js +5 -14
  59. package/dist/globals/middleware/requireContext.middleware.js.map +1 -1
  60. package/dist/globals/middleware/retry.middleware.d.ts +2 -1
  61. package/dist/globals/middleware/retry.middleware.js +32 -5
  62. package/dist/globals/middleware/retry.middleware.js.map +1 -1
  63. package/dist/globals/middleware/timeout.middleware.d.ts +2 -1
  64. package/dist/globals/middleware/timeout.middleware.js +31 -5
  65. package/dist/globals/middleware/timeout.middleware.js.map +1 -1
  66. package/dist/globals/resources/debug/debug.resource.d.ts +7 -0
  67. package/dist/globals/resources/debug/debug.resource.js +29 -0
  68. package/dist/globals/resources/debug/debug.resource.js.map +1 -0
  69. package/dist/globals/resources/debug/debug.tag.d.ts +2 -0
  70. package/dist/globals/resources/debug/debug.tag.js +12 -0
  71. package/dist/globals/resources/debug/debug.tag.js.map +1 -0
  72. package/dist/globals/resources/debug/debugConfig.resource.d.ts +22 -0
  73. package/dist/globals/resources/debug/debugConfig.resource.js +20 -0
  74. package/dist/globals/resources/debug/debugConfig.resource.js.map +1 -0
  75. package/dist/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
  76. package/dist/globals/resources/debug/executionTracker.middleware.js +87 -0
  77. package/dist/globals/resources/debug/executionTracker.middleware.js.map +1 -0
  78. package/dist/globals/resources/debug/globalEvent.hook.d.ts +27 -0
  79. package/dist/globals/resources/debug/globalEvent.hook.js +38 -0
  80. package/dist/globals/resources/debug/globalEvent.hook.js.map +1 -0
  81. package/dist/globals/resources/debug/hook.hook.d.ts +25 -0
  82. package/dist/globals/resources/debug/hook.hook.js +42 -0
  83. package/dist/globals/resources/debug/hook.hook.js.map +1 -0
  84. package/dist/globals/resources/debug/index.d.ts +6 -0
  85. package/dist/{types → globals/resources/debug}/index.js +6 -11
  86. package/dist/globals/resources/debug/index.js.map +1 -0
  87. package/dist/globals/resources/debug/middleware.hook.d.ts +25 -0
  88. package/dist/globals/resources/debug/middleware.hook.js +71 -0
  89. package/dist/globals/resources/debug/middleware.hook.js.map +1 -0
  90. package/dist/globals/resources/debug/types.d.ts +25 -0
  91. package/dist/globals/resources/debug/types.js +65 -0
  92. package/dist/globals/resources/debug/types.js.map +1 -0
  93. package/dist/globals/resources/debug/utils.d.ts +2 -0
  94. package/dist/globals/resources/debug/utils.js +9 -0
  95. package/dist/globals/resources/debug/utils.js.map +1 -0
  96. package/dist/globals/resources/queue.resource.d.ts +3 -3
  97. package/dist/globals/resources/queue.resource.js.map +1 -1
  98. package/dist/globals/types.d.ts +1 -0
  99. package/dist/{task.types.js → globals/types.js} +2 -7
  100. package/dist/globals/types.js.map +1 -0
  101. package/dist/index.d.ts +58 -85
  102. package/dist/index.js +23 -10
  103. package/dist/index.js.map +1 -1
  104. package/dist/models/DependencyProcessor.d.ts +8 -6
  105. package/dist/models/DependencyProcessor.js +116 -33
  106. package/dist/models/DependencyProcessor.js.map +1 -1
  107. package/dist/models/EventManager.d.ts +127 -7
  108. package/dist/models/EventManager.js +251 -78
  109. package/dist/models/EventManager.js.map +1 -1
  110. package/dist/models/LogPrinter.d.ts +55 -0
  111. package/dist/models/LogPrinter.js +196 -0
  112. package/dist/models/LogPrinter.js.map +1 -0
  113. package/dist/models/Logger.d.ts +47 -27
  114. package/dist/models/Logger.js +133 -155
  115. package/dist/models/Logger.js.map +1 -1
  116. package/dist/models/MiddlewareManager.d.ts +86 -0
  117. package/dist/models/MiddlewareManager.js +409 -0
  118. package/dist/models/MiddlewareManager.js.map +1 -0
  119. package/dist/models/OverrideManager.d.ts +3 -3
  120. package/dist/models/OverrideManager.js +22 -7
  121. package/dist/models/OverrideManager.js.map +1 -1
  122. package/dist/models/ResourceInitializer.d.ts +4 -3
  123. package/dist/models/ResourceInitializer.js +12 -68
  124. package/dist/models/ResourceInitializer.js.map +1 -1
  125. package/dist/models/RunResult.d.ts +35 -0
  126. package/dist/models/RunResult.js +68 -0
  127. package/dist/models/RunResult.js.map +1 -0
  128. package/dist/models/Store.d.ts +30 -17
  129. package/dist/models/Store.js +87 -25
  130. package/dist/models/Store.js.map +1 -1
  131. package/dist/models/StoreRegistry.d.ts +34 -19
  132. package/dist/models/StoreRegistry.js +248 -100
  133. package/dist/models/StoreRegistry.js.map +1 -1
  134. package/dist/models/StoreValidator.d.ts +5 -7
  135. package/dist/models/StoreValidator.js +50 -17
  136. package/dist/models/StoreValidator.js.map +1 -1
  137. package/dist/models/TaskRunner.d.ts +3 -2
  138. package/dist/models/TaskRunner.js +6 -103
  139. package/dist/models/TaskRunner.js.map +1 -1
  140. package/dist/models/UnhandledError.d.ts +11 -0
  141. package/dist/models/UnhandledError.js +30 -0
  142. package/dist/models/UnhandledError.js.map +1 -0
  143. package/dist/models/index.d.ts +3 -0
  144. package/dist/models/index.js +3 -0
  145. package/dist/models/index.js.map +1 -1
  146. package/dist/{tools → models/utils}/findCircularDependencies.js +8 -16
  147. package/dist/models/utils/findCircularDependencies.js.map +1 -0
  148. package/dist/models/utils/safeStringify.d.ts +3 -0
  149. package/dist/models/utils/safeStringify.js +45 -0
  150. package/dist/models/utils/safeStringify.js.map +1 -0
  151. package/dist/processHooks.d.ts +2 -0
  152. package/dist/processHooks.js +70 -0
  153. package/dist/processHooks.js.map +1 -0
  154. package/dist/run.d.ts +14 -27
  155. package/dist/run.js +100 -36
  156. package/dist/run.js.map +1 -1
  157. package/dist/testing.d.ts +5 -4
  158. package/dist/testing.js +3 -2
  159. package/dist/testing.js.map +1 -1
  160. package/dist/tools/getCallerFile.d.ts +0 -8
  161. package/dist/tools/getCallerFile.js +0 -51
  162. package/dist/tools/getCallerFile.js.map +1 -1
  163. package/dist/types/contracts.d.ts +55 -0
  164. package/dist/types/contracts.js +4 -0
  165. package/dist/types/contracts.js.map +1 -0
  166. package/dist/types/event.d.ts +26 -7
  167. package/dist/types/event.js +1 -1
  168. package/dist/types/event.js.map +1 -1
  169. package/dist/types/hook.d.ts +21 -0
  170. package/dist/{models/StoreTypes.js → types/hook.js} +2 -1
  171. package/dist/types/hook.js.map +1 -0
  172. package/dist/types/meta.d.ts +6 -1
  173. package/dist/types/meta.js +4 -2
  174. package/dist/types/meta.js.map +1 -1
  175. package/dist/types/resource.d.ts +40 -52
  176. package/dist/types/resource.js +1 -0
  177. package/dist/types/resource.js.map +1 -1
  178. package/dist/types/resourceMiddleware.d.ts +47 -0
  179. package/dist/{middleware.types.js → types/resourceMiddleware.js} +1 -1
  180. package/dist/types/resourceMiddleware.js.map +1 -0
  181. package/dist/types/runner.d.ts +37 -0
  182. package/dist/types/{base.js → runner.js} +1 -1
  183. package/dist/types/runner.js.map +1 -0
  184. package/dist/types/storeTypes.d.ts +40 -0
  185. package/dist/types/{metadata.js → storeTypes.js} +1 -1
  186. package/dist/types/storeTypes.js.map +1 -0
  187. package/dist/types/symbols.d.ts +10 -21
  188. package/dist/types/symbols.js +17 -22
  189. package/dist/types/symbols.js.map +1 -1
  190. package/dist/types/tag.d.ts +46 -0
  191. package/dist/{resource.types.js → types/tag.js} +2 -1
  192. package/dist/types/tag.js.map +1 -0
  193. package/dist/types/task.d.ts +28 -52
  194. package/dist/types/task.js +1 -0
  195. package/dist/types/task.js.map +1 -1
  196. package/dist/types/taskMiddleware.d.ts +48 -0
  197. package/dist/{event.types.js → types/taskMiddleware.js} +1 -1
  198. package/dist/types/taskMiddleware.js.map +1 -0
  199. package/dist/types/utilities.d.ts +105 -6
  200. package/dist/types/utilities.js +16 -2
  201. package/dist/types/utilities.js.map +1 -1
  202. package/package.json +14 -5
  203. package/dist/cli/extract-docs.d.ts +0 -2
  204. package/dist/cli/extract-docs.js +0 -88
  205. package/dist/cli/extract-docs.js.map +0 -1
  206. package/dist/common.types.d.ts +0 -20
  207. package/dist/common.types.js +0 -4
  208. package/dist/common.types.js.map +0 -1
  209. package/dist/defs/core.d.ts +0 -144
  210. package/dist/defs/core.js +0 -6
  211. package/dist/defs/core.js.map +0 -1
  212. package/dist/defs/symbols.d.ts +0 -42
  213. package/dist/defs/symbols.js +0 -45
  214. package/dist/defs/symbols.js.map +0 -1
  215. package/dist/defs/tags.d.ts +0 -70
  216. package/dist/defs/tags.js +0 -6
  217. package/dist/defs/tags.js.map +0 -1
  218. package/dist/defs.returnTag.d.ts +0 -36
  219. package/dist/defs.returnTag.js +0 -4
  220. package/dist/defs.returnTag.js.map +0 -1
  221. package/dist/docs/introspect.d.ts +0 -7
  222. package/dist/docs/introspect.js +0 -199
  223. package/dist/docs/introspect.js.map +0 -1
  224. package/dist/docs/markdown.d.ts +0 -2
  225. package/dist/docs/markdown.js +0 -148
  226. package/dist/docs/markdown.js.map +0 -1
  227. package/dist/docs/model.d.ts +0 -62
  228. package/dist/docs/model.js +0 -33
  229. package/dist/docs/model.js.map +0 -1
  230. package/dist/event.types.d.ts +0 -18
  231. package/dist/event.types.js.map +0 -1
  232. package/dist/examples/express-mongo/index.d.ts +0 -0
  233. package/dist/examples/express-mongo/index.js +0 -3
  234. package/dist/examples/express-mongo/index.js.map +0 -1
  235. package/dist/examples/registrator-example.d.ts +0 -122
  236. package/dist/examples/registrator-example.js +0 -147
  237. package/dist/examples/registrator-example.js.map +0 -1
  238. package/dist/express/docsRouter.d.ts +0 -12
  239. package/dist/express/docsRouter.js +0 -54
  240. package/dist/express/docsRouter.js.map +0 -1
  241. package/dist/globalEvents.d.ts +0 -40
  242. package/dist/globalEvents.js +0 -94
  243. package/dist/globalEvents.js.map +0 -1
  244. package/dist/globalResources.d.ts +0 -10
  245. package/dist/globalResources.js +0 -43
  246. package/dist/globalResources.js.map +0 -1
  247. package/dist/middleware.types.d.ts +0 -40
  248. package/dist/middleware.types.js.map +0 -1
  249. package/dist/models/StoreConstants.d.ts +0 -14
  250. package/dist/models/StoreConstants.js +0 -19
  251. package/dist/models/StoreConstants.js.map +0 -1
  252. package/dist/models/StoreTypes.d.ts +0 -21
  253. package/dist/models/StoreTypes.js.map +0 -1
  254. package/dist/models/VarStore.d.ts +0 -17
  255. package/dist/models/VarStore.js +0 -60
  256. package/dist/models/VarStore.js.map +0 -1
  257. package/dist/resource.types.d.ts +0 -31
  258. package/dist/resource.types.js.map +0 -1
  259. package/dist/symbols.d.ts +0 -24
  260. package/dist/symbols.js +0 -29
  261. package/dist/symbols.js.map +0 -1
  262. package/dist/t1.d.ts +0 -1
  263. package/dist/t1.js +0 -13
  264. package/dist/t1.js.map +0 -1
  265. package/dist/task.types.d.ts +0 -55
  266. package/dist/task.types.js.map +0 -1
  267. package/dist/tools/findCircularDependencies.js.map +0 -1
  268. package/dist/tools/registratorId.d.ts +0 -4
  269. package/dist/tools/registratorId.js +0 -40
  270. package/dist/tools/registratorId.js.map +0 -1
  271. package/dist/tools/simpleHash.d.ts +0 -9
  272. package/dist/tools/simpleHash.js +0 -34
  273. package/dist/tools/simpleHash.js.map +0 -1
  274. package/dist/types/base-interfaces.d.ts +0 -18
  275. package/dist/types/base-interfaces.js +0 -6
  276. package/dist/types/base-interfaces.js.map +0 -1
  277. package/dist/types/base.d.ts +0 -13
  278. package/dist/types/base.js.map +0 -1
  279. package/dist/types/dependencies.d.ts +0 -51
  280. package/dist/types/dependencies.js +0 -3
  281. package/dist/types/dependencies.js.map +0 -1
  282. package/dist/types/dependency-core.d.ts +0 -14
  283. package/dist/types/dependency-core.js +0 -5
  284. package/dist/types/dependency-core.js.map +0 -1
  285. package/dist/types/events.d.ts +0 -52
  286. package/dist/types/events.js +0 -6
  287. package/dist/types/events.js.map +0 -1
  288. package/dist/types/hooks.d.ts +0 -16
  289. package/dist/types/hooks.js +0 -5
  290. package/dist/types/hooks.js.map +0 -1
  291. package/dist/types/index.d.ts +0 -8
  292. package/dist/types/index.js.map +0 -1
  293. package/dist/types/metadata.d.ts +0 -75
  294. package/dist/types/metadata.js.map +0 -1
  295. package/dist/types/middleware.d.ts +0 -63
  296. package/dist/types/middleware.js +0 -3
  297. package/dist/types/middleware.js.map +0 -1
  298. package/dist/types/registerable.d.ts +0 -10
  299. package/dist/types/registerable.js +0 -5
  300. package/dist/types/registerable.js.map +0 -1
  301. package/dist/types/resources.d.ts +0 -44
  302. package/dist/types/resources.js +0 -5
  303. package/dist/types/resources.js.map +0 -1
  304. package/dist/types/tasks.d.ts +0 -41
  305. package/dist/types/tasks.js +0 -5
  306. package/dist/types/tasks.js.map +0 -1
  307. package/src/__tests__/benchmark/benchmark.test.ts +0 -148
  308. package/src/__tests__/benchmark/task-benchmark.test.ts +0 -132
  309. package/src/__tests__/context.test.ts +0 -91
  310. package/src/__tests__/createTestResource.test.ts +0 -139
  311. package/src/__tests__/errors.test.ts +0 -341
  312. package/src/__tests__/globalEvents.test.ts +0 -542
  313. package/src/__tests__/globals/cache.middleware.test.ts +0 -772
  314. package/src/__tests__/globals/queue.resource.test.ts +0 -141
  315. package/src/__tests__/globals/requireContext.middleware.test.ts +0 -98
  316. package/src/__tests__/globals/retry.middleware.test.ts +0 -157
  317. package/src/__tests__/globals/timeout.middleware.test.ts +0 -88
  318. package/src/__tests__/index.helper.test.ts +0 -55
  319. package/src/__tests__/models/EventManager.test.ts +0 -585
  320. package/src/__tests__/models/Logger.test.ts +0 -519
  321. package/src/__tests__/models/Queue.test.ts +0 -189
  322. package/src/__tests__/models/ResourceInitializer.test.ts +0 -148
  323. package/src/__tests__/models/Semaphore.test.ts +0 -713
  324. package/src/__tests__/models/Store.test.ts +0 -227
  325. package/src/__tests__/models/TaskRunner.test.ts +0 -221
  326. package/src/__tests__/override.test.ts +0 -104
  327. package/src/__tests__/recursion/README.md +0 -3
  328. package/src/__tests__/recursion/a.resource.ts +0 -25
  329. package/src/__tests__/recursion/b.resource.ts +0 -33
  330. package/src/__tests__/recursion/c.resource.ts +0 -18
  331. package/src/__tests__/run.anonymous.test.ts +0 -706
  332. package/src/__tests__/run.dynamic-register-and-dependencies.test.ts +0 -1185
  333. package/src/__tests__/run.middleware.test.ts +0 -549
  334. package/src/__tests__/run.overrides.test.ts +0 -424
  335. package/src/__tests__/run.test.ts +0 -1040
  336. package/src/__tests__/setOutput.test.ts +0 -244
  337. package/src/__tests__/tags.test.ts +0 -396
  338. package/src/__tests__/tools/findCircularDependencies.test.ts +0 -217
  339. package/src/__tests__/tools/getCallerFile.test.ts +0 -179
  340. package/src/__tests__/typesafety.test.ts +0 -423
  341. package/src/__tests__/validation-edge-cases.test.ts +0 -111
  342. package/src/__tests__/validation-interface.test.ts +0 -428
  343. package/src/context.ts +0 -86
  344. package/src/define.ts +0 -480
  345. package/src/defs.returnTag.ts +0 -91
  346. package/src/defs.ts +0 -596
  347. package/src/errors.ts +0 -105
  348. package/src/globals/globalEvents.ts +0 -125
  349. package/src/globals/globalMiddleware.ts +0 -16
  350. package/src/globals/globalResources.ts +0 -53
  351. package/src/globals/middleware/cache.middleware.ts +0 -115
  352. package/src/globals/middleware/requireContext.middleware.ts +0 -36
  353. package/src/globals/middleware/retry.middleware.ts +0 -56
  354. package/src/globals/middleware/timeout.middleware.ts +0 -46
  355. package/src/globals/resources/queue.resource.ts +0 -34
  356. package/src/index.ts +0 -39
  357. package/src/models/DependencyProcessor.ts +0 -257
  358. package/src/models/EventManager.ts +0 -210
  359. package/src/models/Logger.ts +0 -282
  360. package/src/models/OverrideManager.ts +0 -79
  361. package/src/models/Queue.ts +0 -66
  362. package/src/models/ResourceInitializer.ts +0 -165
  363. package/src/models/Semaphore.ts +0 -208
  364. package/src/models/Store.ts +0 -193
  365. package/src/models/StoreConstants.ts +0 -18
  366. package/src/models/StoreRegistry.ts +0 -253
  367. package/src/models/StoreTypes.ts +0 -47
  368. package/src/models/StoreValidator.ts +0 -43
  369. package/src/models/TaskRunner.ts +0 -203
  370. package/src/models/index.ts +0 -8
  371. package/src/run.ts +0 -116
  372. package/src/testing.ts +0 -66
  373. package/src/tools/findCircularDependencies.ts +0 -69
  374. package/src/tools/getCallerFile.ts +0 -96
  375. /package/dist/{tools → models/utils}/findCircularDependencies.d.ts +0 -0
@@ -0,0 +1,40 @@
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 type ResourceStoreElementType<C = any, V extends Promise<any> = any, D extends DependencyMapType = {}, TContext = any> = {
11
+ resource: IResource<C, V, D>;
12
+ computedDependencies?: ResourceDependencyValuesType<D>;
13
+ config: C;
14
+ value: V;
15
+ context: TContext;
16
+ isInitialized?: boolean;
17
+ };
18
+ export type TaskStoreElementType<Input = any, Output extends Promise<any> = any, D extends DependencyMapType = any> = {
19
+ task: ITask<Input, Output, D>;
20
+ computedDependencies: DependencyValuesType<D>;
21
+ isInitialized: boolean;
22
+ interceptors?: Array<TaskLocalInterceptor<any, any>>;
23
+ };
24
+ export type HookStoreElementType<D extends DependencyMapType = any, TOn extends "*" | IEventDefinition = any> = {
25
+ hook: IHook<D, TOn>;
26
+ computedDependencies: DependencyValuesType<D>;
27
+ };
28
+ export type TaskMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
29
+ middleware: ITaskMiddleware<any, TDeps>;
30
+ computedDependencies: DependencyValuesType<TDeps>;
31
+ isInitialized: boolean;
32
+ };
33
+ export type ResourceMiddlewareStoreElementType<TDeps extends DependencyMapType = any> = {
34
+ middleware: IResourceMiddleware<any, TDeps>;
35
+ computedDependencies: DependencyValuesType<TDeps>;
36
+ isInitialized: boolean;
37
+ };
38
+ export type EventStoreElementType = {
39
+ event: IEvent<any>;
40
+ };
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=metadata.js.map
3
+ //# sourceMappingURL=storeTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storeTypes.js","sourceRoot":"","sources":["../../src/types/storeTypes.ts"],"names":[],"mappings":""}
@@ -9,10 +9,17 @@ export declare const symbolResource: unique symbol;
9
9
  export declare const symbolResourceWithConfig: unique symbol;
10
10
  export declare const symbolEvent: unique symbol;
11
11
  export declare const symbolMiddleware: unique symbol;
12
+ /** New brands for separated middleware kinds */
13
+ export declare const symbolTaskMiddleware: unique symbol;
14
+ export declare const symbolResourceMiddleware: unique symbol;
12
15
  export declare const symbolMiddlewareConfigured: unique symbol;
13
- export declare const symbolMiddlewareGlobal: unique symbol;
14
- export declare const symbolMiddlewareEverywhereTasks: unique symbol;
15
- export declare const symbolMiddlewareEverywhereResources: unique symbol;
16
+ /** @internal Marks hook definitions (event listeners without middleware) */
17
+ export declare const symbolHook: unique symbol;
18
+ /** @internal Marks a tag definition */
19
+ export declare const symbolTag: unique symbol;
20
+ export declare const symbolTagConfigured: unique symbol;
21
+ /** @internal Marks an optional dependency wrapper */
22
+ export declare const symbolOptionalDependency: unique symbol;
16
23
  /** @internal Path to aid anonymous id generation and error messages */
17
24
  export declare const symbolFilePath: unique symbol;
18
25
  /** @internal Marks disposable instances */
@@ -21,21 +28,3 @@ export declare const symbolDispose: unique symbol;
21
28
  export declare const symbolStore: unique symbol;
22
29
  /** @internal Brand used by index() resources */
23
30
  export declare const symbolIndexResource: unique symbol;
24
- /**
25
- * Convenience bag of internal symbols. Intended for framework internals;
26
- * consumers should not rely on this shape.
27
- * @internal
28
- */
29
- export declare const symbols: {
30
- task: symbol;
31
- resource: symbol;
32
- resourceWithConfig: symbol;
33
- indexResource: symbol;
34
- event: symbol;
35
- middleware: symbol;
36
- middlewareEverywhereTasks: symbol;
37
- middlewareEverywhereResources: symbol;
38
- filePath: symbol;
39
- dispose: symbol;
40
- store: symbol;
41
- };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.symbols = exports.symbolIndexResource = exports.symbolStore = exports.symbolDispose = exports.symbolFilePath = exports.symbolMiddlewareEverywhereResources = exports.symbolMiddlewareEverywhereTasks = exports.symbolMiddlewareGlobal = exports.symbolMiddlewareConfigured = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
3
+ exports.symbolIndexResource = exports.symbolStore = exports.symbolDispose = exports.symbolFilePath = exports.symbolOptionalDependency = exports.symbolTagConfigured = exports.symbolTag = exports.symbolHook = exports.symbolMiddlewareConfigured = exports.symbolResourceMiddleware = exports.symbolTaskMiddleware = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
4
4
  /**
5
5
  * Internal brand symbols used to tag created objects at runtime and help with
6
6
  * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`
@@ -12,10 +12,23 @@ exports.symbolResource = Symbol("runner.resource");
12
12
  exports.symbolResourceWithConfig = Symbol("runner.resourceWithConfig");
13
13
  exports.symbolEvent = Symbol("runner.event");
14
14
  exports.symbolMiddleware = Symbol("runner.middleware");
15
+ /** New brands for separated middleware kinds */
16
+ exports.symbolTaskMiddleware = Symbol("runner.taskMiddleware");
17
+ exports.symbolResourceMiddleware = Symbol("runner.resourceMiddleware");
15
18
  exports.symbolMiddlewareConfigured = Symbol("runner.middlewareConfigured");
16
- exports.symbolMiddlewareGlobal = Symbol("runner.middlewareGlobal");
17
- exports.symbolMiddlewareEverywhereTasks = Symbol("runner.middlewareGlobalTasks");
18
- exports.symbolMiddlewareEverywhereResources = Symbol("runner.middlewareGlobalResources");
19
+ /** @internal Marks hook definitions (event listeners without middleware) */
20
+ exports.symbolHook = Symbol("runner.hook");
21
+ // export const symbolMiddlewareEverywhereTasks: unique symbol = Symbol(
22
+ // "runner.middlewareGlobalTasks",
23
+ // );
24
+ // export const symbolMiddlewareEverywhereResources: unique symbol = Symbol(
25
+ // "runner.middlewareGlobalResources",
26
+ // );
27
+ /** @internal Marks a tag definition */
28
+ exports.symbolTag = Symbol("runner.tag");
29
+ exports.symbolTagConfigured = Symbol("runner.tagConfigured");
30
+ /** @internal Marks an optional dependency wrapper */
31
+ exports.symbolOptionalDependency = Symbol("runner.optionalDependency");
19
32
  /** @internal Path to aid anonymous id generation and error messages */
20
33
  exports.symbolFilePath = Symbol("runner.filePath");
21
34
  /** @internal Marks disposable instances */
@@ -24,22 +37,4 @@ exports.symbolDispose = Symbol("runner.dispose");
24
37
  exports.symbolStore = Symbol("runner.store");
25
38
  /** @internal Brand used by index() resources */
26
39
  exports.symbolIndexResource = Symbol("runner.indexResource");
27
- /**
28
- * Convenience bag of internal symbols. Intended for framework internals;
29
- * consumers should not rely on this shape.
30
- * @internal
31
- */
32
- exports.symbols = {
33
- task: exports.symbolTask,
34
- resource: exports.symbolResource,
35
- resourceWithConfig: exports.symbolResourceWithConfig,
36
- indexResource: exports.symbolIndexResource,
37
- event: exports.symbolEvent,
38
- middleware: exports.symbolMiddleware,
39
- middlewareEverywhereTasks: exports.symbolMiddlewareEverywhereTasks,
40
- middlewareEverywhereResources: exports.symbolMiddlewareEverywhereResources,
41
- filePath: exports.symbolFilePath,
42
- dispose: exports.symbolDispose,
43
- store: exports.symbolStore,
44
- };
45
40
  //# sourceMappingURL=symbols.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/types/symbols.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACU,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AACpD,QAAA,gBAAgB,GAAkB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC9D,QAAA,0BAA0B,GAAkB,MAAM,CAC7D,6BAA6B,CAC9B,CAAC;AACW,QAAA,sBAAsB,GAAkB,MAAM,CACzD,yBAAyB,CAC1B,CAAC;AACW,QAAA,+BAA+B,GAAkB,MAAM,CAClE,8BAA8B,CAC/B,CAAC;AACW,QAAA,mCAAmC,GAAkB,MAAM,CACtE,kCAAkC,CACnC,CAAC;AAEF,uEAAuE;AAC1D,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACvE,2CAA2C;AAC9B,QAAA,aAAa,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrE,uCAAuC;AAC1B,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAEjE,gDAAgD;AACnC,QAAA,mBAAmB,GAAkB,MAAM,CACtD,sBAAsB,CACvB,CAAC;AAEF;;;;GAIG;AACU,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,kBAAU;IAChB,QAAQ,EAAE,sBAAc;IACxB,kBAAkB,EAAE,gCAAwB;IAC5C,aAAa,EAAE,2BAAmB;IAClC,KAAK,EAAE,mBAAW;IAClB,UAAU,EAAE,wBAAgB;IAC5B,yBAAyB,EAAE,uCAA+B;IAC1D,6BAA6B,EAAE,2CAAmC;IAClE,QAAQ,EAAE,sBAAc;IACxB,OAAO,EAAE,qBAAa;IACtB,KAAK,EAAE,mBAAW;CACnB,CAAC"}
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/types/symbols.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACU,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AACpD,QAAA,gBAAgB,GAAkB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC3E,gDAAgD;AACnC,QAAA,oBAAoB,GAAkB,MAAM,CACvD,uBAAuB,CACxB,CAAC;AACW,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,0BAA0B,GAAkB,MAAM,CAC7D,6BAA6B,CAC9B,CAAC;AACF,4EAA4E;AAC/D,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAC/D,wEAAwE;AACxE,oCAAoC;AACpC,KAAK;AACL,4EAA4E;AAC5E,wCAAwC;AACxC,KAAK;AACL,uCAAuC;AAC1B,QAAA,SAAS,GAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;AAChD,QAAA,mBAAmB,GAAkB,MAAM,CACtD,sBAAsB,CACvB,CAAC;AAEF,qDAAqD;AACxC,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AAEF,uEAAuE;AAC1D,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACvE,2CAA2C;AAC9B,QAAA,aAAa,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrE,uCAAuC;AAC1B,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAEjE,gDAAgD;AACnC,QAAA,mBAAmB,GAAkB,MAAM,CACtD,sBAAsB,CACvB,CAAC"}
@@ -0,0 +1,46 @@
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
+ 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>;
46
+ export {};
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=resource.types.js.map
3
+ const utilities_1 = require("./utilities");
4
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/types/tag.ts"],"names":[],"mappings":";;AAEA,2CAMqB"}
@@ -1,68 +1,44 @@
1
- import type { ITaskMeta } from './metadata';
2
- import type { DependencyMapType, DependencyValuesType } from './dependencies';
3
- import type { IEventDefinition, IEvent, IEventEmission } from './event';
4
- import type { MiddlewareAttachments } from './middleware';
5
- export type BeforeRunEventPayload<TInput> = {
6
- input: TInput;
7
- };
8
- export type AfterRunEventPayload<TInput, TOutput> = {
9
- input: TInput;
10
- output: TOutput extends Promise<infer U> ? U : TOutput;
11
- setOutput(newOutput: TOutput extends Promise<infer U> ? U : TOutput): void;
12
- };
13
- export type OnErrorEventPayload = {
14
- error: any;
15
- /**
16
- * This function can be called to suppress the error from being thrown.
17
- */
18
- suppress(): void;
19
- };
20
- type ExtractEventParams<T> = T extends IEventDefinition<infer P> ? P : never;
21
- export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> {
22
- /**
23
- * Stable identifier. If omitted, an anonymous id is generated from file path
24
- * (see README: Anonymous IDs).
25
- */
26
- id?: string | symbol;
1
+ import { DependencyMapType, DependencyValuesType, IOptionalDependency, IValidationSchema, TaskMiddlewareAttachmentType } from "../defs";
2
+ import { TagType } from "./tag";
3
+ import { ITaskMeta } from "./meta";
4
+ import { symbolFilePath, symbolTask } from "./symbols";
5
+ import { EnsureInputSatisfiesContracts, EnsureOutputSatisfiesContracts, HasInputContracts, HasOutputContracts } from "./contracts";
6
+ 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[]> {
7
+ id: string;
27
8
  /**
28
9
  * Access other tasks/resources/events. Can be an object or a function when
29
10
  * you need late or config‑dependent resolution.
30
11
  */
31
12
  dependencies?: TDependencies | (() => TDependencies);
32
13
  /** Middleware applied around task execution. */
33
- middleware?: MiddlewareAttachments[];
14
+ middleware?: TMiddleware;
15
+ /** Optional metadata used for docs, filtering and tooling. */
16
+ meta?: TMeta;
34
17
  /**
35
- * Listen to events in a simple way
18
+ * Optional validation schema for runtime input validation.
19
+ * When provided, task input will be validated before execution.
36
20
  */
37
- on?: TOn;
21
+ inputSchema?: IValidationSchema<TInput>;
38
22
  /**
39
- * This makes sense only when `on` is specified to provide the order of the execution.
40
- * The event with the lowest order will be executed first.
23
+ * Optional validation schema for the task result.
24
+ * When provided, the result will be validated immediately after the task's
25
+ * `run` resolves, without considering middleware.
41
26
  */
42
- listenerOrder?: number;
43
- /** Optional metadata used for docs, filtering and tooling. */
44
- meta?: ITaskMeta;
27
+ resultSchema?: IValidationSchema<TOutput extends Promise<infer U> ? U : never>;
28
+ 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;
45
29
  /**
46
- * The task body. If `on` is set, the input is an `IEventEmission`. Otherwise,
47
- * it's the declared input type.
30
+ * Tags applied to the task that might define its behvaiour or impact the systems.
48
31
  */
49
- run: (input: TOn extends undefined ? TInput : IEventEmission<TOn extends "*" ? any : ExtractEventParams<TOn>>, dependencies: DependencyValuesType<TDependencies>) => TOutput;
32
+ tags?: TTags;
50
33
  }
51
- /**
52
- * This is the response after the definition has been prepared. TODO: better naming?
53
- */
54
- export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> extends ITaskDefinition<TInput, TOutput, TDependencies, TOn> {
55
- id: string | symbol;
34
+ 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> {
35
+ [symbolFilePath]: string;
36
+ [symbolTask]: true;
37
+ id: string;
56
38
  dependencies: TDependencies | (() => TDependencies);
57
39
  computedDependencies?: DependencyValuesType<TDependencies>;
58
- middleware: MiddlewareAttachments[];
59
- /**
60
- * These events are automatically populated after the task has been defined.
61
- */
62
- events: {
63
- beforeRun: IEvent<BeforeRunEventPayload<TInput>>;
64
- afterRun: IEvent<AfterRunEventPayload<TInput, TOutput>>;
65
- onError: IEvent<OnErrorEventPayload>;
66
- };
40
+ middleware: TMiddleware;
41
+ /** Return an optional dependency wrapper for this task. */
42
+ optional: () => IOptionalDependency<ITask<TInput, TOutput, TDependencies, TMeta, TTags, TMiddleware>>;
43
+ tags: TTags;
67
44
  }
68
- export {};
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const symbols_1 = require("./symbols");
3
4
  //# sourceMappingURL=task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":";;AAUA,uCAAuD"}
@@ -0,0 +1,48 @@
1
+ import { DependencyMapType, DependencyValuesType, IValidationSchema, ITask } from "../defs";
2
+ import { TagType } from "./tag";
3
+ import { IMiddlewareMeta } from "./meta";
4
+ import { symbolFilePath, symbolMiddlewareConfigured, symbolTaskMiddleware } from "./symbols";
5
+ import { IContractable } from "./contracts";
6
+ export interface ITaskMiddlewareDefinition<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> {
7
+ id: string;
8
+ /** Static or lazy dependency map. */
9
+ dependencies?: TDependencies | ((config: TConfig) => TDependencies);
10
+ /**
11
+ * Optional validation schema for runtime config validation.
12
+ * When provided, middleware config will be validated when .with() is called.
13
+ */
14
+ configSchema?: IValidationSchema<TConfig>;
15
+ /**
16
+ * The middleware body, called with task execution input.
17
+ */
18
+ run: (input: ITaskMiddlewareExecutionInput<TEnforceInputContract extends void ? any : TEnforceInputContract, TEnforceOutputContract extends void ? any : TEnforceOutputContract>, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
19
+ meta?: IMiddlewareMeta;
20
+ tags?: TagType[];
21
+ everywhere?: boolean | ((task: ITask<any, any, any, any>) => boolean);
22
+ }
23
+ export interface ITaskMiddleware<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddlewareDefinition<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>, IContractable<TConfig, TEnforceInputContract, TEnforceOutputContract> {
24
+ [symbolTaskMiddleware]: true;
25
+ [symbolFilePath]: string;
26
+ id: string;
27
+ dependencies: TDependencies | (() => 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) => ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>;
32
+ tags: TagType[];
33
+ }
34
+ export interface ITaskMiddlewareConfigured<TConfig = any, TEnforceInputContract = void, TEnforceOutputContract = void, TDependencies extends DependencyMapType = any> extends ITaskMiddleware<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies> {
35
+ [symbolMiddlewareConfigured]: true;
36
+ config: TConfig;
37
+ }
38
+ export interface ITaskMiddlewareExecutionInput<TTaskInput = any, TTaskOutput = any> {
39
+ /** Task hook */
40
+ task: {
41
+ definition: ITask<TTaskInput, any, any, any>;
42
+ input: TTaskInput;
43
+ };
44
+ next: (taskInput?: TTaskInput) => Promise<TTaskOutput>;
45
+ }
46
+ export type TaskMiddlewareAttachmentType = ITaskMiddleware<void, any, any, any> | ITaskMiddleware<{
47
+ [K in any]?: any;
48
+ }, any, any, any> | ITaskMiddlewareConfigured<any, any, any, any>;
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const symbols_1 = require("./symbols");
4
- //# sourceMappingURL=event.types.js.map
4
+ //# sourceMappingURL=taskMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskMiddleware.js","sourceRoot":"","sources":["../../src/types/taskMiddleware.ts"],"names":[],"mappings":";;AAQA,uCAImB"}
@@ -1,7 +1,106 @@
1
- export type Optional<T> = {
2
- [K in keyof T]?: T[K];
1
+ import { IResource, IResourceWithConfig } from "./resource";
2
+ import { ITask } from "./task";
3
+ import { ITaskMiddleware } from "./taskMiddleware";
4
+ import { IResourceMiddleware } from "./resourceMiddleware";
5
+ import { IHook } from "./hook";
6
+ import { IEvent, IEventDefinition } from "./event";
7
+ import { ITag } from "./tag";
8
+ import { symbolOptionalDependency } from "./symbols";
9
+ export * from "./symbols";
10
+ /**
11
+ * Generic validation schema interface that can be implemented by any validation library.
12
+ * Compatible with Zod, Yup, Joi, and other validation libraries.
13
+ */
14
+ export interface IValidationSchema<T = any> {
15
+ /**
16
+ * Parse and validate the input data.
17
+ * Should throw an error if validation fails.
18
+ * Can transform the data if the schema supports transformations.
19
+ */
20
+ parse(input: unknown): T;
21
+ }
22
+ /**
23
+ * Core public TypeScript types for BlueLibs Runner.
24
+ *
25
+ * This file contains the strongly-typed contract for tasks, resources, events
26
+ * and middleware. It mirrors the mental model described in the README:
27
+ * - Tasks are functions
28
+ * - Resources are singletons (with init/dispose hooks)
29
+ * - Events are simple, strongly-typed emissions
30
+ * - Middleware can target both tasks and resources
31
+ *
32
+ * DX goals:
33
+ * - Crystal‑clear generics and helper types that infer dependency shapes
34
+ * - Friendly JSDoc you can hover in editors to understand usage instantly
35
+ * - Safe overrides and strong typing around config and register mechanics
36
+ */
37
+ export type RequiredKeys<T> = {
38
+ [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
39
+ }[keyof T];
40
+ /**
41
+ * The reason we accept null and undefined is because we want to be able to offer beautiful DX:
42
+ * overrides: [
43
+ * process.env.NODE_ENV === 'production' ? prodEmailer : null,
44
+ * ]
45
+ */
46
+ export 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;
47
+ /**
48
+ * A mapping of dependency keys to Runner definitions. Used in `dependencies`
49
+ * for tasks and resources. Values are later transformed into the actual
50
+ * callable/value shape by `DependencyValuesType`.
51
+ */
52
+ export 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>>>;
53
+ /** Wrapper type marking a dependency as optional at wiring time */
54
+ export interface IOptionalDependency<T> {
55
+ /** The wrapped dependency definition */
56
+ inner: T;
57
+ /** Brand symbol for optional dependency */
58
+ [symbolOptionalDependency]: true;
59
+ }
60
+ type ExtractTaskInput<T> = T extends ITask<infer I, any, infer D> ? I : never;
61
+ type ExtractTaskOutput<T> = T extends ITask<any, infer O, infer D> ? O : never;
62
+ type ExtractResourceValue<T> = T extends IResource<any, infer V, infer D> ? V extends Promise<infer U> ? U : V : never;
63
+ export type ExtractEventParams<T> = T extends IEvent<infer P> ? P : never;
64
+ /**
65
+ * Task dependencies transform into callable functions: call with the task input
66
+ * and you receive the task output.
67
+ */
68
+ type TaskDependency<I, O> = (...args: I extends null | void ? [] : [I]) => O;
69
+ /**
70
+ * Resource dependencies resolve to the resource's value directly.
71
+ */
72
+ type ResourceDependency<V> = V;
73
+ /**
74
+ * Event dependencies resolve to an emitter function. If the payload type is
75
+ * `void`, the function can be called with zero args (or an empty object).
76
+ */
77
+ type EventDependency<P> = P extends void ? (() => Promise<void>) & ((input?: Record<string, never>) => Promise<void>) : (input: P) => Promise<void>;
78
+ /**
79
+ * Transforms a dependency definition into the usable shape inside `run`/`init`:
80
+ * - Task -> callable function
81
+ * - Resource -> resolved value
82
+ * - Event -> emit function
83
+ */
84
+ export 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;
85
+ export type DependencyValuesType<T extends DependencyMapType> = {
86
+ [K in keyof T]: DependencyValueType<T[K]>;
3
87
  };
4
- export type IsVoid<T> = [T] extends [void] ? true : false;
5
- export type IsOptional<T> = undefined extends T ? true : false;
6
- export type OptionalOrVoidOrAnything<T> = IsVoid<T> extends true ? void : IsOptional<T> extends true ? Optional<T> : T;
7
- export type OnlyOptionalFields<T> = {} extends T ? true : false;
88
+ export type TaskLocalInterceptor<TInput, TOutput> = (next: (input: TInput) => TOutput, input: TInput) => TOutput;
89
+ export type TaskDependencyWithIntercept<TInput, TOutput> = TaskDependency<TInput, TOutput> & {
90
+ intercept: (middleware: TaskLocalInterceptor<TInput, TOutput>) => void;
91
+ };
92
+ /** Resource-context dependency typing where tasks expose intercept() */
93
+ export 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;
94
+ export type ResourceDependencyValuesType<T extends DependencyMapType> = {
95
+ [K in keyof T]: ResourceDependencyValueType<T[K]>;
96
+ };
97
+ /**
98
+ * Anything you can put inside a resource's `register: []`.
99
+ * - Resources (with or without `.with()`)
100
+ * - Tasks
101
+ * - Middleware
102
+ * - Events
103
+ */
104
+ export type RegisterableItems<T = any> = IResourceWithConfig<any, any, any, any, any, any, any> | IResource<void, any, any, any, any, any, any> | IResource<{
105
+ [K in any]?: any;
106
+ }, 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>;
@@ -1,5 +1,19 @@
1
1
  "use strict";
2
- // Layer 1: Foundation - Utility Types
3
- // No dependencies
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
4
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ const symbols_1 = require("./symbols");
18
+ __exportStar(require("./symbols"), exports);
5
19
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/types/utilities.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,kBAAkB"}
1
+ {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/types/utilities.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAOA,uCAAqD;AAErD,4CAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bluelibs/runner",
3
- "version": "3.4.2",
3
+ "version": "4.0.1",
4
4
  "description": "BlueLibs Runner",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -8,7 +8,8 @@
8
8
  "url": "https://github.com/bluelibs/bluelibs"
9
9
  },
10
10
  "scripts": {
11
- "build": "tsc",
11
+ "build": "tsc --project tsconfig.build.json",
12
+ "clean": "rm -rf dist",
12
13
  "watch": "tsc -w",
13
14
  "test": "jest --verbose --runInBand",
14
15
  "test:dev": "jest --verbose --watch",
@@ -16,9 +17,9 @@
16
17
  "test:clean": "jest --clearCache",
17
18
  "testonly": "npm test",
18
19
  "test:ci": "jest --verbose --coverage --ci --maxWorkers=2 --reporters=default --reporters=jest-junit",
19
- "prepublishOnly": "npm run build",
20
+ "prepublishOnly": "npm run clean && npm run build",
20
21
  "typedoc": "typedoc --options typedoc.json",
21
- "benchmark": "jest --testMatch=\"**/__tests__/benchmark/benchmark.test.ts\" --testTimeout 10000"
22
+ "benchmark": "jest --config jest.bench.config.js --verbose"
22
23
  },
23
24
  "devDependencies": {
24
25
  "@types/benchmark": "^2.1.5",
@@ -41,12 +42,20 @@
41
42
  "ts-jest": "^29.0.0",
42
43
  "typedoc": "^0.26.7",
43
44
  "typedoc-material-theme": "^1.1.0",
44
- "typescript": "^5.6.2"
45
+ "typedoc-plugin-pages": "^1.1.0",
46
+ "typescript": "^5.6.2",
47
+ "zod": "^4.0.17"
45
48
  },
46
49
  "typings": "dist/index.d.ts",
47
50
  "typescript": {
48
51
  "definition": "dist/index.d.ts"
49
52
  },
53
+ "files": [
54
+ "dist",
55
+ "README.md",
56
+ "AI.md",
57
+ "LICENSE.md"
58
+ ],
50
59
  "license": "MIT",
51
60
  "dependencies": {
52
61
  "lru-cache": "^11.1.0"
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};