@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,549 +0,0 @@
1
- import { defineMiddleware, defineTask, defineResource } from "../define";
2
- import { run } from "../run";
3
- import { retryMiddleware } from "../globals/middleware/retry.middleware";
4
-
5
- // Middleware
6
- describe("Middleware", () => {
7
- it("should be able to register the middleware and execute it", async () => {
8
- const testMiddleware = defineMiddleware({
9
- id: "test.middleware",
10
- run: async ({ next }) => {
11
- const result = await next();
12
- return `Middleware: ${result}`;
13
- },
14
- });
15
-
16
- const testTask = defineTask({
17
- id: "test.task",
18
- middleware: [testMiddleware],
19
- run: async () => "Task executed",
20
- });
21
-
22
- const app = defineResource({
23
- id: "app",
24
- register: [testMiddleware, testTask],
25
- dependencies: { testTask },
26
- async init(_, { testTask }) {
27
- const result = await testTask();
28
- expect(result).toBe("Middleware: Task executed");
29
- },
30
- });
31
-
32
- await run(app);
33
- });
34
-
35
- it("should work with global middleware", async () => {
36
- const globalMiddleware = defineMiddleware({
37
- id: "global.middleware",
38
- run: async ({ next }) => {
39
- const result = await next();
40
- return `global.middleware: ${result}`;
41
- },
42
- });
43
-
44
- const testMiddleware = defineMiddleware({
45
- id: "test.middleware",
46
- run: async ({ next }) => {
47
- const result = await next();
48
- return `Middleware: ${result}`;
49
- },
50
- });
51
-
52
- const testTask = defineTask({
53
- id: "test.task",
54
- middleware: [testMiddleware],
55
- run: async () => "Task executed",
56
- });
57
-
58
- const app = defineResource({
59
- id: "app",
60
- register: [globalMiddleware.everywhere(), testMiddleware, testTask],
61
- dependencies: { testTask },
62
- async init(_, { testTask }) {
63
- const result = await testTask();
64
- expect(result).toBe("global.middleware: Middleware: Task executed");
65
- },
66
- });
67
-
68
- await run(app);
69
- });
70
-
71
- it("should work with global middleware but local one should have priority", async () => {
72
- const createMiddleware = (id: string) =>
73
- defineMiddleware({
74
- id: "middleware",
75
- run: async ({ next }) => {
76
- const result = await next();
77
- return `${id}: ${result}`;
78
- },
79
- });
80
- const globalMiddleware = createMiddleware("global.middleware");
81
-
82
- const testMiddleware = defineMiddleware({
83
- id: "test.middleware",
84
- run: async ({ next }) => {
85
- const result = await next();
86
- return `Middleware: ${result}`;
87
- },
88
- });
89
-
90
- const testTask = defineTask({
91
- id: "test.task",
92
- middleware: [testMiddleware],
93
- run: async () => "Task executed",
94
- });
95
-
96
- const app = defineResource({
97
- id: "app",
98
- register: [globalMiddleware.everywhere(), testMiddleware, testTask],
99
- dependencies: { testTask },
100
- async init(_, { testTask }) {
101
- const result = await testTask();
102
- expect(result).toBe("global.middleware: Middleware: Task executed");
103
- },
104
- });
105
-
106
- await run(app);
107
- });
108
- it("should work with a middleware with functional() dependencies", async () => {
109
- const task = defineTask({
110
- id: "task",
111
- run: async () => "Task executed",
112
- });
113
-
114
- const testMiddleware = defineMiddleware({
115
- id: "test.middleware",
116
- dependencies: () => ({ task }),
117
- run: async ({ next }, { task }) => {
118
- const result = await next();
119
- expect(result).toBe(await task());
120
- expect(result).toBe("Task executed");
121
- return `Middleware: ${result}`;
122
- },
123
- });
124
-
125
- const testTask = defineTask({
126
- id: "test.task",
127
- middleware: [testMiddleware],
128
- run: async () => "Task executed",
129
- });
130
-
131
- let allSolved = jest.fn();
132
- const app = defineResource({
133
- id: "app",
134
- register: [testMiddleware, testTask, task],
135
- dependencies: { testTask },
136
- async init(_, { testTask }) {
137
- const result = await testTask();
138
- expect(result).toBe("Middleware: Task executed");
139
- allSolved();
140
- },
141
- });
142
-
143
- await run(app);
144
- expect(allSolved).toHaveBeenCalled();
145
- });
146
-
147
- it("Should not work with a non-existing middleware", async () => {
148
- const middlewareDef = defineMiddleware({
149
- id: "middlewareId",
150
- run: async ({ next }) => {
151
- const result = await next();
152
- return `Middleware: ${result}`;
153
- },
154
- });
155
-
156
- const testTask = defineTask({
157
- id: "test.task",
158
- middleware: [middlewareDef],
159
- run: async () => "Task executed",
160
- });
161
-
162
- const app = defineResource({
163
- id: "app",
164
- register: [testTask],
165
- dependencies: { testTask },
166
- async init(_, { testTask }) {
167
- await testTask();
168
- },
169
- });
170
-
171
- // expect it to contain this: Dependency Middleware test.task not found
172
- await expect(run(app)).rejects.toThrowError(
173
- /Dependency Middleware middlewareId in Task test.task not found/
174
- );
175
- });
176
-
177
- it("Should work with resources", async () => {
178
- const middleware = defineMiddleware({
179
- id: "middleware",
180
- run: async ({ resource, next }) => {
181
- const result = await next();
182
- return `Middleware: ${result}`;
183
- },
184
- });
185
- const app = defineResource({
186
- id: "app",
187
- register: [middleware],
188
- middleware: [middleware],
189
- async init(_, {}) {
190
- return "App initialized";
191
- },
192
- });
193
-
194
- const result = await run(app);
195
- expect(result.value).toBe("Middleware: App initialized");
196
- });
197
-
198
- it("Should work with global middleware", async () => {
199
- const middleware = defineMiddleware({
200
- id: "middleware",
201
- run: async ({ resource, next }) => {
202
- const result = await next({});
203
- return `Middleware: ${result}`;
204
- },
205
- });
206
-
207
- const sub = defineResource({
208
- id: "sub",
209
- async init(_, {}) {
210
- return "Sub initialized";
211
- },
212
- });
213
-
214
- const app = defineResource({
215
- id: "app",
216
- register: [middleware.everywhere(), sub],
217
- dependencies: { sub },
218
- async init(_, { sub }) {
219
- return sub;
220
- },
221
- });
222
-
223
- const result = await run(app);
224
- expect(String(result.value)).toBe(
225
- "Middleware: Middleware: Sub initialized"
226
- );
227
- });
228
-
229
- it("Should prevent circular dependencies when middleware depends on the same task", async () => {
230
- const middleware: any = defineMiddleware({
231
- id: "middleware",
232
- dependencies: (): any => ({ task }),
233
- run: async (_: any, { task }: any) => {
234
- // example
235
- },
236
- });
237
-
238
- const task: any = defineTask({
239
- id: "task",
240
- middleware: [middleware],
241
- run: async () => "Task executed",
242
- });
243
-
244
- const app = defineResource({
245
- id: "sub",
246
- async init(_, {}) {
247
- return "Sub initialized";
248
- },
249
- register: [middleware, task],
250
- });
251
-
252
- expect(run(app)).rejects.toThrowError(/Circular dependencies detected/);
253
- });
254
- });
255
-
256
- describe("Configurable Middleware (.with)", () => {
257
- it("should allow using middleware usage in a task and pass config to run", async () => {
258
- let receivedConfig: any;
259
- const validate = defineMiddleware({
260
- id: "validate",
261
- run: async ({ next }, deps, config: { schema: string }) => {
262
- receivedConfig = config;
263
- return next();
264
- },
265
- });
266
- const usage = validate.with({ schema: "user" });
267
- const task = defineTask({
268
- id: "task",
269
- middleware: [usage],
270
- run: async () => "ok",
271
- });
272
- const app = defineResource({
273
- id: "app",
274
- register: [validate, task],
275
- dependencies: { task },
276
- async init(_, { task }) {
277
- const result = await task();
278
- expect(result).toBe("ok");
279
- expect(receivedConfig).toEqual({ schema: "user" });
280
- },
281
- });
282
- await run(app);
283
- });
284
-
285
- it("should allow multiple usages of the same middleware definition with different configs", async () => {
286
- const calls: (string | undefined)[] = [];
287
- const validate = defineMiddleware({
288
- id: "validate",
289
- run: async ({ next }, deps, config: { schema: string }) => {
290
- calls.push(config.schema);
291
- return next();
292
- },
293
- });
294
- const usage1 = validate.with({ schema: "user" });
295
- const usage2 = validate.with({ schema: "admin" });
296
- const task1 = defineTask({
297
- id: "task1",
298
- middleware: [usage1],
299
- run: async () => "ok1",
300
- });
301
- const task2 = defineTask({
302
- id: "task2",
303
- middleware: [usage2],
304
- run: async () => "ok2",
305
- });
306
- const app = defineResource({
307
- id: "app",
308
- register: [validate, task1, task2],
309
- dependencies: { task1, task2 },
310
- async init(_, { task1, task2 }) {
311
- await task1();
312
- await task2();
313
- expect(calls).toEqual(["user", "admin"]);
314
- },
315
- });
316
- await run(app);
317
- });
318
-
319
- it("should work in an integration scenario with global and per-task middleware", async () => {
320
- const calls: string[] = [];
321
- const log = defineMiddleware({
322
- id: "log",
323
- run: async ({ next }) => {
324
- calls.push("global");
325
- return next();
326
- },
327
- });
328
- const validate = defineMiddleware({
329
- id: "validate",
330
- run: async ({ next }, deps, config: { schema: string }) => {
331
- expect(config).toBeDefined();
332
- calls.push(config!.schema);
333
- return next();
334
- },
335
- });
336
- const usage = validate.with({ schema: "user" });
337
- const task = defineTask({
338
- id: "task",
339
- middleware: [usage],
340
- run: async () => "ok",
341
- });
342
- const app = defineResource({
343
- id: "app",
344
- register: [log.everywhere(), validate, task],
345
- dependencies: { task },
346
- async init(_, { task }) {
347
- const result = await task();
348
- expect(result).toBe("ok");
349
- expect(calls).toContain("global");
350
- expect(calls).toContain("user");
351
- },
352
- });
353
- await run(app);
354
- });
355
-
356
- it("should enforce type safety for config in .with()", () => {
357
- const validate = defineMiddleware({
358
- id: "validate",
359
- run: async ({ next }, deps, config: { schema: string }) => next(),
360
- });
361
-
362
- // Should error if config type is not correct
363
- // @ts-expect-error
364
- validate.with({ schema: 123 });
365
- });
366
-
367
- it("should modify task outputs independently based on middleware configs", async () => {
368
- const prefixMiddleware = defineMiddleware({
369
- id: "prefixer",
370
- run: async ({ next }, deps, config: { prefix: string }) => {
371
- const result = await next();
372
- return `${config.prefix}: ${result}`;
373
- },
374
- });
375
-
376
- const taskA = defineTask({
377
- id: "taskA",
378
- middleware: [prefixMiddleware.with({ prefix: "Alpha" })],
379
- run: async () => "Result",
380
- });
381
-
382
- const taskB = defineTask({
383
- id: "taskB",
384
- middleware: [prefixMiddleware.with({ prefix: "Beta" })],
385
- run: async () => "Result",
386
- });
387
-
388
- const app = defineResource({
389
- id: "app",
390
- register: [prefixMiddleware, taskA, taskB],
391
- dependencies: { taskA, taskB },
392
- async init(_, deps) {
393
- const resultA = await deps.taskA();
394
- const resultB = await deps.taskB();
395
-
396
- expect(resultA).toBe("Alpha: Result");
397
- expect(resultB).toBe("Beta: Result");
398
- },
399
- });
400
-
401
- await run(app);
402
- });
403
- });
404
-
405
- describe("Middleware.everywhere()", () => {
406
- it("should work with { tasks: true, resources: true }", async () => {
407
- const calls: string[] = [];
408
- const everywhereMiddleware = defineMiddleware({
409
- id: "everywhere.middleware",
410
- run: async ({ next, task, resource }) => {
411
- if (task) {
412
- calls.push(`task:${String(task.definition.id)}`);
413
- }
414
- if (resource) {
415
- calls.push(`resource:${String(resource.definition.id)}`);
416
- }
417
- return next();
418
- },
419
- });
420
-
421
- const testTask = defineTask({
422
- id: "test.task",
423
- run: async () => "Task executed",
424
- });
425
-
426
- const testResource = defineResource({
427
- id: "test.resource",
428
- async init() {
429
- return "Resource initialized";
430
- },
431
- });
432
-
433
- const app = defineResource({
434
- id: "app",
435
- register: [
436
- everywhereMiddleware.everywhere({ tasks: true, resources: true }),
437
- testTask,
438
- testResource,
439
- ],
440
- dependencies: { testTask, testResource },
441
- async init(_, { testTask, testResource }) {
442
- await testTask();
443
- expect(testResource).toBe("Resource initialized");
444
- },
445
- });
446
-
447
- await run(app);
448
-
449
- expect(calls).toContain("resource:app");
450
- expect(calls).toContain("resource:test.resource");
451
- expect(calls).toContain("task:test.task");
452
- });
453
-
454
- it("should work with { tasks: true, resources: false }", async () => {
455
- const calls: string[] = [];
456
- const everywhereMiddleware = defineMiddleware({
457
- id: "everywhere.middleware",
458
- run: async ({ next, task, resource }) => {
459
- if (task) {
460
- calls.push(`task:${String(task.definition.id)}`);
461
- }
462
- if (resource) {
463
- calls.push(`resource:${String(resource.definition.id)}`);
464
- }
465
- return next();
466
- },
467
- });
468
-
469
- const testTask = defineTask({
470
- id: "test.task",
471
- run: async () => "Task executed",
472
- });
473
-
474
- const testResource = defineResource({
475
- id: "test.resource",
476
- async init() {
477
- return "Resource initialized";
478
- },
479
- });
480
-
481
- const app = defineResource({
482
- id: "app",
483
- register: [
484
- everywhereMiddleware.everywhere({ tasks: true, resources: false }),
485
- testTask,
486
- testResource,
487
- ],
488
- dependencies: { testTask, testResource },
489
- async init(_, { testTask, testResource }) {
490
- await testTask();
491
- expect(testResource).toBe("Resource initialized");
492
- },
493
- });
494
-
495
- await run(app);
496
-
497
- expect(calls).not.toContain("resource:app");
498
- expect(calls).not.toContain("resource:test.resource");
499
- expect(calls).toContain("task:test.task");
500
- });
501
-
502
- it("should work with { tasks: false, resources: true }", async () => {
503
- const calls: string[] = [];
504
- const everywhereMiddleware = defineMiddleware({
505
- id: "everywhere.middleware",
506
- run: async ({ next, task, resource }) => {
507
- if (task) {
508
- calls.push(`task:${String(task.definition.id)}`);
509
- }
510
- if (resource) {
511
- calls.push(`resource:${String(resource.definition.id)}`);
512
- }
513
- return next();
514
- },
515
- });
516
-
517
- const testTask = defineTask({
518
- id: "test.task",
519
- run: async () => "Task executed",
520
- });
521
-
522
- const testResource = defineResource({
523
- id: "test.resource",
524
- async init() {
525
- return "Resource initialized";
526
- },
527
- });
528
-
529
- const app = defineResource({
530
- id: "app",
531
- register: [
532
- everywhereMiddleware.everywhere({ tasks: false, resources: true }),
533
- testTask,
534
- testResource,
535
- ],
536
- dependencies: { testTask, testResource },
537
- async init(_, { testTask, testResource }) {
538
- await testTask();
539
- expect(testResource).toBe("Resource initialized");
540
- },
541
- });
542
-
543
- await run(app);
544
-
545
- expect(calls).toContain("resource:app");
546
- expect(calls).toContain("resource:test.resource");
547
- expect(calls).not.toContain("task:test.task");
548
- });
549
- });