@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,706 +0,0 @@
1
- import {
2
- defineTask,
3
- defineResource,
4
- defineEvent,
5
- defineMiddleware,
6
- } from "../define";
7
- import { run } from "../run";
8
-
9
- describe("Anonymous Components", () => {
10
- describe("Anonymous Tasks", () => {
11
- it("should create and execute an anonymous task", async () => {
12
- const anonymousTask = defineTask({
13
- run: async () => "Anonymous task executed",
14
- });
15
-
16
- // ID should be a symbol
17
- expect(typeof anonymousTask.id).toBe("symbol");
18
- expect(anonymousTask.id.toString()).toContain("anonymous.test.task");
19
-
20
- const app = defineResource({
21
- id: "app",
22
- register: [anonymousTask],
23
- dependencies: { anonymousTask },
24
- async init(_, { anonymousTask }) {
25
- const result = await anonymousTask();
26
- expect(result).toBe("Anonymous task executed");
27
- },
28
- });
29
-
30
- await run(app);
31
- });
32
-
33
- it("should create anonymous task with dependencies", async () => {
34
- const anonymousResource = defineResource({
35
- init: async () => "Anonymous dependency",
36
- });
37
-
38
- const anonymousTask = defineTask({
39
- dependencies: { anonymousResource },
40
- run: async (_, { anonymousResource }) => {
41
- return `Hello, ${anonymousResource}!`;
42
- },
43
- });
44
-
45
- expect(typeof anonymousTask.id).toBe("symbol");
46
- expect(typeof anonymousResource.id).toBe("symbol");
47
-
48
- const app = defineResource({
49
- id: "app",
50
- register: [anonymousResource, anonymousTask],
51
- dependencies: { anonymousTask },
52
- async init(_, { anonymousTask }) {
53
- const result = await anonymousTask();
54
- expect(result).toBe("Hello, Anonymous dependency!");
55
- },
56
- });
57
-
58
- await run(app);
59
- });
60
-
61
- it("should emit anonymous task events", async () => {
62
- const eventHandler = jest.fn();
63
-
64
- const anonymousTask = defineTask({
65
- run: async () => "Task executed",
66
- });
67
-
68
- const eventListener = defineTask({
69
- id: "listener",
70
- on: anonymousTask.events.afterRun,
71
- run: eventHandler,
72
- });
73
-
74
- expect(typeof anonymousTask.events.afterRun.id).toBe("symbol");
75
- expect(anonymousTask.events.afterRun.id.toString()).toContain(
76
- "anonymous-task.events.afterRun"
77
- );
78
-
79
- const app = defineResource({
80
- id: "app",
81
- register: [anonymousTask, eventListener],
82
- dependencies: { anonymousTask },
83
- async init(_, { anonymousTask }) {
84
- await anonymousTask();
85
- expect(eventHandler).toHaveBeenCalled();
86
- },
87
- });
88
-
89
- await run(app);
90
- });
91
-
92
- it("should handle anonymous task with middleware", async () => {
93
- const order: string[] = [];
94
-
95
- const anonymousMiddleware = defineMiddleware({
96
- run: async ({ next }) => {
97
- order.push("middleware before");
98
- const result = await next();
99
- order.push("middleware after");
100
- return result;
101
- },
102
- });
103
-
104
- const anonymousTask = defineTask({
105
- middleware: [anonymousMiddleware],
106
- run: async () => {
107
- order.push("task");
108
- return "Task with middleware";
109
- },
110
- });
111
-
112
- expect(typeof anonymousTask.id).toBe("symbol");
113
- expect(typeof anonymousMiddleware.id).toBe("symbol");
114
-
115
- const app = defineResource({
116
- id: "app",
117
- register: [anonymousMiddleware, anonymousTask],
118
- dependencies: { anonymousTask },
119
- async init(_, { anonymousTask }) {
120
- const result = await anonymousTask();
121
- expect(result).toBe("Task with middleware");
122
- },
123
- });
124
-
125
- await run(app);
126
-
127
- expect(order).toEqual(["middleware before", "task", "middleware after"]);
128
- });
129
-
130
- it("should listen to anonymous events", async () => {
131
- const eventHandler = jest.fn();
132
-
133
- const anonymousEvent = defineEvent<{ message: string }>({});
134
-
135
- const eventEmitter = defineTask({
136
- dependencies: { anonymousEvent },
137
- run: async (_, { anonymousEvent }) => {
138
- await anonymousEvent({ message: "Anonymous event!" });
139
- return "Event emitted";
140
- },
141
- });
142
-
143
- const eventListener = defineTask({
144
- on: anonymousEvent,
145
- run: eventHandler,
146
- });
147
-
148
- expect(typeof anonymousEvent.id).toBe("symbol");
149
- expect(anonymousEvent.id.toString()).toContain("anonymous.test.event");
150
-
151
- const app = defineResource({
152
- id: "app",
153
- register: [anonymousEvent, eventEmitter, eventListener],
154
- dependencies: { eventEmitter },
155
- async init(_, { eventEmitter }) {
156
- await eventEmitter();
157
- expect(eventHandler).toHaveBeenCalled();
158
- },
159
- });
160
-
161
- await run(app);
162
- });
163
- });
164
-
165
- describe("Anonymous Resources", () => {
166
- it("should create and initialize an anonymous resource", async () => {
167
- const anonymousResource = defineResource({
168
- init: async () => "Anonymous resource value",
169
- });
170
-
171
- expect(typeof anonymousResource.id).toBe("symbol");
172
- expect(anonymousResource.id.toString()).toContain(
173
- "anonymous.test.resource"
174
- );
175
-
176
- const app = defineResource({
177
- id: "app",
178
- register: [anonymousResource],
179
- dependencies: { anonymousResource },
180
- async init(_, { anonymousResource }) {
181
- expect(anonymousResource).toBe("Anonymous resource value");
182
- },
183
- });
184
-
185
- await run(app);
186
- });
187
-
188
- it("should create anonymous resource with dependencies", async () => {
189
- const dependencyResource = defineResource({
190
- init: async () => "Dependency value",
191
- });
192
-
193
- const anonymousResource = defineResource({
194
- dependencies: { dependencyResource },
195
- init: async (_, { dependencyResource }) => {
196
- return `Using ${dependencyResource}`;
197
- },
198
- });
199
-
200
- expect(typeof anonymousResource.id).toBe("symbol");
201
- expect(typeof dependencyResource.id).toBe("symbol");
202
-
203
- const app = defineResource({
204
- id: "app",
205
- register: [dependencyResource, anonymousResource],
206
- dependencies: { anonymousResource },
207
- async init(_, { anonymousResource }) {
208
- expect(anonymousResource).toBe("Using Dependency value");
209
- },
210
- });
211
-
212
- await run(app);
213
- });
214
-
215
- it("should create anonymous resource with configuration", async () => {
216
- const anonymousResource = defineResource({
217
- init: async (config: { prefix: string }) =>
218
- `${config.prefix} configured!`,
219
- });
220
-
221
- expect(typeof anonymousResource.id).toBe("symbol");
222
-
223
- const app = defineResource({
224
- id: "app",
225
- register: [anonymousResource.with({ prefix: "Anonymous" })],
226
- dependencies: { anonymousResource },
227
- async init(_, { anonymousResource }) {
228
- expect(anonymousResource).toBe("Anonymous configured!");
229
- },
230
- });
231
-
232
- await run(app);
233
- });
234
-
235
- it("should emit anonymous resource events", async () => {
236
- const eventHandler = jest.fn();
237
-
238
- const anonymousResource = defineResource({
239
- init: async () => "Resource initialized",
240
- });
241
-
242
- const eventListener = defineTask({
243
- id: "listener",
244
- on: anonymousResource.events.afterInit,
245
- run: eventHandler,
246
- });
247
-
248
- expect(typeof anonymousResource.events.afterInit.id).toBe("symbol");
249
- expect(anonymousResource.events.afterInit.id.toString()).toContain(
250
- "anonymous-resource.events.afterInit"
251
- );
252
-
253
- const app = defineResource({
254
- id: "app",
255
- register: [anonymousResource, eventListener],
256
- dependencies: { anonymousResource },
257
- async init(_, { anonymousResource }) {
258
- expect(anonymousResource).toBe("Resource initialized");
259
- expect(eventHandler).toHaveBeenCalled();
260
- },
261
- });
262
-
263
- await run(app);
264
- });
265
-
266
- it("should dispose anonymous resource properly", async () => {
267
- const disposeFn = jest.fn();
268
-
269
- const anonymousResource = defineResource({
270
- init: async () => "Resource value",
271
- dispose: disposeFn,
272
- });
273
-
274
- const app = defineResource({
275
- id: "app",
276
- register: [anonymousResource],
277
- dependencies: { anonymousResource },
278
- async init(_, { anonymousResource }) {
279
- expect(anonymousResource).toBe("Resource value");
280
- return anonymousResource;
281
- },
282
- });
283
-
284
- const result = await run(app);
285
- await result.dispose();
286
-
287
- expect(disposeFn).toHaveBeenCalledWith(
288
- "Resource value",
289
- {},
290
- {},
291
- undefined
292
- );
293
- });
294
-
295
- it("should work with anonymous resource without init method", async () => {
296
- const nestedResource = defineResource({
297
- init: async () => "Nested value",
298
- });
299
-
300
- const anonymousResource = defineResource({
301
- register: [nestedResource],
302
- });
303
-
304
- expect(typeof anonymousResource.id).toBe("symbol");
305
-
306
- const app = defineResource({
307
- id: "app",
308
- register: [anonymousResource],
309
- dependencies: { anonymousResource },
310
- async init(_, { anonymousResource }) {
311
- expect(anonymousResource).toBeUndefined();
312
- },
313
- });
314
-
315
- await run(app);
316
- });
317
-
318
- it("should allow two anonymous resources to co-exist and be distinct", async () => {
319
- const resourceA = defineResource({
320
- init: async () => "A",
321
- });
322
-
323
- const resourceB = defineResource({
324
- init: async () => "B",
325
- });
326
-
327
- // Both ids should be symbols and different
328
- expect(typeof resourceA.id).toBe("symbol");
329
- expect(typeof resourceB.id).toBe("symbol");
330
- expect(resourceA.id).not.toBe(resourceB.id);
331
-
332
- const app = defineResource({
333
- id: "app",
334
- register: [resourceA, resourceB],
335
- dependencies: { resourceA, resourceB },
336
- async init(_, { resourceA, resourceB }) {
337
- expect(resourceA).toBe("A");
338
- expect(resourceB).toBe("B");
339
- },
340
- });
341
-
342
- await run(app);
343
- });
344
- });
345
-
346
- describe("Anonymous Events", () => {
347
- it("should create and emit anonymous events", async () => {
348
- const eventHandler = jest.fn();
349
-
350
- const anonymousEvent = defineEvent<{ data: string }>({});
351
-
352
- const emitter = defineTask({
353
- dependencies: { anonymousEvent },
354
- run: async (_, { anonymousEvent }) => {
355
- await anonymousEvent({ data: "Anonymous event data" });
356
- },
357
- });
358
-
359
- const listener = defineTask({
360
- on: anonymousEvent,
361
- run: eventHandler,
362
- });
363
-
364
- expect(typeof anonymousEvent.id).toBe("symbol");
365
- expect(anonymousEvent.id.toString()).toContain("anonymous.test.event");
366
-
367
- const app = defineResource({
368
- id: "app",
369
- register: [anonymousEvent, emitter, listener],
370
- dependencies: { emitter },
371
- async init(_, { emitter }) {
372
- await emitter();
373
- expect(eventHandler).toHaveBeenCalledWith(
374
- expect.objectContaining({
375
- data: { data: "Anonymous event data" },
376
- }),
377
- expect.any(Object)
378
- );
379
- },
380
- });
381
-
382
- await run(app);
383
- });
384
-
385
- it("should handle multiple anonymous events", async () => {
386
- const handler1 = jest.fn();
387
- const handler2 = jest.fn();
388
-
389
- const anonymousEvent1 = defineEvent<{ type: string }>({});
390
- const anonymousEvent2 = defineEvent<{ value: number }>({});
391
-
392
- const emitter = defineTask({
393
- dependencies: { anonymousEvent1, anonymousEvent2 },
394
- run: async (_, { anonymousEvent1, anonymousEvent2 }) => {
395
- await anonymousEvent1({ type: "first" });
396
- await anonymousEvent2({ value: 42 });
397
- },
398
- });
399
-
400
- const listener1 = defineTask({
401
- on: anonymousEvent1,
402
- run: handler1,
403
- });
404
-
405
- const listener2 = defineTask({
406
- on: anonymousEvent2,
407
- run: handler2,
408
- });
409
-
410
- expect(typeof anonymousEvent1.id).toBe("symbol");
411
- expect(typeof anonymousEvent2.id).toBe("symbol");
412
-
413
- const app = defineResource({
414
- id: "app",
415
- register: [
416
- anonymousEvent1,
417
- anonymousEvent2,
418
- emitter,
419
- listener1,
420
- listener2,
421
- ],
422
- dependencies: { emitter },
423
- async init(_, { emitter }) {
424
- await emitter();
425
- expect(handler1).toHaveBeenCalled();
426
- expect(handler2).toHaveBeenCalled();
427
- },
428
- });
429
-
430
- await run(app);
431
- });
432
- });
433
-
434
- describe("Anonymous Middleware", () => {
435
- it("should create and use anonymous middleware", async () => {
436
- const order: string[] = [];
437
-
438
- const anonymousMiddleware = defineMiddleware({
439
- run: async ({ next }) => {
440
- order.push("anonymous middleware");
441
- return await next();
442
- },
443
- });
444
-
445
- const testTask = defineTask({
446
- id: "test.task",
447
- middleware: [anonymousMiddleware],
448
- run: async () => {
449
- order.push("task execution");
450
- return "Task result";
451
- },
452
- });
453
-
454
- expect(typeof anonymousMiddleware.id).toBe("symbol");
455
- expect(anonymousMiddleware.id.toString()).toContain(
456
- "anonymous.test.middleware"
457
- );
458
-
459
- const app = defineResource({
460
- id: "app",
461
- register: [anonymousMiddleware, testTask],
462
- dependencies: { testTask },
463
- async init(_, { testTask }) {
464
- const result = await testTask();
465
- expect(result).toBe("Task result");
466
- },
467
- });
468
-
469
- await run(app);
470
-
471
- expect(order).toEqual(["anonymous middleware", "task execution"]);
472
- });
473
-
474
- it("should create anonymous middleware with dependencies", async () => {
475
- const anonymousResource = defineResource({
476
- init: async () => "Middleware dependency",
477
- });
478
-
479
- const anonymousMiddleware = defineMiddleware({
480
- dependencies: { anonymousResource },
481
- run: async ({ next }, { anonymousResource }) => {
482
- const result = await next();
483
- return `${result} - ${anonymousResource}`;
484
- },
485
- });
486
-
487
- const testTask = defineTask({
488
- id: "test.task",
489
- middleware: [anonymousMiddleware],
490
- run: async () => "Original result",
491
- });
492
-
493
- expect(typeof anonymousMiddleware.id).toBe("symbol");
494
- expect(typeof anonymousResource.id).toBe("symbol");
495
-
496
- const app = defineResource({
497
- id: "app",
498
- register: [anonymousResource, anonymousMiddleware, testTask],
499
- dependencies: { testTask },
500
- async init(_, { testTask }) {
501
- const result = await testTask();
502
- expect(result).toBe("Original result - Middleware dependency");
503
- },
504
- });
505
-
506
- await run(app);
507
- });
508
-
509
- it("should create anonymous middleware with configuration", async () => {
510
- const anonymousMiddleware = defineMiddleware({
511
- run: async ({ next }, _, config: { multiplier: number }) => {
512
- const result = await next();
513
- return result * config.multiplier;
514
- },
515
- });
516
-
517
- const testTask = defineTask({
518
- id: "test.task",
519
- middleware: [anonymousMiddleware.with({ multiplier: 3 })],
520
- run: async () => 10,
521
- });
522
-
523
- expect(typeof anonymousMiddleware.id).toBe("symbol");
524
-
525
- const app = defineResource({
526
- id: "app",
527
- register: [anonymousMiddleware, testTask],
528
- dependencies: { testTask },
529
- async init(_, { testTask }) {
530
- const result = await testTask();
531
- expect(result).toBe(30);
532
- },
533
- });
534
-
535
- await run(app);
536
- });
537
-
538
- it("should chain multiple anonymous middleware", async () => {
539
- const order: string[] = [];
540
-
541
- const middleware1 = defineMiddleware({
542
- run: async ({ next }) => {
543
- order.push("middleware1 before");
544
- const result = await next();
545
- order.push("middleware1 after");
546
- return result;
547
- },
548
- });
549
-
550
- const middleware2 = defineMiddleware({
551
- run: async ({ next }) => {
552
- order.push("middleware2 before");
553
- const result = await next();
554
- order.push("middleware2 after");
555
- return result;
556
- },
557
- });
558
-
559
- const testTask = defineTask({
560
- id: "test.task",
561
- middleware: [middleware1, middleware2],
562
- run: async () => {
563
- order.push("task");
564
- return "Task executed";
565
- },
566
- });
567
-
568
- expect(typeof middleware1.id).toBe("symbol");
569
- expect(typeof middleware2.id).toBe("symbol");
570
-
571
- const app = defineResource({
572
- id: "app",
573
- register: [middleware1, middleware2, testTask],
574
- dependencies: { testTask },
575
- async init(_, { testTask }) {
576
- await testTask();
577
- },
578
- });
579
-
580
- await run(app);
581
-
582
- expect(order).toEqual([
583
- "middleware1 before",
584
- "middleware2 before",
585
- "task",
586
- "middleware2 after",
587
- "middleware1 after",
588
- ]);
589
- });
590
- });
591
-
592
- describe("Complex Anonymous Combinations", () => {
593
- it("should work with all anonymous components together", async () => {
594
- const results: string[] = [];
595
-
596
- // Anonymous event
597
- const anonymousEvent = defineEvent<{ step: string }>({});
598
-
599
- // Anonymous resource
600
- const anonymousResource = defineResource({
601
- init: async () => ({ step: (name: string) => results.push(name) }),
602
- });
603
-
604
- // Anonymous middleware
605
- const anonymousMiddleware = defineMiddleware({
606
- dependencies: { anonymousResource },
607
- run: async ({ next }, { anonymousResource }) => {
608
- anonymousResource.step("middleware before");
609
- const result = await next();
610
- anonymousResource.step("middleware after");
611
- return result;
612
- },
613
- });
614
-
615
- // Anonymous task that emits event
616
- const anonymousEmitter = defineTask({
617
- dependencies: { anonymousEvent, anonymousResource },
618
- middleware: [anonymousMiddleware],
619
- run: async (_, { anonymousEvent, anonymousResource }) => {
620
- anonymousResource.step("task execution");
621
- await anonymousEvent({ step: "event emitted" });
622
- return "Emitter done";
623
- },
624
- });
625
-
626
- // Anonymous listener task
627
- const anonymousListener = defineTask({
628
- on: anonymousEvent,
629
- dependencies: { anonymousResource },
630
- run: async (event, { anonymousResource }) => {
631
- anonymousResource.step(`event received: ${event.data.step}`);
632
- },
633
- });
634
-
635
- // Verify all components are anonymous
636
- expect(typeof anonymousEvent.id).toBe("symbol");
637
- expect(typeof anonymousResource.id).toBe("symbol");
638
- expect(typeof anonymousMiddleware.id).toBe("symbol");
639
- expect(typeof anonymousEmitter.id).toBe("symbol");
640
- expect(typeof anonymousListener.id).toBe("symbol");
641
-
642
- const app = defineResource({
643
- id: "app",
644
- register: [
645
- anonymousEvent,
646
- anonymousResource,
647
- anonymousMiddleware,
648
- anonymousEmitter,
649
- anonymousListener,
650
- ],
651
- dependencies: { anonymousEmitter },
652
- async init(_, { anonymousEmitter }) {
653
- const result = await anonymousEmitter();
654
- expect(result).toBe("Emitter done");
655
- // Wait a bit for event processing to complete
656
- await new Promise((resolve) => setTimeout(resolve, 10));
657
- },
658
- });
659
-
660
- await run(app);
661
-
662
- expect(results).toEqual([
663
- "middleware before",
664
- "task execution",
665
- "event received: event emitted",
666
- "middleware after",
667
- ]);
668
- });
669
-
670
- it("should handle error suppression with anonymous components", async () => {
671
- const suppressMock = jest.fn();
672
-
673
- const anonymousTask = defineTask({
674
- run: async () => {
675
- throw new Error("Anonymous task failed");
676
- },
677
- });
678
-
679
- const anonymousErrorHandler = defineTask({
680
- on: anonymousTask.events.onError,
681
- run: async (event) => {
682
- suppressMock();
683
- event.data.suppress();
684
- },
685
- });
686
-
687
- expect(typeof anonymousTask.id).toBe("symbol");
688
- expect(typeof anonymousErrorHandler.id).toBe("symbol");
689
-
690
- const app = defineResource({
691
- id: "app",
692
- register: [anonymousTask, anonymousErrorHandler],
693
- dependencies: { anonymousTask },
694
- async init(_, { anonymousTask }) {
695
- const result = await anonymousTask();
696
- expect(result).toBeUndefined();
697
- return "App completed";
698
- },
699
- });
700
-
701
- const result = await run(app);
702
- expect(result.value).toBe("App completed");
703
- expect(suppressMock).toHaveBeenCalled();
704
- });
705
- });
706
- });