@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,423 +0,0 @@
1
- import {
2
- defineEvent,
3
- defineTask,
4
- defineResource,
5
- defineMiddleware,
6
- defineOverride,
7
- defineTag,
8
- } from "../define";
9
- import { IMeta } from "../defs";
10
- import {
11
- EnsureResponseSatisfiesContracts,
12
- HasContracts,
13
- } from "../defs.returnTag";
14
- import { createTestResource, run } from "..";
15
-
16
- // This is skipped because we mostly check typesafety.
17
- describe.skip("typesafety", () => {
18
- it("tasks, resources: should have propper type safety for dependeices", async () => {
19
- type InputTask = {
20
- message: string;
21
- };
22
-
23
- const middleware = defineMiddleware({
24
- id: "middleware",
25
- run: async (input, deps) => {
26
- return input;
27
- },
28
- });
29
-
30
- type MiddlewareConfig = {
31
- message: string;
32
- };
33
-
34
- type MiddlewareOptionalConfig = {
35
- message?: string;
36
- };
37
-
38
- const middlewareWithConfig = defineMiddleware({
39
- id: "middleware.config",
40
- run: async (input, deps, config: MiddlewareConfig) => {
41
- return input;
42
- },
43
- });
44
-
45
- const middlewareWithOptionalConfig = defineMiddleware({
46
- id: "middleware.optional.config",
47
- run: async (input, deps, config: MiddlewareOptionalConfig) => {
48
- return input;
49
- },
50
- });
51
-
52
- const event = defineEvent<{ message: string }>({
53
- id: "event",
54
- });
55
-
56
- const eventWithoutArguments = defineEvent({
57
- id: "event",
58
- });
59
-
60
- const baseTask = defineTask({
61
- id: "task",
62
- run: async (input: InputTask) => "Task executed",
63
- });
64
-
65
- const task = defineTask({
66
- id: "task",
67
- dependencies: { baseTask, event },
68
- run: async (input: InputTask, deps) => {
69
- deps.event({ message: input.message });
70
- // @ts-expect-error
71
- deps.event({ messagex: input.message });
72
-
73
- deps.baseTask({
74
- message: "Hello, World!",
75
- });
76
-
77
- deps.baseTask({
78
- // @ts-expect-error
79
- messagex: 123,
80
- });
81
-
82
- // bc no arguments and its required
83
- // @ts-expect-error
84
- deps.baseTask();
85
- },
86
- });
87
-
88
- type ResourceType = {
89
- ok: boolean;
90
- };
91
-
92
- const dummyResource = defineResource({
93
- id: "dummy.resource",
94
- init: async (config: ResourceType) => "Resource Value",
95
- });
96
- const dummyResourceNoConfig = defineResource({
97
- id: "dummy.resource",
98
- init: async () => "Resource Value",
99
- });
100
- const dummyResourceOptionalConfig = defineResource({
101
- id: "dummy.resource",
102
- init: async (config?: string) => "Resource Value",
103
- });
104
-
105
- const testResource = defineResource({
106
- id: "test.resource",
107
- middleware: [
108
- middleware,
109
- // @ts-expect-error
110
- middlewareWithConfig,
111
- middlewareWithConfig.with({ message: "Hello, World!" }),
112
- // @ts-expect-error
113
- middlewareWithConfig.with({ message: 123 }),
114
- middlewareWithOptionalConfig,
115
- middlewareWithOptionalConfig.with({ message: "Hello, World!" }),
116
- // @ts-expect-error
117
- middlewareWithOptionalConfig.with({ message: 123 }),
118
- ],
119
- dependencies: { task, dummyResource, event, eventWithoutArguments },
120
- init: async (_, deps) => {
121
- const result = await deps.task({
122
- message: "Hello, World!",
123
- });
124
-
125
- deps.event({ message: "Hello, World!" });
126
- // @ts-expect-error
127
- deps.event();
128
- // @ts-expect-error
129
- deps.event({ messagex: "Hello, World!" });
130
- deps.eventWithoutArguments();
131
- deps.eventWithoutArguments({});
132
- // @ts-expect-error
133
- deps.eventWithoutArguments({ something: false });
134
-
135
- // @ts-expect-error
136
- deps.dummyResource as number;
137
-
138
- deps.dummyResource as string;
139
-
140
- // @ts-expect-error
141
- result === 1;
142
-
143
- // @ts-expect-error
144
- deps.task2;
145
- },
146
- register: [
147
- middleware,
148
- middlewareWithConfig,
149
- middlewareWithOptionalConfig,
150
- middlewareWithOptionalConfig.with({ message: "Hello, World!" }),
151
- middlewareWithConfig.with({ message: "Hello, World!" }),
152
- // @ts-expect-error
153
- middlewareWithConfig.with({ message: 123 }),
154
- dummyResourceNoConfig,
155
- // @ts-expect-error
156
- dummyResourceNoConfig.with("hello"),
157
- // @ts-expect-error
158
- dummyResourceNoConfig.with({ anyObject: true }),
159
-
160
- // @ts-expect-error
161
- dummyResource, // should throw
162
- dummyResource.with({ ok: true }),
163
- // @ts-expect-error
164
- dummyResource.with({ ok: 123 }),
165
- // @ts-expect-error
166
- dummyResource.with(),
167
-
168
- // should work
169
- dummyResourceOptionalConfig.with("hello"),
170
- ],
171
- });
172
-
173
- expect(true).toBe(true);
174
- });
175
-
176
- it("events: should have propper type safety", async () => {
177
- const hookEvent = defineEvent<{ message: string }>({ id: "hook.event" });
178
-
179
- const task = defineTask({
180
- id: "task",
181
- run: async () => "Task executed",
182
- });
183
-
184
- const testResource = defineTask({
185
- id: "test.resource",
186
- dependencies: { task },
187
- on: hookEvent,
188
- run: async (_, deps) => {
189
- _.data.message;
190
- // @ts-expect-error
191
- _.data.messagex;
192
- deps.task();
193
- // @ts-expect-error
194
- deps.task2;
195
- },
196
- });
197
-
198
- const testResource2 = defineTask({
199
- id: "test.resource",
200
- dependencies: { task },
201
- on: "*",
202
- run: async (_, deps) => {
203
- _.data.message;
204
- _.data.messagex;
205
- deps.task();
206
- // @ts-expect-error
207
- deps.task2;
208
- },
209
- });
210
-
211
- expect(true).toBe(true);
212
- });
213
-
214
- it("createTestResource.runTask: should be type-safe", async () => {
215
- type Input = { x: number };
216
- type Output = Promise<number>;
217
-
218
- const add = defineTask<Input, Output>({
219
- id: "types.add",
220
- run: async (i) => i.x + 1,
221
- });
222
-
223
- const depTask = defineTask<{ v: string }, Promise<string>>({
224
- id: "types.dep",
225
- run: async (i) => i.v.toUpperCase(),
226
- });
227
-
228
- const main = defineTask<Input, Output, { depTask: typeof depTask }>({
229
- id: "types.main",
230
- dependencies: { depTask },
231
- run: async (i, d) => {
232
- const v = await d.depTask({ v: String(i.x) });
233
- return Number(v) + 1;
234
- },
235
- });
236
-
237
- const app = defineResource({
238
- id: "types.app",
239
- register: [add, depTask, main],
240
- });
241
- const harness = createTestResource(app);
242
-
243
- // Types: input must match, override deps must match, output is awaited number
244
- const { value: t } = await run(harness);
245
- const r1: number | undefined = await t.runTask(add, { x: 1 });
246
- // @ts-expect-error wrong input type
247
- await t.runTask(add, { z: 1 });
248
- // @ts-expect-error missing input
249
- await t.runTask(add);
250
-
251
- const r2: number | undefined = await t.runTask(main, { x: 2 });
252
-
253
- // @ts-expect-error wrong deps override type
254
- await t.runTask(main, { x: 2 }, { depTask: async (i: number) => "x" });
255
-
256
- expect(true).toBe(true);
257
- });
258
-
259
- it("should have propper type safety for overrides", async () => {
260
- const task = defineTask({
261
- id: "task",
262
- run: async () => "Task executed",
263
- });
264
-
265
- // @ts-expect-error
266
- const overrideTask = defineOverride(task, {
267
- run: async () => 234,
268
- });
269
-
270
- const resource = defineResource({
271
- id: "resource",
272
- register: [task],
273
- init: async () => "Resource executed",
274
- });
275
-
276
- const overrideResource = defineOverride(resource, {
277
- init: async () => "Resource overridden",
278
- });
279
- // @ts-expect-error
280
- defineOverride(resource, {
281
- init: async () => 123, // bad type
282
- });
283
-
284
- const middleware = defineMiddleware({
285
- id: "middleware",
286
- run: async () => "Middleware executed",
287
- });
288
-
289
- expect(true).toBe(true);
290
- });
291
-
292
- it("should have propper type safety for tags", async () => {
293
- const tag = defineTag({ id: "tag" });
294
- const tag2 = defineTag<{ value: number }>({ id: "tag2" });
295
- const tag2optional = defineTag<{ value?: number }>({ id: "tag2" });
296
-
297
- const tag3 = tag2.with({ value: 123 });
298
- // @ts-expect-error
299
- const tag4 = tag.with({ value: 123 });
300
-
301
- const task = defineTask({
302
- id: "task",
303
- meta: {
304
- tags: [
305
- tag,
306
- // @ts-expect-error
307
- tag2,
308
- tag2optional,
309
- tag2.with({ value: 123 }),
310
- tag3,
311
- ],
312
- },
313
- run: async (input) => {
314
- return input;
315
- },
316
- });
317
-
318
- expect(true).toBe(true);
319
- });
320
-
321
- it("should enforce contracts on tasks", async () => {
322
- interface IUser {
323
- name: string;
324
- }
325
-
326
- interface IOther {
327
- age: number;
328
- }
329
-
330
- const tag = defineTag<{ value: number }, IUser>({ id: "tag" });
331
- const tag2 = defineTag<void, IOther>({ id: "tag2" });
332
-
333
- const meta = {
334
- tags: [tag.with({ value: 123 }), tag2, "string"],
335
- } satisfies IMeta;
336
-
337
- const response = {
338
- age: 123,
339
- name: "123", // intentional
340
- };
341
- type TEST = HasContracts<typeof meta>;
342
- type TEST2 = EnsureResponseSatisfiesContracts<typeof meta, typeof response>;
343
-
344
- const task = defineTask({
345
- id: "task",
346
- meta,
347
- run: async (input: { name: string }) => {
348
- return {
349
- age: 123,
350
- name: "123",
351
- };
352
- },
353
- });
354
- const task2 = defineTask({
355
- id: "task",
356
- meta,
357
- // @ts-expect-error
358
- run: async (input: { name: string }) => {
359
- return {
360
- age: "123",
361
- };
362
- },
363
- });
364
-
365
- const task3 = defineTask({
366
- id: "task",
367
- meta,
368
- // @ts-expect-error
369
- run: async (input: { name: string }) => {
370
- return {};
371
- },
372
- });
373
- });
374
-
375
- it("should enforce contracts on resources", async () => {
376
- interface IUser {
377
- name: string;
378
- }
379
-
380
- interface IOther {
381
- age: number;
382
- }
383
-
384
- const tag = defineTag<{ value: number }, IUser>({ id: "tag" });
385
- const tag2 = defineTag<void, IOther>({ id: "tag2" });
386
-
387
- const meta = {
388
- tags: [tag.with({ value: 123 }), tag2, "string"],
389
- } satisfies IMeta;
390
-
391
- const resourceOk = defineResource({
392
- id: "resource.ok",
393
- meta,
394
- init: async () => {
395
- return {
396
- age: 123,
397
- name: "123",
398
- };
399
- },
400
- });
401
-
402
- const resourceBad1 = defineResource({
403
- id: "resource.bad1",
404
- meta,
405
- // @ts-expect-error
406
- init: async () => {
407
- return {
408
- age: "123",
409
- name: "123",
410
- };
411
- },
412
- });
413
-
414
- const resourceBad2 = defineResource({
415
- id: "resource.bad2",
416
- meta,
417
- // @ts-expect-error
418
- init: async () => {
419
- return {};
420
- },
421
- });
422
- });
423
- });
@@ -1,111 +0,0 @@
1
- import { defineTask, defineResource, defineEvent, defineMiddleware } from "../define";
2
- import { run } from "../run";
3
- import { ValidationError } from "../errors";
4
- import { IValidationSchema } from "../defs";
5
-
6
- // Mock validation schema similar to the existing pattern
7
- class MockValidationSchema<T> implements IValidationSchema<T> {
8
- constructor(
9
- private validator: (input: unknown) => T,
10
- ) {}
11
-
12
- parse(input: unknown): T {
13
- return this.validator(input);
14
- }
15
- }
16
-
17
- describe("Validation Edge Cases", () => {
18
- it("should handle non-Error thrown from task input validation", async () => {
19
- const taskSchema = new MockValidationSchema<string>((input: unknown) => {
20
- // Throw a non-Error object to trigger the instanceof Error === false branch
21
- throw "Non-error string thrown";
22
- });
23
-
24
- const task = defineTask({
25
- id: "task.nonErrorValidation",
26
- inputSchema: taskSchema,
27
- run: async (input: string) => "success",
28
- });
29
-
30
- const app = defineResource({
31
- id: "app",
32
- register: [task],
33
- dependencies: { task },
34
- init: async (_, { task }) => {
35
- await task("invalid");
36
- },
37
- });
38
-
39
- await expect(run(app)).rejects.toThrow(ValidationError);
40
- await expect(run(app)).rejects.toThrow("Task input validation failed for task.nonErrorValidation: Non-error string thrown");
41
- });
42
-
43
- it("should handle non-Error thrown from resource config validation", async () => {
44
- const configSchema = new MockValidationSchema<any>((input: unknown) => {
45
- throw "Resource config error string";
46
- });
47
-
48
- const resource = defineResource({
49
- id: "resource.nonErrorValidation",
50
- configSchema: configSchema,
51
- init: async (config: any) => "success",
52
- });
53
-
54
- expect(() => {
55
- resource.with({ invalid: "config" } as any);
56
- }).toThrow(ValidationError);
57
- expect(() => {
58
- resource.with({ invalid: "config" } as any);
59
- }).toThrow("Resource config validation failed for resource.nonErrorValidation: Resource config error string");
60
- });
61
-
62
- it("should handle non-Error thrown from middleware config validation", async () => {
63
- const configSchema = new MockValidationSchema<any>((input: unknown) => {
64
- throw "Middleware config error string";
65
- });
66
-
67
- const middleware = defineMiddleware({
68
- id: "middleware.nonErrorValidation",
69
- configSchema: configSchema,
70
- run: async ({ next }) => next(),
71
- });
72
-
73
- expect(() => {
74
- middleware.with({ invalid: "config" } as any);
75
- }).toThrow(ValidationError);
76
- expect(() => {
77
- middleware.with({ invalid: "config" } as any);
78
- }).toThrow("Middleware config validation failed for middleware.nonErrorValidation: Middleware config error string");
79
- });
80
-
81
- it("should handle non-Error thrown from event payload validation", async () => {
82
- const payloadSchema = new MockValidationSchema<any>((input: unknown) => {
83
- throw "Event payload error string";
84
- });
85
-
86
- const event = defineEvent({
87
- id: "event.nonErrorValidation",
88
- payloadSchema: payloadSchema,
89
- });
90
-
91
- const listenerTask = defineTask({
92
- id: "task.listener",
93
- on: event,
94
- run: async (event) => {
95
- // This won't be called because validation will fail
96
- },
97
- });
98
-
99
- const app = defineResource({
100
- id: "app",
101
- register: [event, listenerTask],
102
- dependencies: { event },
103
- init: async (_, { event }) => {
104
- await event({ invalid: "payload" });
105
- },
106
- });
107
-
108
- await expect(run(app)).rejects.toThrow(ValidationError);
109
- await expect(run(app)).rejects.toThrow("Event payload validation failed for event.nonErrorValidation: Event payload error string");
110
- });
111
- });