@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,282 +0,0 @@
1
- import { globalEvents } from "../globals/globalEvents";
2
- import { EventManager } from "./EventManager";
3
-
4
- export type LogLevels =
5
- | "trace"
6
- | "debug"
7
- | "info"
8
- | "warn"
9
- | "error"
10
- | "critical";
11
-
12
- export interface LogInfo {
13
- source?: string | symbol;
14
- error?: Error;
15
- data?: Record<string, any>;
16
- [key: string]: any;
17
- }
18
-
19
- export interface ILog {
20
- level: string;
21
- source?: string;
22
- message: any;
23
- timestamp: Date;
24
- error?: {
25
- name: string;
26
- message: string;
27
- stack?: string;
28
- };
29
- data?: Record<string, any>;
30
- context?: Record<string, any>;
31
- }
32
-
33
- export class Logger {
34
- printThreshold: LogLevels | null = null;
35
- private boundContext: Record<string, any> = {};
36
-
37
- public static Severity = {
38
- trace: 0,
39
- debug: 1,
40
- info: 2,
41
- warn: 3,
42
- error: 4,
43
- critical: 5,
44
- };
45
-
46
- constructor(
47
- protected eventManager: EventManager,
48
- boundContext: Record<string, any> = {}
49
- ) {
50
- this.boundContext = { ...boundContext };
51
- this.printThreshold = this.getDefaultPrintThreshold();
52
- }
53
-
54
- /**
55
- * Determines the default print threshold based on environment variables
56
- */
57
- private getDefaultPrintThreshold(): LogLevels | null {
58
- // Check if logging is explicitly disabled
59
- const disableLogs = process.env.RUNNER_DISABLE_LOGS;
60
- if (disableLogs === "true" || disableLogs === "1") {
61
- return null;
62
- }
63
-
64
- // Check for specific log level override
65
- const logLevel = process.env.RUNNER_LOG_LEVEL;
66
- if (logLevel && this.isValidLogLevel(logLevel)) {
67
- return logLevel as LogLevels;
68
- }
69
-
70
- // Default to 'info' level for better developer experience
71
- return "info";
72
- }
73
-
74
- /**
75
- * Validates if a string is a valid log level
76
- */
77
- private isValidLogLevel(level: string): boolean {
78
- return Object.keys(Logger.Severity).includes(level);
79
- }
80
-
81
- /**
82
- * Creates a new logger instance with additional bound context
83
- */
84
- public with(context: Record<string, any>): Logger {
85
- return new Logger(this.eventManager, {
86
- ...this.boundContext,
87
- ...context,
88
- });
89
- }
90
-
91
- private extractErrorInfo(error: Error): {
92
- name: string;
93
- message: string;
94
- stack?: string;
95
- } {
96
- return {
97
- name: error.name,
98
- message: error.message,
99
- stack: error.stack,
100
- };
101
- }
102
-
103
- /**
104
- * Core logging method with structured LogInfo
105
- */
106
- public log(level: LogLevels, message: any, logInfo: LogInfo = {}): void {
107
- const { source, error, data, ...context } = logInfo;
108
-
109
- const log: ILog = {
110
- level,
111
- message,
112
- source: source || this.boundContext.source,
113
- timestamp: new Date(),
114
- error: error ? this.extractErrorInfo(error) : undefined,
115
- data: data || undefined,
116
- context: { ...this.boundContext, ...context },
117
- };
118
-
119
- if (
120
- this.printThreshold &&
121
- Logger.Severity[level] >= Logger.Severity[this.printThreshold]
122
- ) {
123
- this.print(log);
124
- }
125
-
126
- if (this.eventManager.hasListeners(globalEvents.log)) {
127
- setImmediate(() => {
128
- this.eventManager
129
- .emit(
130
- globalEvents.log,
131
- log,
132
- source || this.boundContext.source || "unknown"
133
- )
134
- .catch((err) => {
135
- console.error("Logger event emission failed:", err);
136
- });
137
- });
138
- }
139
- }
140
-
141
- /**
142
- * Will print logs after that, use `null` to disable autoprinting.
143
- * @param level
144
- */
145
- public setPrintThreshold(level: LogLevels | null) {
146
- this.printThreshold = level;
147
- }
148
-
149
- public print(log: ILog) {
150
- const { level, source, message, timestamp, error, data, context } = log;
151
-
152
- // Color codes for different log levels
153
- const colors = {
154
- trace: "\x1b[90m", // bright black/gray
155
- debug: "\x1b[36m", // cyan
156
- info: "\x1b[32m", // green
157
- warn: "\x1b[33m", // yellow
158
- error: "\x1b[31m", // red
159
- critical: "\x1b[35m", // magenta
160
- reset: "\x1b[0m", // reset
161
- bold: "\x1b[1m", // bold
162
- dim: "\x1b[2m", // dim
163
- blue: "\x1b[34m", // blue
164
- red: "\x1b[31m", // red
165
- cyan: "\x1b[36m", // cyan
166
- };
167
-
168
- const levelColor = colors[level as keyof typeof colors] || colors.info;
169
-
170
- // Format timestamp
171
- const time = timestamp.toLocaleTimeString("en-US", {
172
- hour12: false,
173
- hour: "2-digit",
174
- minute: "2-digit",
175
- second: "2-digit",
176
- });
177
- const ms = timestamp.getMilliseconds().toString().padStart(3, "0");
178
- const formattedTime = `${colors.dim}${time}.${ms}${colors.reset}`;
179
-
180
- // Format level with color and padding
181
- const levelStr = `${levelColor}${colors.bold}${level
182
- .toUpperCase()
183
- .padEnd(8)}${colors.reset}`;
184
-
185
- // Format source
186
- const sourceStr = source ? `${colors.blue}[${source}]${colors.reset} ` : "";
187
-
188
- // Format the main message
189
- let messageStr: string;
190
- if (typeof message === "object") {
191
- messageStr = JSON.stringify(message, null, 2);
192
- } else {
193
- messageStr = String(message);
194
- }
195
-
196
- // Build the main log line
197
- const mainLine = `${formattedTime} ${levelStr} ${sourceStr}${messageStr}`;
198
-
199
- // Start building output lines
200
- const lines = [mainLine];
201
-
202
- // Add error information if present
203
- if (error) {
204
- lines.push(
205
- `${colors.dim}├─ ${colors.red}Error: ${error.name}${colors.reset}`
206
- );
207
- lines.push(
208
- `${colors.dim}├─ ${colors.red}${error.message}${colors.reset}`
209
- );
210
- if (error.stack) {
211
- const stackLines = error.stack.split("\n").slice(1, 4); // Show first 3 stack frames
212
- stackLines.forEach((line, index) => {
213
- const prefix = index === stackLines.length - 1 ? "└─" : "├─";
214
- lines.push(
215
- `${colors.dim}${prefix} ${colors.red}${line.trim()}${colors.reset}`
216
- );
217
- });
218
- }
219
- }
220
-
221
- // Add structured data if present
222
- if (data && Object.keys(data).length > 0) {
223
- lines.push(`${colors.dim}├─ ${colors.cyan}Data:${colors.reset}`);
224
- const dataStr = JSON.stringify(data, null, 2);
225
- const dataLines = dataStr.split("\n");
226
- dataLines.forEach((line, index) => {
227
- const prefix = index === dataLines.length - 1 ? "└─" : "├─";
228
- lines.push(
229
- `${colors.dim}${prefix} ${colors.cyan}${line}${colors.reset}`
230
- );
231
- });
232
- }
233
-
234
- // Add context if present (excluding common context we already show)
235
- const filteredContext = context ? { ...context } : {};
236
- delete filteredContext.source; // Already shown in source
237
-
238
- if (filteredContext && Object.keys(filteredContext).length > 0) {
239
- lines.push(`${colors.dim}└─ ${colors.blue}Context:${colors.reset}`);
240
- const contextStr = JSON.stringify(filteredContext, null, 2);
241
- const contextLines = contextStr.split("\n");
242
- contextLines.forEach((line, index) => {
243
- const prefix = index === contextLines.length - 1 ? " " : " ";
244
- lines.push(
245
- `${colors.dim}${prefix} ${colors.blue}${line}${colors.reset}`
246
- );
247
- });
248
- }
249
-
250
- // Output all lines
251
- lines.forEach((line) => console.log(line));
252
-
253
- // Add a subtle separator for multi-line logs
254
- if (lines.length > 1) {
255
- console.log(`${colors.dim}${colors.reset}`);
256
- }
257
- }
258
-
259
- public info(message: any, logInfo: LogInfo = {}) {
260
- this.log("info", message, logInfo);
261
- }
262
-
263
- public error(message: any, logInfo: LogInfo = {}) {
264
- this.log("error", message, logInfo);
265
- }
266
-
267
- public warn(message: any, logInfo: LogInfo = {}) {
268
- this.log("warn", message, logInfo);
269
- }
270
-
271
- public debug(message: any, logInfo: LogInfo = {}) {
272
- this.log("debug", message, logInfo);
273
- }
274
-
275
- public trace(message: any, logInfo: LogInfo = {}) {
276
- this.log("trace", message, logInfo);
277
- }
278
-
279
- public critical(message: any, logInfo: LogInfo = {}) {
280
- this.log("critical", message, logInfo);
281
- }
282
- }
@@ -1,79 +0,0 @@
1
- import {
2
- IResource,
3
- IMiddleware,
4
- ITask,
5
- IResourceWithConfig,
6
- RegisterableItems,
7
- } from "../defs";
8
- import * as utils from "../define";
9
- import { DependencyNotFoundError } from "../errors";
10
- import { StoreRegistry } from "./StoreRegistry";
11
-
12
- export class OverrideManager {
13
- public overrides: Map<
14
- string | symbol,
15
- IResource | IMiddleware | ITask | IResourceWithConfig
16
- > = new Map();
17
-
18
- public overrideRequests: Set<{
19
- source: string | symbol;
20
- override: RegisterableItems;
21
- }> = new Set();
22
-
23
- constructor(private readonly registry: StoreRegistry) {}
24
-
25
- storeOverridesDeeply<C>(element: IResource<C, any, any>) {
26
- element.overrides.forEach((override) => {
27
- if (utils.isResource(override)) {
28
- this.storeOverridesDeeply(override);
29
- }
30
-
31
- let id: string | symbol;
32
- if (utils.isResourceWithConfig(override)) {
33
- this.storeOverridesDeeply(override.resource);
34
- id = override.resource.id;
35
- } else {
36
- id = override.id;
37
- }
38
-
39
- this.overrideRequests.add({ source: element.id, override });
40
- this.overrides.set(id, override);
41
- });
42
- }
43
-
44
- processOverrides() {
45
- // If we are trying to use override on something that wasn't previously registered, we throw an error.
46
- for (const override of this.overrides.values()) {
47
- let hasAnyItem = false;
48
- if (utils.isTask(override)) {
49
- hasAnyItem = this.registry.tasks.has(override.id);
50
- } else if (utils.isResource(override)) {
51
- hasAnyItem = this.registry.resources.has(override.id);
52
- } else if (utils.isMiddleware(override)) {
53
- hasAnyItem = this.registry.middlewares.has(override.id);
54
- } else if (utils.isResourceWithConfig(override)) {
55
- hasAnyItem = this.registry.resources.has(override.resource.id);
56
- }
57
-
58
- if (!hasAnyItem) {
59
- const id = utils.isResourceWithConfig(override)
60
- ? override.resource.id
61
- : override.id;
62
-
63
- throw new DependencyNotFoundError(id);
64
- }
65
- }
66
-
67
- for (const override of this.overrides.values()) {
68
- if (utils.isTask(override)) {
69
- this.registry.storeTask(override, false);
70
- } else if (utils.isResource(override)) {
71
- this.registry.storeResource(override, false);
72
- } else if (utils.isMiddleware(override)) {
73
- this.registry.storeMiddleware(override, false);
74
- } else if (utils.isResourceWithConfig(override)) {
75
- this.registry.storeResourceWithConfig(override, false);
76
- }
77
- }
78
- }
79
- }
@@ -1,66 +0,0 @@
1
- import { AsyncLocalStorage } from "node:async_hooks";
2
-
3
- /**
4
- * Cooperative task queue.
5
- * • Tasks run one‑after‑another (FIFO ordering).
6
- * • Dead‑lock detection prevents nesting.
7
- * • dispose() drains or cancels outstanding tasks, then rejects new ones.
8
- */
9
- export class Queue {
10
- private tail: Promise<unknown> = Promise.resolve();
11
- private disposed = false;
12
- private abortController = new AbortController();
13
-
14
- // true while inside a queued task → helps detect "queue in queue"
15
- private readonly executionContext = new AsyncLocalStorage<boolean>();
16
-
17
- /**
18
- * Schedule an asynchronous task.
19
- * @param task – receives an AbortSignal so it can cancel early if desired.
20
- */
21
- public run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T> {
22
- // 1. refuse new work if we've disposed
23
- if (this.disposed) {
24
- return Promise.reject(new Error("Queue has been disposed"));
25
- }
26
-
27
- // 2. detect dead‑locks (a queued task adding another queued task)
28
- if (this.executionContext.getStore()) {
29
- return Promise.reject(
30
- new Error(
31
- "Dead‑lock detected: a queued task attempted to queue another task"
32
- )
33
- );
34
- }
35
-
36
- const { signal } = this.abortController;
37
-
38
- // 3. chain task after the current tail
39
- const result = this.tail.then(() =>
40
- this.executionContext.run(true, () => task(signal))
41
- );
42
-
43
- // 4. preserve the chain even if the task rejects (swallow internally)
44
- this.tail = result.catch(() => {});
45
-
46
- return result;
47
- }
48
-
49
- /**
50
- * Disposes the queue.
51
- * @param options.cancel – if true, broadcasts AbortSignal to running task.
52
- * default: false (waits for tasks to finish).
53
- */
54
- public async dispose(options: { cancel?: boolean } = {}): Promise<void> {
55
- if (this.disposed) return;
56
-
57
- this.disposed = true;
58
-
59
- if (options.cancel) {
60
- this.abortController.abort(); // notify cooperative tasks
61
- }
62
-
63
- // wait for everything already chained to settle
64
- await this.tail.catch(() => {});
65
- }
66
- }
@@ -1,165 +0,0 @@
1
- import {
2
- DependencyMapType,
3
- DependencyValuesType,
4
- ITask,
5
- IResource,
6
- } from "../defs";
7
- import { EventManager } from "./EventManager";
8
- import { globalEvents } from "../globals/globalEvents";
9
- import { Store } from "./Store";
10
- import { MiddlewareStoreElementType } from "./StoreTypes";
11
- import { Logger } from "./Logger";
12
-
13
- export class ResourceInitializer {
14
- constructor(
15
- protected readonly store: Store,
16
- protected readonly eventManager: EventManager,
17
- protected readonly logger: Logger
18
- ) {}
19
-
20
- /**
21
- * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
22
- * This function can throw only if any of the event listeners or run function throws
23
- */
24
- public async initializeResource<
25
- TConfig = null,
26
- TValue extends Promise<any> = Promise<any>,
27
- TDeps extends DependencyMapType = {},
28
- TContext = any
29
- >(
30
- resource: IResource<TConfig, TValue, TDeps>,
31
- config: TConfig,
32
- dependencies: DependencyValuesType<TDeps>
33
- ): Promise<{ value: TValue; context: TContext }> {
34
- const context = resource.context?.();
35
- await this.eventManager.emit(
36
- globalEvents.resources.beforeInit,
37
- {
38
- config,
39
- resource,
40
- },
41
- resource.id
42
- );
43
-
44
- await this.eventManager.emit(
45
- resource.events.beforeInit,
46
- { config },
47
- resource.id
48
- );
49
-
50
- let error: any, value: TValue | undefined;
51
- try {
52
- if (resource.init) {
53
- value = await this.initWithMiddleware(
54
- resource,
55
- config,
56
- dependencies,
57
- context
58
- );
59
- }
60
-
61
- await this.eventManager.emit(
62
- resource.events.afterInit,
63
- {
64
- config,
65
- value: value as TValue,
66
- },
67
- resource.id
68
- );
69
- await this.eventManager.emit(
70
- globalEvents.resources.afterInit,
71
- {
72
- config,
73
- resource,
74
- value: value as TValue,
75
- },
76
- resource.id
77
- );
78
-
79
- this.logger.debug(`Resource ${resource.id.toString()} initialized`, {
80
- source: resource.id,
81
- });
82
-
83
- return { value: value as TValue, context };
84
- } catch (e) {
85
- error = e;
86
- let isSuppressed = false;
87
- function suppress() {
88
- isSuppressed = true;
89
- }
90
-
91
- // If you want to rewthrow the error, this should be done inside the onError event.
92
- await this.eventManager.emit(
93
- resource.events.onError,
94
- {
95
- error: error as Error,
96
- suppress,
97
- },
98
- resource.id
99
- );
100
- await this.eventManager.emit(
101
- globalEvents.resources.onError,
102
- {
103
- error: error as Error,
104
- resource,
105
- suppress,
106
- },
107
- resource.id
108
- );
109
-
110
- if (!isSuppressed) throw e;
111
-
112
- return { value: undefined as unknown as TValue, context: {} as TContext };
113
- }
114
- }
115
-
116
- public async initWithMiddleware<
117
- C,
118
- V extends Promise<any>,
119
- D extends DependencyMapType,
120
- TContext
121
- >(
122
- resource: IResource<C, V, D, TContext>,
123
- config: C,
124
- dependencies: DependencyValuesType<D>,
125
- context: TContext
126
- ) {
127
- let next = async (config: C): Promise<V | undefined> => {
128
- if (resource.init) {
129
- return resource.init.call(null, config, dependencies, context);
130
- }
131
- };
132
-
133
- const existingMiddlewares = resource.middleware;
134
- const createdMiddlewares = [
135
- ...this.store.getEverywhereMiddlewareForResources(
136
- existingMiddlewares.map((x) => x.id)
137
- ),
138
- ...existingMiddlewares,
139
- ];
140
-
141
- for (let i = createdMiddlewares.length - 1; i >= 0; i--) {
142
- const middleware = createdMiddlewares[i];
143
- const storeMiddleware = this.store.middlewares.get(
144
- middleware.id
145
- ) as MiddlewareStoreElementType; // we know it exists because at this stage all sanity checks have been done.
146
-
147
- const nextFunction = next;
148
- next = async (config: C) => {
149
- return storeMiddleware.middleware.run(
150
- {
151
- resource: {
152
- definition: resource,
153
- config,
154
- },
155
- next: nextFunction,
156
- },
157
- storeMiddleware.computedDependencies,
158
- middleware.config
159
- );
160
- };
161
- }
162
-
163
- return next(config);
164
- }
165
- }