@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
@@ -1,125 +0,0 @@
1
- import { defineEvent } from "../define";
2
- import { ITask, IResource, IEvent } from "../defs";
3
- import { ILog } from "../models/Logger";
4
-
5
- export const globalEvents = {
6
- beforeInit: defineEvent({
7
- id: "globals.events.beforeInit",
8
- meta: {
9
- title: "Before Initialization",
10
- description:
11
- "Triggered before any resource or system-wide initialization occurs.",
12
- tags: ["system"],
13
- },
14
- }),
15
- afterInit: defineEvent({
16
- id: "globals.events.afterInit",
17
- meta: {
18
- title: "After Initialization",
19
- description:
20
- "Fired after the system or resource initialization is completed.",
21
- tags: ["system"],
22
- },
23
- }),
24
- log: defineEvent<ILog>({
25
- id: "globals.events.log",
26
- meta: {
27
- title: "Log Event",
28
- description: "Used to log events and messages across the system.",
29
- tags: ["system"],
30
- },
31
- }),
32
- tasks: {
33
- beforeRun: defineEvent<{
34
- task: ITask<any, any, any>;
35
- input: any;
36
- }>({
37
- id: "globals.events.tasks.beforeRun",
38
- meta: {
39
- title: "Before Task Execution",
40
- description:
41
- "Triggered before a task starts running, providing access to the input data.",
42
- tags: ["system"],
43
- },
44
- }),
45
- afterRun: defineEvent<{
46
- task: ITask<any, any, any>;
47
- input: any;
48
- output: any;
49
- setOutput: (newOutput: any) => void;
50
- }>({
51
- id: "globals.events.tasks.afterRun",
52
- meta: {
53
- title: "After Task Execution",
54
- description:
55
- "Fired after a task has completed, providing both the input and output data.",
56
- tags: ["system"],
57
- },
58
- }),
59
- onError: defineEvent<{
60
- error: any;
61
- suppress: () => void;
62
- task: ITask<any, any, any>;
63
- }>({
64
- id: "globals.events.tasks.onError",
65
- meta: {
66
- title: "Task Error",
67
- description:
68
- "Triggered when an error occurs during task execution. Allows error suppression.",
69
- tags: ["system"],
70
- },
71
- }),
72
- },
73
- resources: {
74
- beforeInit: defineEvent<{
75
- resource: IResource<any, any, any>;
76
- config: any;
77
- }>({
78
- id: "globals.events.resources.beforeInit",
79
- meta: {
80
- title: "Before Resource Initialization",
81
- description:
82
- "Fired before a resource is initialized, with access to the configuration.",
83
- tags: ["system"],
84
- },
85
- }),
86
- afterInit: defineEvent<{
87
- resource: IResource<any, any, any>;
88
- config: any;
89
- value: any;
90
- }>({
91
- id: "globals.events.resources.afterInit",
92
- meta: {
93
- title: "After Resource Initialization",
94
- description:
95
- "Fired after a resource has been initialized, providing the final value.",
96
- tags: ["system"],
97
- },
98
- }),
99
- onError: defineEvent<{
100
- error: Error;
101
- suppress: () => void;
102
- resource: IResource<any, any, any>;
103
- }>({
104
- id: "globals.events.resources.onError",
105
- meta: {
106
- title: "Resource Error",
107
- description:
108
- "Triggered when an error occurs during resource initialization. Allows error suppression.",
109
- tags: ["system"],
110
- },
111
- }),
112
- },
113
- };
114
-
115
- export const globalEventsArray = [
116
- globalEvents.log,
117
- globalEvents.beforeInit,
118
- globalEvents.afterInit,
119
- globalEvents.tasks.beforeRun,
120
- globalEvents.tasks.afterRun,
121
- globalEvents.tasks.onError,
122
- globalEvents.resources.beforeInit,
123
- globalEvents.resources.afterInit,
124
- globalEvents.resources.onError,
125
- ];
@@ -1,16 +0,0 @@
1
- import { Context, ContextError } from "../context";
2
- import { defineMiddleware } from "../define";
3
- import { cacheMiddleware } from "./middleware/cache.middleware";
4
- import { requireContextMiddleware } from "./middleware/requireContext.middleware";
5
- import { retryMiddleware } from "./middleware/retry.middleware";
6
- import { timeoutMiddleware } from "./middleware/timeout.middleware";
7
-
8
- /**
9
- * Global middlewares
10
- */
11
- export const globalMiddlewares = {
12
- requireContext: requireContextMiddleware,
13
- retry: retryMiddleware,
14
- cache: cacheMiddleware,
15
- timeout: timeoutMiddleware,
16
- };
@@ -1,53 +0,0 @@
1
- import { defineResource } from "../define";
2
- import { EventManager } from "../models/EventManager";
3
- import { Logger } from "../models/Logger";
4
- import { Store } from "../models/Store";
5
- import { TaskRunner } from "../models/TaskRunner";
6
- import { cacheResource } from "./middleware/cache.middleware";
7
- import { queueResource } from "./resources/queue.resource";
8
-
9
- const store = defineResource({
10
- id: "globals.resources.store",
11
- init: async (store: Store) => store,
12
- meta: {
13
- title: "Store",
14
- description:
15
- "A global store that can be used to store and retrieve tasks, resources, events and middleware",
16
- tags: ["internal"],
17
- },
18
- });
19
-
20
- export const globalResources = {
21
- store,
22
- eventManager: defineResource({
23
- id: "globals.resources.eventManager",
24
- init: async (em: EventManager) => em,
25
- meta: {
26
- title: "Event Manager",
27
- description:
28
- "Manages all events and event listeners. This is meant to be used internally for most use-cases.",
29
- tags: ["internal"],
30
- },
31
- }),
32
- taskRunner: defineResource({
33
- id: "globals.resources.taskRunner",
34
- init: async (runner: TaskRunner) => runner,
35
- meta: {
36
- title: "Task Runner",
37
- description:
38
- "Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.",
39
- tags: ["internal"],
40
- },
41
- }),
42
- logger: defineResource({
43
- id: "globals.resources.logger",
44
- init: async (logger: Logger) => logger,
45
- meta: {
46
- title: "Logger",
47
- description:
48
- "Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.",
49
- },
50
- }),
51
- cache: cacheResource,
52
- queue: queueResource,
53
- };
@@ -1,115 +0,0 @@
1
- import { defineMiddleware, defineResource, defineTask } from "../../define";
2
- import { LRUCache } from "lru-cache";
3
- import { IResource, ITask } from "../../defs";
4
-
5
- export interface ICacheInstance {
6
- set(key: string, value: any): void;
7
- get(key: string): any;
8
- clear(): void;
9
- }
10
-
11
- // Default cache factory task that can be overridden
12
- export const cacheFactoryTask = defineTask({
13
- id: "globals.tasks.cacheFactory",
14
- run: async (options: any) => {
15
- return new LRUCache(options) as ICacheInstance;
16
- },
17
- });
18
-
19
- type CacheResourceConfig = {
20
- defaultOptions?: any;
21
- /**
22
- * This specifies whether the cache handler is async or not (get, set, clear)
23
- * This is for speed purposes.
24
- */
25
- async?: boolean;
26
- };
27
-
28
- type CacheMiddlewareConfig = {
29
- keyBuilder?: (taskId: string, input: any) => string;
30
- } & any;
31
-
32
- export const cacheResource = defineResource({
33
- id: "globals.resources.cache",
34
- register: [cacheFactoryTask],
35
- dependencies: {
36
- cacheFactoryTask,
37
- },
38
- init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {
39
- return {
40
- map: new Map<string | symbol, ICacheInstance>(),
41
- cacheFactoryTask,
42
- async: config.async,
43
- defaultOptions: {
44
- ttl: 10 * 1000,
45
- max: 100, // Maximum number of items in cache
46
- ttlAutopurge: true, // Automatically purge expired items
47
- ...config.defaultOptions,
48
- },
49
- };
50
- },
51
- dispose: async (cache) => {
52
- for (const cacheInstance of cache.map.values()) {
53
- await cacheInstance.clear();
54
- }
55
- },
56
- });
57
-
58
- const defaultKeyBuilder = (taskId: string, input: any) =>
59
- `${taskId}-${JSON.stringify(input)}`;
60
-
61
- export const cacheMiddleware = defineMiddleware({
62
- id: "globals.middleware.cache",
63
- dependencies: { cache: cacheResource },
64
- async run({ task, resource, next }, deps, config: CacheMiddlewareConfig) {
65
- const { cache } = deps;
66
- config = {
67
- keyBuilder: defaultKeyBuilder,
68
- ttl: 10 * 1000,
69
- max: 100, // Maximum number of items in cache
70
- ttlAutopurge: true, // Automatically purge expired items
71
- ...config,
72
- };
73
-
74
- if (!task) {
75
- throw new Error("Cache middleware can only be used in tasks");
76
- }
77
-
78
- const taskId = task.definition.id;
79
- const isAsync = cache.async;
80
- let cacheHolderForTask = cache.map.get(taskId);
81
- if (!cacheHolderForTask) {
82
- // Extract only LRUCache options, excluding keyBuilder
83
- const { keyBuilder, ...lruOptions } = config;
84
- const cacheOptions = {
85
- ...cache.defaultOptions,
86
- ...lruOptions,
87
- };
88
-
89
- // Use the factory task to create the cache instance
90
- cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);
91
-
92
- cache.map.set(taskId, cacheHolderForTask);
93
- }
94
-
95
- const key = config.keyBuilder!(taskId, task.input);
96
-
97
- const cachedValue = isAsync
98
- ? await cacheHolderForTask.get(key)
99
- : cacheHolderForTask.get(key);
100
-
101
- if (cachedValue) {
102
- return cachedValue;
103
- }
104
-
105
- const result = await next(task.input);
106
-
107
- if (isAsync) {
108
- await cacheHolderForTask.set(key, result);
109
- } else {
110
- cacheHolderForTask.set(key, result);
111
- }
112
-
113
- return result;
114
- },
115
- });
@@ -1,36 +0,0 @@
1
- import { Context, ContextError } from "../../context";
2
- import { defineMiddleware } from "../../define";
3
-
4
- type RequireContextMiddlewareConfig = {
5
- context: Context<any>;
6
- };
7
-
8
- export const requireContextMiddleware = defineMiddleware({
9
- id: "globals.middleware.requireContext",
10
- async run(
11
- { task, resource, next },
12
- deps,
13
- config: RequireContextMiddlewareConfig
14
- ) {
15
- if (!config.context) {
16
- throw new Error(
17
- "Context not available. Did you forget to pass 'context' to the middleware?"
18
- );
19
- }
20
-
21
- const ctx = config.context.use();
22
- if (!ctx) {
23
- throw new ContextError(
24
- "Context not available. Did you forget to provide the context via ContextName.provide()?"
25
- );
26
- }
27
- if (task) {
28
- return next(task.input);
29
- }
30
- if (resource) {
31
- return next(resource.config);
32
- }
33
-
34
- return next();
35
- },
36
- });
@@ -1,56 +0,0 @@
1
- import { defineMiddleware } from "../../define";
2
-
3
- /**
4
- * Configuration options for the retry middleware
5
- */
6
- export interface RetryMiddlewareConfig {
7
- /**
8
- * Maximum number of retry attempts (default: 3)
9
- */
10
- retries?: number;
11
- /**
12
- * Callback to determine if retry should stop based on error
13
- * @default () => false (retry all errors)
14
- */
15
- stopRetryIf?: (error: Error) => boolean;
16
- /**
17
- * Custom delay strategy function
18
- * @default Exponential backoff starting at 100ms
19
- */
20
- delayStrategy?: (attempt: number, error: Error) => number;
21
- }
22
-
23
- export const retryMiddleware = defineMiddleware({
24
- id: "globals.middleware.retry",
25
- async run({ task, resource, next }, deps, config: RetryMiddlewareConfig) {
26
- const input = task ? task.input : resource?.config;
27
- let attempts = 0;
28
-
29
- // Set defaults for required parameters
30
- const maxRetries = config.retries ?? 3;
31
- const shouldStop = config.stopRetryIf ?? (() => false);
32
-
33
- while (true) {
34
- try {
35
- return await next(input);
36
- } catch (error) {
37
- const err = error as Error;
38
-
39
- if (shouldStop(err) || attempts >= maxRetries) {
40
- throw error;
41
- }
42
-
43
- // Calculate delay using custom strategy or default exponential backoff
44
- const delay = config.delayStrategy
45
- ? config.delayStrategy(attempts, err)
46
- : 100 * Math.pow(2, attempts);
47
-
48
- if (delay > 0) {
49
- await new Promise((resolve) => setTimeout(resolve, delay));
50
- }
51
-
52
- attempts++;
53
- }
54
- }
55
- },
56
- });
@@ -1,46 +0,0 @@
1
- import { defineMiddleware } from "../../define";
2
-
3
- export interface TimeoutMiddlewareConfig {
4
- /**
5
- * Maximum time in milliseconds before the wrapped operation is aborted
6
- * and a timeout error is thrown. Defaults to 5000ms.
7
- */
8
- ttl: number;
9
- }
10
-
11
- export const timeoutMiddleware = defineMiddleware({
12
- id: "globals.middleware.timeout",
13
- async run({ task, resource, next }, _deps, config: TimeoutMiddlewareConfig) {
14
- const input = task ? task.input : resource?.config;
15
-
16
- const ttl = Math.max(0, config.ttl);
17
- const message = `Operation timed out after ${ttl}ms`;
18
-
19
- // Fast-path: immediate timeout
20
- if (ttl === 0) {
21
- const error = new Error(message);
22
- (error as any).name = "TimeoutError";
23
- throw error;
24
- }
25
-
26
- const controller = new AbortController();
27
-
28
- // Create a timeout promise that rejects when aborted
29
- const timeoutPromise = new Promise((_, reject) => {
30
- const timeoutId = setTimeout(() => {
31
- controller.abort();
32
- const error = new Error(message);
33
- (error as any).name = "TimeoutError";
34
- reject(error);
35
- }, ttl);
36
-
37
- // Clean up timeout if abort signal fires for other reasons
38
- controller.signal.addEventListener("abort", () => {
39
- clearTimeout(timeoutId);
40
- });
41
- });
42
-
43
- // Race between the actual operation and the timeout
44
- return Promise.race([next(input), timeoutPromise]);
45
- },
46
- });
@@ -1,34 +0,0 @@
1
- import { defineResource } from "../../define";
2
- import { Queue } from "../../models/Queue";
3
-
4
- export const queueResource = defineResource({
5
- id: "globals.resources.queue",
6
- context: () => ({
7
- map: new Map<string | symbol, Queue>(),
8
- }),
9
- init: async (_, deps, context) => {
10
- const map = context.map;
11
-
12
- return {
13
- map,
14
- run: <T>(
15
- id: string,
16
- task: (signal: AbortSignal) => Promise<T>
17
- ): Promise<T> => {
18
- if (!map.has(id)) {
19
- map.set(id, new Queue());
20
- }
21
-
22
- return map.get(id)!.run(task);
23
- },
24
- };
25
- },
26
- dispose: async (value, _, deps, context) => {
27
- context.map.forEach((queue) => queue.dispose());
28
- },
29
- meta: {
30
- title: "Queue Map",
31
- description:
32
- "A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.",
33
- },
34
- });
package/src/index.ts DELETED
@@ -1,39 +0,0 @@
1
- import {
2
- defineTask,
3
- defineResource,
4
- defineEvent,
5
- defineMiddleware,
6
- defineIndex,
7
- defineTag,
8
- defineOverride,
9
- } from "./define";
10
- import { createContext } from "./context";
11
- import { globalEvents } from "./globals/globalEvents";
12
- import { globalResources } from "./globals/globalResources";
13
- import { globalMiddlewares } from "./globals/globalMiddleware";
14
- import { run } from "./run";
15
- import { createTestResource } from "./testing";
16
-
17
- const globals = {
18
- events: globalEvents,
19
- resources: globalResources,
20
- middlewares: globalMiddlewares,
21
- };
22
-
23
- export { globals };
24
- export {
25
- defineTask as task,
26
- defineResource as resource,
27
- defineEvent as event,
28
- defineMiddleware as middleware,
29
- defineIndex as index,
30
- defineTag as tag,
31
- defineOverride as override,
32
- run,
33
- createContext,
34
- createTestResource,
35
- };
36
-
37
- export * as definitions from "./defs";
38
- export { Semaphore, Store, EventManager, TaskRunner, Queue } from "./models";
39
- export * as Errors from "./errors";