@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,63 +0,0 @@
1
- import type { symbolMiddleware, symbolMiddlewareConfigured, symbolMiddlewareEverywhereTasks, symbolMiddlewareEverywhereResources } from './symbols';
2
- import type { IMiddlewareMeta } from './metadata';
3
- import type { DependencyMapType, DependencyValuesType } from './dependencies';
4
- export type MiddlewareEverywhereOptions = {
5
- /**
6
- * Enable this for tasks. Default is true.
7
- */
8
- tasks?: boolean;
9
- /**
10
- * Enable this for resources. Default is true.
11
- */
12
- resources?: boolean;
13
- };
14
- export interface IMiddlewareDefinition<TConfig = any, TDependencies extends DependencyMapType = any> {
15
- /** Stable identifier. Omit to get an anonymous id. */
16
- id?: string | symbol;
17
- /** Static or lazy dependency map. */
18
- dependencies?: TDependencies | ((config: TConfig) => TDependencies);
19
- /**
20
- * The middleware body, called with task/resource execution input.
21
- */
22
- run: (input: IMiddlewareExecutionInput, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
23
- meta?: IMiddlewareMeta;
24
- }
25
- export interface IMiddleware<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddlewareDefinition<TConfig, TDependencies> {
26
- [symbolMiddleware]: true;
27
- [symbolMiddlewareConfigured]?: boolean;
28
- [symbolMiddlewareEverywhereTasks]?: boolean;
29
- [symbolMiddlewareEverywhereResources]?: boolean;
30
- id: string | symbol;
31
- dependencies: TDependencies | (() => TDependencies);
32
- /**
33
- * Attach this middleware globally. Use options to scope to tasks/resources.
34
- */
35
- everywhere(config?: MiddlewareEverywhereOptions): IMiddleware<TConfig, TDependencies>;
36
- /** Current configuration object (empty by default). */
37
- config: TConfig;
38
- /** Configure the middleware and return a marked, configured instance. */
39
- with: (config: TConfig) => IMiddlewareConfigured<TConfig, TDependencies>;
40
- }
41
- export interface IMiddlewareConfigured<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddleware<TConfig, TDependencies> {
42
- [symbolMiddlewareConfigured]: true;
43
- }
44
- export interface IMiddlewareDefinitionConfigured<C extends Record<string, any> = {}> {
45
- middleware: IMiddleware<C>;
46
- config?: C;
47
- }
48
- export interface IMiddlewareExecutionInput<TTaskInput = any, TResourceConfig = any> {
49
- /** Task hook: present when wrapping a task run. */
50
- task?: {
51
- definition: any;
52
- input: TTaskInput;
53
- };
54
- /** Resource hook: present when wrapping init/dispose. */
55
- resource?: {
56
- definition: any;
57
- config: TResourceConfig;
58
- };
59
- next: (taskInputOrResourceConfig?: TTaskInput | TResourceConfig) => Promise<any>;
60
- }
61
- export type MiddlewareAttachments = IMiddleware<void> | IMiddleware<{
62
- [K in any]?: any;
63
- }> | IMiddlewareConfigured<any>;
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/types/middleware.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- import type { IsVoid, OnlyOptionalFields } from './utilities';
2
- import type { IResourceWithConfig } from './resources';
3
- import type { IResource } from './resources';
4
- import type { ITaskDefinition } from './tasks';
5
- import type { IMiddlewareDefinition } from './middleware';
6
- import type { IEventDefinition } from './events';
7
- export type RegisterableItems<T = any> = IResourceWithConfig<any> | IResource<void, any, any, any> | IResource<{
8
- [K in any]?: any;
9
- }, any, any, any> | ITaskDefinition<any, any, any, any> | IMiddlewareDefinition<any> | IEventDefinition<any>;
10
- export type ValidateRegisterable<T> = T extends IResource<infer Config, any, any, any> ? IsVoid<Config> extends true ? T : OnlyOptionalFields<Config> extends true ? T : never : T;
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // Layer 4: Integration Types - Registerable Items
3
- // Imports all component types to define what can be registered
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- //# sourceMappingURL=registerable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerable.js","sourceRoot":"","sources":["../../src/types/registerable.ts"],"names":[],"mappings":";AAAA,kDAAkD;AAClD,+DAA+D"}
@@ -1,44 +0,0 @@
1
- import type { IResourceMeta } from './meta';
2
- import type { DependencyMapType, DependencyValuesType } from './dependency-core';
3
- import type { IEventDefinition, BeforeInitEventPayload, AfterInitEventPayload, OnErrorEventPayload } from './events';
4
- import type { IMiddleware } from './middleware';
5
- import type { ITask } from './tasks';
6
- import type { MiddlewareAttachments } from './tasks';
7
- export interface IResourceDefinition<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, TContext = any, THooks = any, TRegisterableItems = any> {
8
- id: string;
9
- dependencies?: TDependencies | ((config: TConfig) => TDependencies);
10
- register?: Array<any> | ((config: TConfig) => Array<any>);
11
- init?: (this: any, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<TValue>;
12
- /**
13
- * Clean-up function for the resource. This is called when the resource is no longer needed.
14
- *
15
- * @param value The value of the resource (undefined if no init method)
16
- * @param config The configuration it received
17
- * @param dependencies The dependencies it needed
18
- * @returns Promise<void>
19
- */
20
- dispose?: (this: any, value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<void>;
21
- meta?: IResourceMeta;
22
- overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
23
- middleware?: MiddlewareAttachments[];
24
- context?: () => TContext;
25
- }
26
- export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any, TContext = any> extends IResourceDefinition<TConfig, TValue, TDependencies, TContext> {
27
- with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies>;
28
- register: Array<any> | ((config: TConfig) => Array<any>);
29
- /**
30
- * These events are automatically populated after the task has been defined.
31
- */
32
- events: {
33
- beforeInit: IEventDefinition<BeforeInitEventPayload<TConfig>>;
34
- afterInit: IEventDefinition<AfterInitEventPayload<TConfig, TValue>>;
35
- onError: IEventDefinition<OnErrorEventPayload>;
36
- };
37
- overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
38
- middleware: MiddlewareAttachments[];
39
- }
40
- export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies extends DependencyMapType = any> {
41
- id: string;
42
- resource: IResource<TConfig, TValue, TDependencies>;
43
- config: TConfig;
44
- }
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // Layer 3: Component Definitions - Resources
3
- // Imports from Layer 1, 2 & other Layer 3 files
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- //# sourceMappingURL=resources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/types/resources.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,gDAAgD"}
@@ -1,41 +0,0 @@
1
- import type { ITaskMeta } from './meta';
2
- import type { DependencyMapType, DependencyValuesType } from './dependency-core';
3
- import type { IEventDefinition, IEvent, BeforeRunEventPayload, AfterRunEventPayload, OnErrorEventPayload } from './events';
4
- import type { IMiddleware, IMiddlewareConfigured } from './middleware';
5
- type ExtractEventParams<T> = T extends IEventDefinition<infer P> ? P : never;
6
- export type MiddlewareAttachments = IMiddleware<void> | IMiddleware<{
7
- [K in any]?: any;
8
- }> | IMiddlewareConfigured<any>;
9
- export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> {
10
- id: string;
11
- dependencies?: TDependencies | (() => TDependencies);
12
- middleware?: MiddlewareAttachments[];
13
- /**
14
- * Listen to events in a simple way
15
- */
16
- on?: TOn;
17
- /**
18
- * This makes sense only when `on` is specified to provide the order of the execution.
19
- * The event with the lowest order will be executed first.
20
- */
21
- listenerOrder?: number;
22
- meta?: ITaskMeta;
23
- run: (input: TOn extends undefined ? TInput : IEvent<TOn extends "*" ? any : ExtractEventParams<TOn>>, dependencies: DependencyValuesType<TDependencies>) => TOutput;
24
- }
25
- /**
26
- * Task Interface (replaces forward declaration) - This is the response after the definition has been prepared. TODO: better naming?
27
- */
28
- 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> {
29
- dependencies: TDependencies | (() => TDependencies);
30
- computedDependencies?: DependencyValuesType<TDependencies>;
31
- middleware: MiddlewareAttachments[];
32
- /**
33
- * These events are automatically populated after the task has been defined.
34
- */
35
- events: {
36
- beforeRun: IEventDefinition<BeforeRunEventPayload<TInput>>;
37
- afterRun: IEventDefinition<AfterRunEventPayload<TInput, TOutput>>;
38
- onError: IEventDefinition<OnErrorEventPayload>;
39
- };
40
- }
41
- export {};
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // Layer 3: Component Definitions - Tasks
3
- // Imports from Layer 1, 2 & other Layer 3 files
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- //# sourceMappingURL=tasks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/types/tasks.ts"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,gDAAgD"}
@@ -1,148 +0,0 @@
1
- import * as Benchmark from "benchmark";
2
- import {
3
- defineTask,
4
- defineResource,
5
- defineEvent,
6
- defineMiddleware,
7
- } from "../../define";
8
- import { run } from "../../run";
9
-
10
- describe.skip("Benchmarks", () => {
11
- let suite: Benchmark.Suite;
12
-
13
- beforeEach(() => {
14
- suite = new Benchmark.Suite();
15
- });
16
-
17
- it("should benchmark task execution", (done) => {
18
- const testTask = defineTask({
19
- id: "test.task",
20
- run: async () => "Hello, World!",
21
- });
22
-
23
- const app = defineResource({
24
- id: "app",
25
- dependencies: { testTask },
26
- register: [testTask],
27
- async init(_, { testTask }) {
28
- await testTask();
29
- },
30
- });
31
-
32
- suite.add("Task Execution", {
33
- defer: true,
34
- fn: (deferred: { resolve: () => void }) => {
35
- run(app).then(() => deferred.resolve());
36
- },
37
- });
38
-
39
- suite.on("complete", function () {
40
- console.log("Task Execution:", this[0].hz.toFixed(2), "ops/sec");
41
- done();
42
- });
43
-
44
- suite.run({ async: true });
45
- });
46
-
47
- it("should benchmark resource initialization", (done) => {
48
- const testResource = defineResource({
49
- id: "test.resource",
50
- init: async () => "Resource Value",
51
- });
52
-
53
- const app = defineResource({
54
- id: "app",
55
- register: [testResource],
56
- dependencies: { testResource },
57
- async init(_, { testResource }) {
58
- expect(testResource).toBe("Resource Value");
59
- },
60
- });
61
-
62
- suite.add("Resource Initialization", {
63
- defer: true,
64
- fn: (deferred: { resolve: () => void }) => {
65
- run(app).then(() => deferred.resolve());
66
- },
67
- });
68
-
69
- suite.on("complete", function () {
70
- console.log("Resource Initialization:", this[0].hz.toFixed(2), "ops/sec");
71
- done();
72
- });
73
-
74
- suite.run({ async: true });
75
- });
76
-
77
- it("should benchmark event emission", (done) => {
78
- const testEvent = defineEvent<{ message: string }>({ id: "test.event" });
79
- const eventHandler = jest.fn();
80
-
81
- const handlerTask = defineTask({
82
- id: "handler.task",
83
- on: testEvent,
84
- run: async ({ data }) => {
85
- eventHandler(data.message);
86
- },
87
- });
88
-
89
- const app = defineResource({
90
- id: "app",
91
- register: [testEvent, handlerTask],
92
- dependencies: { testEvent },
93
- async init(_, { testEvent }) {
94
- await testEvent({ message: "Event emitted" });
95
- },
96
- });
97
-
98
- suite.add("Event Emission", {
99
- defer: true,
100
- fn: (deferred: { resolve: () => void }) => {
101
- run(app).then(() => deferred.resolve());
102
- },
103
- });
104
-
105
- suite.on("complete", function () {
106
- console.log("Event Emission:", this[0].hz.toFixed(2), "ops/sec");
107
- done();
108
- });
109
-
110
- suite.run({ async: true });
111
- });
112
-
113
- it("should benchmark dependency resolution", (done) => {
114
- const dep1 = defineResource({
115
- id: "dep1",
116
- init: async () => "Dep1 Value",
117
- });
118
-
119
- const dep2 = defineResource({
120
- id: "dep2",
121
- dependencies: { dep1 },
122
- init: async (_, { dep1 }) => `Dep2 Value: ${dep1}`,
123
- });
124
-
125
- const app = defineResource({
126
- id: "app",
127
- register: [dep1, dep2],
128
- dependencies: { dep2 },
129
- async init(_, { dep2 }) {
130
- expect(dep2).toBe("Dep2 Value: Dep1 Value");
131
- },
132
- });
133
-
134
- suite.add("Dependency Resolution", {
135
- defer: true,
136
- fn: (deferred: { resolve: () => void }) => {
137
- run(app).then(() => deferred.resolve());
138
- },
139
- });
140
-
141
- suite.on("complete", function () {
142
- console.log("Dependency Resolution:", this[0].hz.toFixed(2), "ops/sec");
143
- done();
144
- });
145
-
146
- suite.run({ async: true });
147
- });
148
- });
@@ -1,132 +0,0 @@
1
- import { defineTask, defineResource, defineMiddleware } from "../../define";
2
- import { run } from "../../run";
3
-
4
- // Benchmarks are environment-sensitive; keep skipped by default.
5
- describe("Task benchmarks - sync vs async", () => {
6
- const iterations = 500;
7
-
8
- it("compares sync vs async task execution without middleware", async () => {
9
- const syncTask = defineTask<number, any>({
10
- id: "bench.syncTask",
11
- // Intentionally synchronous
12
- run: ((n: number) => {
13
- let acc = 0;
14
- for (let i = 0; i < 200; i++) acc += (n + i) % 7;
15
- return acc;
16
- }) as any,
17
- } as any);
18
-
19
- const asyncTask = defineTask<number, Promise<number>>({
20
- id: "bench.asyncTask",
21
- run: async (n: number) => {
22
- let acc = 0;
23
- for (let i = 0; i < 200; i++) acc += (n + i) % 7;
24
- return acc;
25
- },
26
- });
27
-
28
- const app = defineResource({
29
- id: "bench.app",
30
- register: [syncTask, asyncTask],
31
- dependencies: { syncTask, asyncTask },
32
- async init(_, { syncTask, asyncTask }) {
33
- // Warm-up
34
- await asyncTask(0);
35
- await syncTask(0 as any);
36
-
37
- const syncStart = performance.now();
38
- for (let i = 0; i < iterations; i++) {
39
- // Note: sync path still awaited at the TaskRunner boundary
40
- await syncTask(i as any);
41
- }
42
- const syncTime = performance.now() - syncStart;
43
-
44
- const asyncStart = performance.now();
45
- for (let i = 0; i < iterations; i++) {
46
- await asyncTask(i);
47
- }
48
- const asyncTime = performance.now() - asyncStart;
49
-
50
- // Log metrics for manual inspection
51
- // eslint-disable-next-line no-console
52
- console.log(
53
- `Task benchmark (iterations=${iterations}) -> sync: ${syncTime.toFixed(
54
- 2
55
- )}ms, async: ${asyncTime.toFixed(2)}ms`
56
- );
57
- },
58
- });
59
-
60
- const { dispose } = await run(app);
61
- await dispose();
62
- });
63
-
64
- it("compares with a chain of pass-through middlewares", async () => {
65
- const chainLength = 10;
66
-
67
- const middlewares = Array.from({ length: chainLength }, (_, idx) =>
68
- defineMiddleware({
69
- id: `mw.${idx}`,
70
- // Return the result of next() directly; no extra async wrapper here
71
- run: ({ next }: any) => next(),
72
- })
73
- );
74
-
75
- const syncTask = defineTask<number, any>({
76
- id: "bench.syncTask.withMw",
77
- middleware: middlewares,
78
- // Intentionally synchronous
79
- run: ((n: number) => {
80
- let acc = 0;
81
- for (let i = 0; i < 200; i++) acc += (n + i) % 7;
82
- return acc;
83
- }) as any,
84
- } as any);
85
-
86
- const asyncTask = defineTask<number, Promise<number>>({
87
- id: "bench.asyncTask.withMw",
88
- middleware: middlewares,
89
- run: async (n: number) => {
90
- let acc = 0;
91
- for (let i = 0; i < 200; i++) acc += (n + i) % 7;
92
- return acc;
93
- },
94
- });
95
-
96
- const app = defineResource({
97
- id: "bench.app.mw",
98
- register: [...middlewares, syncTask, asyncTask],
99
- dependencies: { syncTask, asyncTask },
100
- async init(_, { syncTask, asyncTask }) {
101
- // Warm-up
102
- await asyncTask(0);
103
- await syncTask(0 as any);
104
-
105
- const iters = 5000;
106
- const t0 = process.hrtime.bigint();
107
- for (let i = 0; i < iters; i++) {
108
- await syncTask(i as any);
109
- }
110
- const t1 = process.hrtime.bigint();
111
- const syncNs = Number(t1 - t0);
112
-
113
- const t2 = process.hrtime.bigint();
114
- for (let i = 0; i < iters; i++) {
115
- await asyncTask(i);
116
- }
117
- const t3 = process.hrtime.bigint();
118
- const asyncNs = Number(t3 - t2);
119
-
120
- // eslint-disable-next-line no-console
121
- console.log(
122
- `Task benchmark with ${chainLength} middlewares (iterations=${iters}) -> sync: ${(
123
- syncNs / 1e6
124
- ).toFixed(2)}ms, async: ${(asyncNs / 1e6).toFixed(2)}ms`
125
- );
126
- },
127
- });
128
-
129
- const { dispose } = await run(app);
130
- await dispose();
131
- });
132
- });
@@ -1,91 +0,0 @@
1
- import { createContext, task, run, resource } from "../index";
2
- import { ContextError } from "../context";
3
-
4
- describe("Context System", () => {
5
- const TestContext = createContext<{ id: string }>();
6
-
7
- test("useContext throws when missing", async () => {
8
- const r = resource({
9
- id: "test.context.use",
10
- init: async () => TestContext.use(),
11
- });
12
-
13
- await expect(run(r)).rejects.toThrow(ContextError);
14
-
15
- await TestContext.provide({ id: "1" }, async () => {
16
- await expect(run(r)).resolves.toEqual({
17
- value: { id: "1" },
18
- dispose: expect.any(Function),
19
- });
20
- });
21
- });
22
-
23
- test("require middleware blocks missing context", async () => {
24
- const t = task({
25
- id: "task",
26
- middleware: [TestContext.require()],
27
- run: async () => "ok",
28
- });
29
-
30
- const r = resource({
31
- id: "resource",
32
- register: [t],
33
- dependencies: { t },
34
- init: async (_, deps) => deps.t(),
35
- });
36
- await expect(run(r)).rejects.toThrow(ContextError);
37
-
38
- await TestContext.provide({ id: "1" }, async () => {
39
- await expect(run(r)).resolves.toEqual({
40
- value: "ok",
41
- dispose: expect.any(Function),
42
- });
43
- });
44
- });
45
-
46
- test("concurrent provide calls are isolated", async () => {
47
- const results: string[] = [];
48
-
49
- const promises = [
50
- TestContext.provide({ id: "user-1" }, async () => {
51
- await new Promise((resolve) => setTimeout(resolve, 10)); // small delay
52
- const context = TestContext.use();
53
- results.push(context.id);
54
- return context.id;
55
- }),
56
- TestContext.provide({ id: "user-2" }, async () => {
57
- await new Promise((resolve) => setTimeout(resolve, 5)); // smaller delay
58
- const context = TestContext.use();
59
- results.push(context.id);
60
- return context.id;
61
- }),
62
- ];
63
-
64
- const values = await Promise.all(promises);
65
-
66
- // Each context should maintain its own value
67
- expect(values).toEqual(["user-1", "user-2"]);
68
- expect(results).toEqual(["user-2", "user-1"]); // user-2 finishes first due to shorter delay
69
- });
70
-
71
- test("nested provide calls work correctly", async () => {
72
- const result = await TestContext.provide({ id: "outer" }, async () => {
73
- const outer = TestContext.use();
74
-
75
- const inner = await TestContext.provide({ id: "inner" }, async () => {
76
- return TestContext.use();
77
- });
78
-
79
- const afterInner = TestContext.use();
80
-
81
- return { outer: outer.id, inner: inner.id, afterInner: afterInner.id };
82
- });
83
-
84
- // Outer context should be restored after inner provide completes
85
- expect(result).toEqual({
86
- outer: "outer",
87
- inner: "inner",
88
- afterInner: "outer", // This should be restored!
89
- });
90
- });
91
- });