@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,217 +0,0 @@
1
- import {
2
- findCircularDependencies,
3
- IDependentNode,
4
- } from "../../tools/findCircularDependencies";
5
-
6
- describe("checkCircularDependencies", () => {
7
- test("should detect a simple cycle (A -> B -> C -> A)", () => {
8
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
9
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
10
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
11
-
12
- nodeA.dependencies["B"] = nodeB;
13
- nodeB.dependencies["C"] = nodeC;
14
- nodeC.dependencies["A"] = nodeA;
15
-
16
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC];
17
- const result = findCircularDependencies(nodes);
18
-
19
- expect(result.cycles).toEqual(["A -> B -> C -> A"]);
20
- expect(result.missingDependencies).toEqual([]);
21
- });
22
-
23
- test("should detect multiple cycles", () => {
24
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
25
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
26
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
27
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
28
-
29
- nodeA.dependencies["B"] = nodeB;
30
- nodeB.dependencies["C"] = nodeC;
31
- nodeC.dependencies["A"] = nodeA; // Cycle: A -> B -> C -> A
32
- nodeC.dependencies["D"] = nodeD;
33
- nodeD.dependencies["B"] = nodeB; // Cycle: B -> C -> D -> B
34
-
35
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD];
36
- const result = findCircularDependencies(nodes);
37
-
38
- // The order of cycles in the result array might vary
39
- expect(result.cycles).toContain("A -> B -> C -> A");
40
- expect(result.cycles).toContain("B -> C -> D -> B");
41
- expect(result.cycles.length).toBe(2);
42
- expect(result.missingDependencies).toEqual([]);
43
- });
44
-
45
- test("should return empty arrays when there are no cycles", () => {
46
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
47
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
48
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
49
-
50
- nodeA.dependencies["B"] = nodeB;
51
- nodeB.dependencies["C"] = nodeC;
52
-
53
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC];
54
- const result = findCircularDependencies(nodes);
55
-
56
- expect(result.cycles).toEqual([]);
57
- expect(result.missingDependencies).toEqual([]);
58
- });
59
-
60
- test("should detect a self-referential cycle (A -> A)", () => {
61
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
62
- nodeA.dependencies["A"] = nodeA; // Cycle: A -> A
63
-
64
- const nodes: IDependentNode[] = [nodeA];
65
- const result = findCircularDependencies(nodes);
66
-
67
- expect(result.cycles).toEqual(["A -> A"]);
68
- expect(result.missingDependencies).toEqual([]);
69
- });
70
-
71
- test("should handle complex graphs with shared nodes", () => {
72
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
73
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
74
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
75
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
76
- const nodeE: IDependentNode = { id: "E", dependencies: {} };
77
-
78
- nodeA.dependencies["B"] = nodeB;
79
- nodeB.dependencies["C"] = nodeC;
80
- nodeC.dependencies["D"] = nodeD;
81
- nodeD.dependencies["B"] = nodeB; // Cycle: B -> C -> D -> B
82
- nodeC.dependencies["E"] = nodeE;
83
- nodeE.dependencies["C"] = nodeC; // Cycle: C -> E -> C
84
-
85
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD, nodeE];
86
- const result = findCircularDependencies(nodes);
87
-
88
- expect(result.cycles).toContain("B -> C -> D -> B");
89
- expect(result.cycles).toContain("C -> E -> C");
90
- expect(result.cycles.length).toBe(2);
91
- expect(result.missingDependencies).toEqual([]);
92
- });
93
-
94
- test("should handle multiple independent cycles", () => {
95
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
96
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
97
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
98
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
99
- const nodeE: IDependentNode = { id: "E", dependencies: {} };
100
- const nodeF: IDependentNode = { id: "F", dependencies: {} };
101
-
102
- // Cycle 1: A -> B -> A
103
- nodeA.dependencies["B"] = nodeB;
104
- nodeB.dependencies["A"] = nodeA;
105
-
106
- // Cycle 2: C -> D -> E -> C
107
- nodeC.dependencies["D"] = nodeD;
108
- nodeD.dependencies["E"] = nodeE;
109
- nodeE.dependencies["C"] = nodeC;
110
-
111
- // Cycle 3: F -> F
112
- nodeF.dependencies["F"] = nodeF;
113
-
114
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD, nodeE, nodeF];
115
- const result = findCircularDependencies(nodes);
116
-
117
- expect(result.cycles).toContain("A -> B -> A");
118
- expect(result.cycles).toContain("C -> D -> E -> C");
119
- expect(result.cycles).toContain("F -> F");
120
- expect(result.cycles.length).toBe(3);
121
- expect(result.missingDependencies).toEqual([]);
122
- });
123
-
124
- test("should handle disconnected graphs", () => {
125
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
126
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
127
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
128
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
129
-
130
- // Cycle 1: A -> B -> A
131
- nodeA.dependencies["B"] = nodeB;
132
- nodeB.dependencies["A"] = nodeA;
133
-
134
- // Cycle 2: C -> D -> C
135
- nodeC.dependencies["D"] = nodeD;
136
- nodeD.dependencies["C"] = nodeC;
137
-
138
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD];
139
- const result = findCircularDependencies(nodes);
140
-
141
- expect(result.cycles).toContain("A -> B -> A");
142
- expect(result.cycles).toContain("C -> D -> C");
143
- expect(result.cycles.length).toBe(2);
144
- expect(result.missingDependencies).toEqual([]);
145
- });
146
-
147
- test("should handle nodes with no dependencies", () => {
148
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
149
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
150
-
151
- const nodes: IDependentNode[] = [nodeA, nodeB];
152
- const result = findCircularDependencies(nodes);
153
-
154
- expect(result.cycles).toEqual([]);
155
- expect(result.missingDependencies).toEqual([]);
156
- });
157
-
158
- test("should handle dependencies that do not form cycles", () => {
159
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
160
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
161
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
162
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
163
-
164
- nodeA.dependencies["B"] = nodeB;
165
- nodeB.dependencies["C"] = nodeC;
166
- nodeC.dependencies["D"] = nodeD;
167
-
168
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD];
169
- const result = findCircularDependencies(nodes);
170
-
171
- expect(result.cycles).toEqual([]);
172
- expect(result.missingDependencies).toEqual([]);
173
- });
174
-
175
- test("should report missing dependencies", () => {
176
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
177
- // nodeB is missing
178
- nodeA.dependencies["B"] = undefined as any; // Force undefined dependency
179
-
180
- const nodes: IDependentNode[] = [nodeA];
181
- const result = findCircularDependencies(nodes);
182
-
183
- expect(result.cycles).toEqual([]);
184
- expect(result.missingDependencies).toEqual([
185
- { nodeId: "A", dependencyId: "B" },
186
- ]);
187
- });
188
-
189
- test("should handle complex graph with multiple overlapping cycles", () => {
190
- const nodeA: IDependentNode = { id: "A", dependencies: {} };
191
- const nodeB: IDependentNode = { id: "B", dependencies: {} };
192
- const nodeC: IDependentNode = { id: "C", dependencies: {} };
193
- const nodeD: IDependentNode = { id: "D", dependencies: {} };
194
- const nodeE: IDependentNode = { id: "E", dependencies: {} };
195
- const nodeF: IDependentNode = { id: "F", dependencies: {} };
196
-
197
- // Construct cycles:
198
- // A -> B -> C -> A
199
- // C -> D -> E -> F -> C
200
-
201
- nodeA.dependencies["B"] = nodeB;
202
- nodeB.dependencies["C"] = nodeC;
203
- nodeC.dependencies["A"] = nodeA;
204
- nodeC.dependencies["D"] = nodeD;
205
- nodeD.dependencies["E"] = nodeE;
206
- nodeE.dependencies["F"] = nodeF;
207
- nodeF.dependencies["C"] = nodeC;
208
-
209
- const nodes: IDependentNode[] = [nodeA, nodeB, nodeC, nodeD, nodeE, nodeF];
210
- const result = findCircularDependencies(nodes);
211
-
212
- expect(result.cycles).toContain("A -> B -> C -> A");
213
- expect(result.cycles).toContain("C -> D -> E -> F -> C");
214
- expect(result.cycles.length).toBe(2);
215
- expect(result.missingDependencies).toEqual([]);
216
- });
217
- });
@@ -1,179 +0,0 @@
1
- import {
2
- defineTask,
3
- defineResource,
4
- defineMiddleware,
5
- defineEvent,
6
- } from "../../define";
7
- import { symbolFilePath } from "../../defs";
8
- import {
9
- getCallerFile,
10
- generateCallerIdFromFile,
11
- } from "../../tools/getCallerFile";
12
-
13
- describe("getCallerFile", () => {
14
- it("should return the file name of the caller", () => {
15
- function testFunction() {
16
- return getCallerFile();
17
- }
18
-
19
- const callerFile = testFunction();
20
-
21
- expect(callerFile).toBeDefined();
22
- expect(callerFile).toContain("getCallerFile.test"); // we don't use .ts because for coverage it gets compiled to js
23
- });
24
-
25
- it("Should work with tasks, resources, middleware and events", () => {
26
- const task = defineTask({
27
- id: "task",
28
- run: async () => {},
29
- });
30
- const resource = defineResource({
31
- id: "resource",
32
- init: async () => {},
33
- });
34
-
35
- const middleware = defineMiddleware({
36
- id: "middleware",
37
- run: async () => {},
38
- });
39
-
40
- const event = defineEvent({
41
- id: "event",
42
- });
43
-
44
- expect((task as any)[symbolFilePath]).toBeDefined();
45
- expect((resource as any)[symbolFilePath]).toBeDefined();
46
- expect((middleware as any)[symbolFilePath]).toBeDefined();
47
- expect((event as any)[symbolFilePath]).toBeDefined();
48
-
49
- expect((task as any)[symbolFilePath]).toContain("getCallerFile.test");
50
- expect((resource as any)[symbolFilePath]).toContain("getCallerFile.test");
51
- expect((middleware as any)[symbolFilePath]).toContain("getCallerFile.test");
52
- expect((event as any)[symbolFilePath]).toContain("getCallerFile.test");
53
- });
54
- });
55
-
56
- describe("generateCallerIdFromFile", () => {
57
- it("should generate a symbol from a path containing src", () => {
58
- const filePath =
59
- "/Users/theodordiaconu/Projects/runner/src/globals/resources/queue.resource.ts";
60
- const expectedDescription = "src.globals.resources.queue.resource";
61
- expect(generateCallerIdFromFile(filePath).description).toEqual(
62
- expectedDescription
63
- );
64
- });
65
-
66
- it("should generate a symbol from a path not containing src", () => {
67
- const filePath =
68
- "/Users/theodordiaconu/Projects/runner/dist/globals/resources/queue.resource.ts";
69
- const expectedDescription = "dist.globals.resources.queue.resource";
70
- expect(generateCallerIdFromFile(filePath).description).toEqual(
71
- expectedDescription
72
- );
73
- });
74
-
75
- it("should handle paths with few parts when src is not present", () => {
76
- const filePath = "a/b/c.ts";
77
- const expectedDescription = "a.b.c";
78
- expect(generateCallerIdFromFile(filePath).description).toEqual(
79
- expectedDescription
80
- );
81
- });
82
-
83
- it("should handle paths with backslashes", () => {
84
- const filePath =
85
- "C:\\Users\\theodordiaconu\\Projects\\runner\\src\\globals\\resources\\queue.resource.ts";
86
- const expectedDescription = "src.globals.resources.queue.resource";
87
- expect(generateCallerIdFromFile(filePath).description).toEqual(
88
- expectedDescription
89
- );
90
- });
91
-
92
- it("should handle file names without extensions", () => {
93
- const filePath =
94
- "/Users/theodordiaconu/Projects/runner/src/globals/resources/queue.resource";
95
- const expectedDescription = "src.globals.resources.queue.resource";
96
- expect(generateCallerIdFromFile(filePath).description).toEqual(
97
- expectedDescription
98
- );
99
- });
100
-
101
- it("should handle file names with multiple dots", () => {
102
- const filePath =
103
- "/Users/theodordiaconu/Projects/runner/src/globals/resources/queue.resource.test.ts";
104
- const expectedDescription = "src.globals.resources.queue.resource.test";
105
- expect(generateCallerIdFromFile(filePath).description).toEqual(
106
- expectedDescription
107
- );
108
- });
109
-
110
- it("should generate a symbol from a path containing node_modules", () => {
111
- const filePath =
112
- "/Users/theodordiaconu/Projects/runner/node_modules/some-package/dist/index.js";
113
- const expectedDescription = "some-package.dist.index";
114
- expect(generateCallerIdFromFile(filePath).description).toEqual(
115
- expectedDescription
116
- );
117
- });
118
-
119
- it("should respect the fallbackParts argument", () => {
120
- const filePath = "a/b/c/d/e.ts";
121
- const expectedDescription = "d.e";
122
- expect(generateCallerIdFromFile(filePath, "", 2).description).toEqual(
123
- expectedDescription
124
- );
125
- });
126
-
127
- it("should append the suffix to the symbol description", () => {
128
- const filePath = "a/b/c.ts";
129
- const expectedDescription = "a.b.c.my-suffix";
130
- expect(generateCallerIdFromFile(filePath, "my-suffix").description).toEqual(
131
- expectedDescription
132
- );
133
- });
134
-
135
- it("should not append the suffix if it is already in the file name", () => {
136
- const filePath = "a/b/c.resource.ts";
137
- const expectedDescription = "a.b.c.resource";
138
- expect(generateCallerIdFromFile(filePath, "resource").description).toEqual(
139
- expectedDescription
140
- );
141
- });
142
-
143
- it("should handle empty path or path with no relevant parts", () => {
144
- // Test with empty string - this creates relevantParts = [""] which is not empty
145
- const filePath = "";
146
- const expectedDescription = ".suffix";
147
- expect(generateCallerIdFromFile(filePath, "suffix").description).toEqual(
148
- expectedDescription
149
- );
150
-
151
- // Test case where 'src' is at the end, making relevantParts empty (triggers line 77 else branch)
152
- const result = generateCallerIdFromFile("/some/path/src", "suffix");
153
- expect(result.description).toEqual(".some.path.src.suffix");
154
- });
155
-
156
- it("should use fallback parts when no src or node_modules found", () => {
157
- // Test path without src or node_modules to trigger the else branch (line 59)
158
- const filePath = "/some/other/deep/path/file.js";
159
- const expectedDescription = "other.deep.path.file";
160
- expect(generateCallerIdFromFile(filePath, "", 4).description).toEqual(
161
- expectedDescription
162
- );
163
- });
164
-
165
- it("should handle path equal to process.cwd() (relative root)", () => {
166
- const expectedDescription = ".suffix";
167
- expect(
168
- generateCallerIdFromFile(process.cwd(), "suffix").description
169
- ).toEqual(expectedDescription);
170
- });
171
-
172
- it("should handle path ending with node_modules (no relevant parts)", () => {
173
- const path = `${process.cwd()}/node_modules`;
174
- const expectedDescription = ".suffix";
175
- expect(generateCallerIdFromFile(path, "suffix").description).toEqual(
176
- expectedDescription
177
- );
178
- });
179
- });