@opensip-tools/fitness 1.0.4

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 (461) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-typecheck.log +4 -0
  3. package/LICENSE +21 -0
  4. package/dist/__tests__/gate.test.d.ts +13 -0
  5. package/dist/__tests__/gate.test.d.ts.map +1 -0
  6. package/dist/__tests__/gate.test.js +422 -0
  7. package/dist/__tests__/gate.test.js.map +1 -0
  8. package/dist/__tests__/sarif.test.d.ts +2 -0
  9. package/dist/__tests__/sarif.test.d.ts.map +1 -0
  10. package/dist/__tests__/sarif.test.js +169 -0
  11. package/dist/__tests__/sarif.test.js.map +1 -0
  12. package/dist/cli/dashboard.d.ts +6 -0
  13. package/dist/cli/dashboard.d.ts.map +1 -0
  14. package/dist/cli/dashboard.js +77 -0
  15. package/dist/cli/dashboard.js.map +1 -0
  16. package/dist/cli/fit.d.ts +37 -0
  17. package/dist/cli/fit.d.ts.map +1 -0
  18. package/dist/cli/fit.js +539 -0
  19. package/dist/cli/fit.js.map +1 -0
  20. package/dist/cli/list-checks.d.ts +6 -0
  21. package/dist/cli/list-checks.d.ts.map +1 -0
  22. package/dist/cli/list-checks.js +23 -0
  23. package/dist/cli/list-checks.js.map +1 -0
  24. package/dist/cli/list-recipes.d.ts +6 -0
  25. package/dist/cli/list-recipes.d.ts.map +1 -0
  26. package/dist/cli/list-recipes.js +31 -0
  27. package/dist/cli/list-recipes.js.map +1 -0
  28. package/dist/framework/__tests__/ast-utilities.test.d.ts +2 -0
  29. package/dist/framework/__tests__/ast-utilities.test.d.ts.map +1 -0
  30. package/dist/framework/__tests__/ast-utilities.test.js +153 -0
  31. package/dist/framework/__tests__/ast-utilities.test.js.map +1 -0
  32. package/dist/framework/__tests__/check-config.test.d.ts +2 -0
  33. package/dist/framework/__tests__/check-config.test.d.ts.map +1 -0
  34. package/dist/framework/__tests__/check-config.test.js +56 -0
  35. package/dist/framework/__tests__/check-config.test.js.map +1 -0
  36. package/dist/framework/__tests__/command-executor.test.d.ts +2 -0
  37. package/dist/framework/__tests__/command-executor.test.d.ts.map +1 -0
  38. package/dist/framework/__tests__/command-executor.test.js +71 -0
  39. package/dist/framework/__tests__/command-executor.test.js.map +1 -0
  40. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts +2 -0
  41. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
  42. package/dist/framework/__tests__/content-filter-dispatch.test.js +104 -0
  43. package/dist/framework/__tests__/content-filter-dispatch.test.js.map +1 -0
  44. package/dist/framework/__tests__/content-filter.test.d.ts +2 -0
  45. package/dist/framework/__tests__/content-filter.test.d.ts.map +1 -0
  46. package/dist/framework/__tests__/content-filter.test.js +126 -0
  47. package/dist/framework/__tests__/content-filter.test.js.map +1 -0
  48. package/dist/framework/__tests__/define-check.test.d.ts +2 -0
  49. package/dist/framework/__tests__/define-check.test.d.ts.map +1 -0
  50. package/dist/framework/__tests__/define-check.test.js +155 -0
  51. package/dist/framework/__tests__/define-check.test.js.map +1 -0
  52. package/dist/framework/__tests__/directive-inventory.test.d.ts +2 -0
  53. package/dist/framework/__tests__/directive-inventory.test.d.ts.map +1 -0
  54. package/dist/framework/__tests__/directive-inventory.test.js +44 -0
  55. package/dist/framework/__tests__/directive-inventory.test.js.map +1 -0
  56. package/dist/framework/__tests__/execution-context.test.d.ts +2 -0
  57. package/dist/framework/__tests__/execution-context.test.d.ts.map +1 -0
  58. package/dist/framework/__tests__/execution-context.test.js +62 -0
  59. package/dist/framework/__tests__/execution-context.test.js.map +1 -0
  60. package/dist/framework/__tests__/file-accessor.test.d.ts +2 -0
  61. package/dist/framework/__tests__/file-accessor.test.d.ts.map +1 -0
  62. package/dist/framework/__tests__/file-accessor.test.js +106 -0
  63. package/dist/framework/__tests__/file-accessor.test.js.map +1 -0
  64. package/dist/framework/__tests__/file-cache.test.d.ts +2 -0
  65. package/dist/framework/__tests__/file-cache.test.d.ts.map +1 -0
  66. package/dist/framework/__tests__/file-cache.test.js +122 -0
  67. package/dist/framework/__tests__/file-cache.test.js.map +1 -0
  68. package/dist/framework/__tests__/import-graph.test.d.ts +15 -0
  69. package/dist/framework/__tests__/import-graph.test.d.ts.map +1 -0
  70. package/dist/framework/__tests__/import-graph.test.js +164 -0
  71. package/dist/framework/__tests__/import-graph.test.js.map +1 -0
  72. package/dist/framework/__tests__/path-matcher.test.d.ts +2 -0
  73. package/dist/framework/__tests__/path-matcher.test.d.ts.map +1 -0
  74. package/dist/framework/__tests__/path-matcher.test.js +113 -0
  75. package/dist/framework/__tests__/path-matcher.test.js.map +1 -0
  76. package/dist/framework/__tests__/register-helpers.test.d.ts +2 -0
  77. package/dist/framework/__tests__/register-helpers.test.d.ts.map +1 -0
  78. package/dist/framework/__tests__/register-helpers.test.js +42 -0
  79. package/dist/framework/__tests__/register-helpers.test.js.map +1 -0
  80. package/dist/framework/__tests__/registry.test.d.ts +2 -0
  81. package/dist/framework/__tests__/registry.test.d.ts.map +1 -0
  82. package/dist/framework/__tests__/registry.test.js +208 -0
  83. package/dist/framework/__tests__/registry.test.js.map +1 -0
  84. package/dist/framework/__tests__/result-builder.test.d.ts +2 -0
  85. package/dist/framework/__tests__/result-builder.test.d.ts.map +1 -0
  86. package/dist/framework/__tests__/result-builder.test.js +153 -0
  87. package/dist/framework/__tests__/result-builder.test.js.map +1 -0
  88. package/dist/framework/__tests__/scope-resolver.test.d.ts +2 -0
  89. package/dist/framework/__tests__/scope-resolver.test.d.ts.map +1 -0
  90. package/dist/framework/__tests__/scope-resolver.test.js +140 -0
  91. package/dist/framework/__tests__/scope-resolver.test.js.map +1 -0
  92. package/dist/framework/__tests__/severity-mapping.test.d.ts +2 -0
  93. package/dist/framework/__tests__/severity-mapping.test.d.ts.map +1 -0
  94. package/dist/framework/__tests__/severity-mapping.test.js +42 -0
  95. package/dist/framework/__tests__/severity-mapping.test.js.map +1 -0
  96. package/dist/framework/__tests__/strip-literals.test.d.ts +2 -0
  97. package/dist/framework/__tests__/strip-literals.test.d.ts.map +1 -0
  98. package/dist/framework/__tests__/strip-literals.test.js +87 -0
  99. package/dist/framework/__tests__/strip-literals.test.js.map +1 -0
  100. package/dist/framework/abortable-exec.d.ts +34 -0
  101. package/dist/framework/abortable-exec.d.ts.map +1 -0
  102. package/dist/framework/abortable-exec.js +136 -0
  103. package/dist/framework/abortable-exec.js.map +1 -0
  104. package/dist/framework/ast-utilities.d.ts +41 -0
  105. package/dist/framework/ast-utilities.d.ts.map +1 -0
  106. package/dist/framework/ast-utilities.js +106 -0
  107. package/dist/framework/ast-utilities.js.map +1 -0
  108. package/dist/framework/check-config.d.ts +171 -0
  109. package/dist/framework/check-config.d.ts.map +1 -0
  110. package/dist/framework/check-config.js +114 -0
  111. package/dist/framework/check-config.js.map +1 -0
  112. package/dist/framework/check-types.d.ts +57 -0
  113. package/dist/framework/check-types.d.ts.map +1 -0
  114. package/dist/framework/check-types.js +35 -0
  115. package/dist/framework/check-types.js.map +1 -0
  116. package/dist/framework/command-executor.d.ts +25 -0
  117. package/dist/framework/command-executor.d.ts.map +1 -0
  118. package/dist/framework/command-executor.js +63 -0
  119. package/dist/framework/command-executor.js.map +1 -0
  120. package/dist/framework/constants.d.ts +9 -0
  121. package/dist/framework/constants.d.ts.map +1 -0
  122. package/dist/framework/constants.js +16 -0
  123. package/dist/framework/constants.js.map +1 -0
  124. package/dist/framework/content-filter.d.ts +33 -0
  125. package/dist/framework/content-filter.d.ts.map +1 -0
  126. package/dist/framework/content-filter.js +236 -0
  127. package/dist/framework/content-filter.js.map +1 -0
  128. package/dist/framework/define-check.d.ts +38 -0
  129. package/dist/framework/define-check.d.ts.map +1 -0
  130. package/dist/framework/define-check.js +252 -0
  131. package/dist/framework/define-check.js.map +1 -0
  132. package/dist/framework/directive-inventory.d.ts +34 -0
  133. package/dist/framework/directive-inventory.d.ts.map +1 -0
  134. package/dist/framework/directive-inventory.js +77 -0
  135. package/dist/framework/directive-inventory.js.map +1 -0
  136. package/dist/framework/directive-parsing.d.ts +20 -0
  137. package/dist/framework/directive-parsing.d.ts.map +1 -0
  138. package/dist/framework/directive-parsing.js +121 -0
  139. package/dist/framework/directive-parsing.js.map +1 -0
  140. package/dist/framework/execution-context.d.ts +95 -0
  141. package/dist/framework/execution-context.d.ts.map +1 -0
  142. package/dist/framework/execution-context.js +122 -0
  143. package/dist/framework/execution-context.js.map +1 -0
  144. package/dist/framework/file-accessor.d.ts +20 -0
  145. package/dist/framework/file-accessor.d.ts.map +1 -0
  146. package/dist/framework/file-accessor.js +122 -0
  147. package/dist/framework/file-accessor.js.map +1 -0
  148. package/dist/framework/file-cache.d.ts +70 -0
  149. package/dist/framework/file-cache.d.ts.map +1 -0
  150. package/dist/framework/file-cache.js +178 -0
  151. package/dist/framework/file-cache.js.map +1 -0
  152. package/dist/framework/file-type-filter.d.ts +11 -0
  153. package/dist/framework/file-type-filter.d.ts.map +1 -0
  154. package/dist/framework/file-type-filter.js +21 -0
  155. package/dist/framework/file-type-filter.js.map +1 -0
  156. package/dist/framework/ignore-processing.d.ts +22 -0
  157. package/dist/framework/ignore-processing.d.ts.map +1 -0
  158. package/dist/framework/ignore-processing.js +241 -0
  159. package/dist/framework/ignore-processing.js.map +1 -0
  160. package/dist/framework/import-graph.d.ts +51 -0
  161. package/dist/framework/import-graph.d.ts.map +1 -0
  162. package/dist/framework/import-graph.js +216 -0
  163. package/dist/framework/import-graph.js.map +1 -0
  164. package/dist/framework/memory-profiler.d.ts +53 -0
  165. package/dist/framework/memory-profiler.d.ts.map +1 -0
  166. package/dist/framework/memory-profiler.js +92 -0
  167. package/dist/framework/memory-profiler.js.map +1 -0
  168. package/dist/framework/parse-cache.d.ts +23 -0
  169. package/dist/framework/parse-cache.d.ts.map +1 -0
  170. package/dist/framework/parse-cache.js +37 -0
  171. package/dist/framework/parse-cache.js.map +1 -0
  172. package/dist/framework/path-matcher.d.ts +86 -0
  173. package/dist/framework/path-matcher.d.ts.map +1 -0
  174. package/dist/framework/path-matcher.js +138 -0
  175. package/dist/framework/path-matcher.js.map +1 -0
  176. package/dist/framework/register-helpers.d.ts +10 -0
  177. package/dist/framework/register-helpers.d.ts.map +1 -0
  178. package/dist/framework/register-helpers.js +17 -0
  179. package/dist/framework/register-helpers.js.map +1 -0
  180. package/dist/framework/registry.d.ts +41 -0
  181. package/dist/framework/registry.d.ts.map +1 -0
  182. package/dist/framework/registry.js +103 -0
  183. package/dist/framework/registry.js.map +1 -0
  184. package/dist/framework/result-builder.d.ts +74 -0
  185. package/dist/framework/result-builder.d.ts.map +1 -0
  186. package/dist/framework/result-builder.js +154 -0
  187. package/dist/framework/result-builder.js.map +1 -0
  188. package/dist/framework/scope-resolver.d.ts +23 -0
  189. package/dist/framework/scope-resolver.d.ts.map +1 -0
  190. package/dist/framework/scope-resolver.js +201 -0
  191. package/dist/framework/scope-resolver.js.map +1 -0
  192. package/dist/framework/severity-mapping.d.ts +13 -0
  193. package/dist/framework/severity-mapping.d.ts.map +1 -0
  194. package/dist/framework/severity-mapping.js +51 -0
  195. package/dist/framework/severity-mapping.js.map +1 -0
  196. package/dist/framework/strip-literals.d.ts +48 -0
  197. package/dist/framework/strip-literals.d.ts.map +1 -0
  198. package/dist/framework/strip-literals.js +188 -0
  199. package/dist/framework/strip-literals.js.map +1 -0
  200. package/dist/gate.d.ts +74 -0
  201. package/dist/gate.d.ts.map +1 -0
  202. package/dist/gate.js +257 -0
  203. package/dist/gate.js.map +1 -0
  204. package/dist/index.d.ts +47 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +51 -0
  207. package/dist/index.js.map +1 -0
  208. package/dist/plugins/__tests__/check-package-discovery.test.d.ts +2 -0
  209. package/dist/plugins/__tests__/check-package-discovery.test.d.ts.map +1 -0
  210. package/dist/plugins/__tests__/check-package-discovery.test.js +170 -0
  211. package/dist/plugins/__tests__/check-package-discovery.test.js.map +1 -0
  212. package/dist/plugins/__tests__/lang-domain.test.d.ts +2 -0
  213. package/dist/plugins/__tests__/lang-domain.test.d.ts.map +1 -0
  214. package/dist/plugins/__tests__/lang-domain.test.js +171 -0
  215. package/dist/plugins/__tests__/lang-domain.test.js.map +1 -0
  216. package/dist/plugins/__tests__/loader.test.d.ts +2 -0
  217. package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
  218. package/dist/plugins/__tests__/loader.test.js +194 -0
  219. package/dist/plugins/__tests__/loader.test.js.map +1 -0
  220. package/dist/plugins/check-package-discovery.d.ts +73 -0
  221. package/dist/plugins/check-package-discovery.d.ts.map +1 -0
  222. package/dist/plugins/check-package-discovery.js +212 -0
  223. package/dist/plugins/check-package-discovery.js.map +1 -0
  224. package/dist/plugins/loader.d.ts +31 -0
  225. package/dist/plugins/loader.d.ts.map +1 -0
  226. package/dist/plugins/loader.js +290 -0
  227. package/dist/plugins/loader.js.map +1 -0
  228. package/dist/plugins/types.d.ts +23 -0
  229. package/dist/plugins/types.d.ts.map +1 -0
  230. package/dist/plugins/types.js +9 -0
  231. package/dist/plugins/types.js.map +1 -0
  232. package/dist/recipes/__tests__/built-in-recipes.test.d.ts +2 -0
  233. package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
  234. package/dist/recipes/__tests__/built-in-recipes.test.js +93 -0
  235. package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
  236. package/dist/recipes/__tests__/check-config.test.d.ts +5 -0
  237. package/dist/recipes/__tests__/check-config.test.d.ts.map +1 -0
  238. package/dist/recipes/__tests__/check-config.test.js +37 -0
  239. package/dist/recipes/__tests__/check-config.test.js.map +1 -0
  240. package/dist/recipes/__tests__/check-resolution.test.d.ts +2 -0
  241. package/dist/recipes/__tests__/check-resolution.test.d.ts.map +1 -0
  242. package/dist/recipes/__tests__/check-resolution.test.js +135 -0
  243. package/dist/recipes/__tests__/check-resolution.test.js.map +1 -0
  244. package/dist/recipes/__tests__/registry.test.d.ts +2 -0
  245. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  246. package/dist/recipes/__tests__/registry.test.js +97 -0
  247. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  248. package/dist/recipes/__tests__/retry.test.d.ts +2 -0
  249. package/dist/recipes/__tests__/retry.test.d.ts.map +1 -0
  250. package/dist/recipes/__tests__/retry.test.js +75 -0
  251. package/dist/recipes/__tests__/retry.test.js.map +1 -0
  252. package/dist/recipes/__tests__/service.test.d.ts +11 -0
  253. package/dist/recipes/__tests__/service.test.d.ts.map +1 -0
  254. package/dist/recipes/__tests__/service.test.js +482 -0
  255. package/dist/recipes/__tests__/service.test.js.map +1 -0
  256. package/dist/recipes/built-in-recipes.d.ts +14 -0
  257. package/dist/recipes/built-in-recipes.d.ts.map +1 -0
  258. package/dist/recipes/built-in-recipes.js +247 -0
  259. package/dist/recipes/built-in-recipes.js.map +1 -0
  260. package/dist/recipes/check-config.d.ts +40 -0
  261. package/dist/recipes/check-config.d.ts.map +1 -0
  262. package/dist/recipes/check-config.js +61 -0
  263. package/dist/recipes/check-config.js.map +1 -0
  264. package/dist/recipes/check-resolution.d.ts +21 -0
  265. package/dist/recipes/check-resolution.d.ts.map +1 -0
  266. package/dist/recipes/check-resolution.js +121 -0
  267. package/dist/recipes/check-resolution.js.map +1 -0
  268. package/dist/recipes/check-result-processor.d.ts +51 -0
  269. package/dist/recipes/check-result-processor.d.ts.map +1 -0
  270. package/dist/recipes/check-result-processor.js +158 -0
  271. package/dist/recipes/check-result-processor.js.map +1 -0
  272. package/dist/recipes/parallel-execution.d.ts +33 -0
  273. package/dist/recipes/parallel-execution.d.ts.map +1 -0
  274. package/dist/recipes/parallel-execution.js +142 -0
  275. package/dist/recipes/parallel-execution.js.map +1 -0
  276. package/dist/recipes/registry.d.ts +81 -0
  277. package/dist/recipes/registry.d.ts.map +1 -0
  278. package/dist/recipes/registry.js +131 -0
  279. package/dist/recipes/registry.js.map +1 -0
  280. package/dist/recipes/retry.d.ts +25 -0
  281. package/dist/recipes/retry.d.ts.map +1 -0
  282. package/dist/recipes/retry.js +44 -0
  283. package/dist/recipes/retry.js.map +1 -0
  284. package/dist/recipes/sequential-execution.d.ts +10 -0
  285. package/dist/recipes/sequential-execution.d.ts.map +1 -0
  286. package/dist/recipes/sequential-execution.js +122 -0
  287. package/dist/recipes/sequential-execution.js.map +1 -0
  288. package/dist/recipes/service-types.d.ts +84 -0
  289. package/dist/recipes/service-types.d.ts.map +1 -0
  290. package/dist/recipes/service-types.js +8 -0
  291. package/dist/recipes/service-types.js.map +1 -0
  292. package/dist/recipes/service.d.ts +71 -0
  293. package/dist/recipes/service.d.ts.map +1 -0
  294. package/dist/recipes/service.js +331 -0
  295. package/dist/recipes/service.js.map +1 -0
  296. package/dist/recipes/types.d.ts +154 -0
  297. package/dist/recipes/types.d.ts.map +1 -0
  298. package/dist/recipes/types.js +54 -0
  299. package/dist/recipes/types.js.map +1 -0
  300. package/dist/sarif.d.ts +34 -0
  301. package/dist/sarif.d.ts.map +1 -0
  302. package/dist/sarif.js +192 -0
  303. package/dist/sarif.js.map +1 -0
  304. package/dist/signalers/__tests__/loader.test.d.ts +2 -0
  305. package/dist/signalers/__tests__/loader.test.d.ts.map +1 -0
  306. package/dist/signalers/__tests__/loader.test.js +74 -0
  307. package/dist/signalers/__tests__/loader.test.js.map +1 -0
  308. package/dist/signalers/index.d.ts +8 -0
  309. package/dist/signalers/index.d.ts.map +1 -0
  310. package/dist/signalers/index.js +9 -0
  311. package/dist/signalers/index.js.map +1 -0
  312. package/dist/signalers/loader.d.ts +24 -0
  313. package/dist/signalers/loader.d.ts.map +1 -0
  314. package/dist/signalers/loader.js +108 -0
  315. package/dist/signalers/loader.js.map +1 -0
  316. package/dist/signalers/schema.d.ts +288 -0
  317. package/dist/signalers/schema.d.ts.map +1 -0
  318. package/dist/signalers/schema.js +99 -0
  319. package/dist/signalers/schema.js.map +1 -0
  320. package/dist/signalers/types.d.ts +13 -0
  321. package/dist/signalers/types.d.ts.map +1 -0
  322. package/dist/signalers/types.js +5 -0
  323. package/dist/signalers/types.js.map +1 -0
  324. package/dist/targets/__tests__/loader.test.d.ts +2 -0
  325. package/dist/targets/__tests__/loader.test.d.ts.map +1 -0
  326. package/dist/targets/__tests__/loader.test.js +127 -0
  327. package/dist/targets/__tests__/loader.test.js.map +1 -0
  328. package/dist/targets/__tests__/resolver.test.d.ts +2 -0
  329. package/dist/targets/__tests__/resolver.test.d.ts.map +1 -0
  330. package/dist/targets/__tests__/resolver.test.js +54 -0
  331. package/dist/targets/__tests__/resolver.test.js.map +1 -0
  332. package/dist/targets/__tests__/target-registry.test.d.ts +2 -0
  333. package/dist/targets/__tests__/target-registry.test.d.ts.map +1 -0
  334. package/dist/targets/__tests__/target-registry.test.js +89 -0
  335. package/dist/targets/__tests__/target-registry.test.js.map +1 -0
  336. package/dist/targets/index.d.ts +10 -0
  337. package/dist/targets/index.d.ts.map +1 -0
  338. package/dist/targets/index.js +12 -0
  339. package/dist/targets/index.js.map +1 -0
  340. package/dist/targets/loader.d.ts +19 -0
  341. package/dist/targets/loader.d.ts.map +1 -0
  342. package/dist/targets/loader.js +159 -0
  343. package/dist/targets/loader.js.map +1 -0
  344. package/dist/targets/resolver.d.ts +19 -0
  345. package/dist/targets/resolver.d.ts.map +1 -0
  346. package/dist/targets/resolver.js +37 -0
  347. package/dist/targets/resolver.js.map +1 -0
  348. package/dist/targets/target-registry.d.ts +61 -0
  349. package/dist/targets/target-registry.d.ts.map +1 -0
  350. package/dist/targets/target-registry.js +93 -0
  351. package/dist/targets/target-registry.js.map +1 -0
  352. package/dist/targets/types.d.ts +85 -0
  353. package/dist/targets/types.d.ts.map +1 -0
  354. package/dist/targets/types.js +5 -0
  355. package/dist/targets/types.js.map +1 -0
  356. package/dist/tool.d.ts +17 -0
  357. package/dist/tool.d.ts.map +1 -0
  358. package/dist/tool.js +282 -0
  359. package/dist/tool.js.map +1 -0
  360. package/dist/types/findings.d.ts +117 -0
  361. package/dist/types/findings.d.ts.map +1 -0
  362. package/dist/types/findings.js +93 -0
  363. package/dist/types/findings.js.map +1 -0
  364. package/dist/types/severity.d.ts +15 -0
  365. package/dist/types/severity.d.ts.map +1 -0
  366. package/dist/types/severity.js +36 -0
  367. package/dist/types/severity.js.map +1 -0
  368. package/package.json +45 -0
  369. package/src/__tests__/gate.test.ts +537 -0
  370. package/src/__tests__/sarif.test.ts +201 -0
  371. package/src/cli/dashboard.ts +93 -0
  372. package/src/cli/fit.ts +612 -0
  373. package/src/cli/list-checks.ts +32 -0
  374. package/src/cli/list-recipes.ts +38 -0
  375. package/src/framework/__tests__/ast-utilities.test.ts +157 -0
  376. package/src/framework/__tests__/check-config.test.ts +65 -0
  377. package/src/framework/__tests__/command-executor.test.ts +79 -0
  378. package/src/framework/__tests__/content-filter-dispatch.test.ts +132 -0
  379. package/src/framework/__tests__/content-filter.test.ts +136 -0
  380. package/src/framework/__tests__/define-check.test.ts +180 -0
  381. package/src/framework/__tests__/directive-inventory.test.ts +53 -0
  382. package/src/framework/__tests__/execution-context.test.ts +80 -0
  383. package/src/framework/__tests__/file-accessor.test.ts +121 -0
  384. package/src/framework/__tests__/file-cache.test.ts +142 -0
  385. package/src/framework/__tests__/import-graph.test.ts +282 -0
  386. package/src/framework/__tests__/path-matcher.test.ts +130 -0
  387. package/src/framework/__tests__/register-helpers.test.ts +51 -0
  388. package/src/framework/__tests__/registry.test.ts +243 -0
  389. package/src/framework/__tests__/result-builder.test.ts +178 -0
  390. package/src/framework/__tests__/scope-resolver.test.ts +208 -0
  391. package/src/framework/__tests__/severity-mapping.test.ts +50 -0
  392. package/src/framework/__tests__/strip-literals.test.ts +109 -0
  393. package/src/framework/abortable-exec.ts +177 -0
  394. package/src/framework/ast-utilities.ts +112 -0
  395. package/src/framework/check-config.ts +339 -0
  396. package/src/framework/check-types.ts +77 -0
  397. package/src/framework/command-executor.ts +100 -0
  398. package/src/framework/constants.ts +16 -0
  399. package/src/framework/content-filter.ts +288 -0
  400. package/src/framework/define-check.ts +336 -0
  401. package/src/framework/directive-inventory.ts +110 -0
  402. package/src/framework/directive-parsing.ts +152 -0
  403. package/src/framework/execution-context.ts +247 -0
  404. package/src/framework/file-accessor.ts +171 -0
  405. package/src/framework/file-cache.ts +220 -0
  406. package/src/framework/file-type-filter.ts +25 -0
  407. package/src/framework/ignore-processing.ts +350 -0
  408. package/src/framework/import-graph.ts +280 -0
  409. package/src/framework/memory-profiler.ts +145 -0
  410. package/src/framework/parse-cache.ts +38 -0
  411. package/src/framework/path-matcher.ts +191 -0
  412. package/src/framework/register-helpers.ts +20 -0
  413. package/src/framework/registry.ts +125 -0
  414. package/src/framework/result-builder.ts +225 -0
  415. package/src/framework/scope-resolver.ts +262 -0
  416. package/src/framework/severity-mapping.ts +56 -0
  417. package/src/framework/strip-literals.ts +200 -0
  418. package/src/gate.ts +337 -0
  419. package/src/index.ts +110 -0
  420. package/src/plugins/__tests__/check-package-discovery.test.ts +204 -0
  421. package/src/plugins/__tests__/lang-domain.test.ts +198 -0
  422. package/src/plugins/__tests__/loader.test.ts +226 -0
  423. package/src/plugins/check-package-discovery.ts +242 -0
  424. package/src/plugins/loader.ts +327 -0
  425. package/src/plugins/types.ts +25 -0
  426. package/src/recipes/__tests__/built-in-recipes.test.ts +107 -0
  427. package/src/recipes/__tests__/check-config.test.ts +51 -0
  428. package/src/recipes/__tests__/check-resolution.test.ts +185 -0
  429. package/src/recipes/__tests__/registry.test.ts +115 -0
  430. package/src/recipes/__tests__/retry.test.ts +83 -0
  431. package/src/recipes/__tests__/service.test.ts +572 -0
  432. package/src/recipes/built-in-recipes.ts +273 -0
  433. package/src/recipes/check-config.ts +64 -0
  434. package/src/recipes/check-resolution.ts +169 -0
  435. package/src/recipes/check-result-processor.ts +258 -0
  436. package/src/recipes/parallel-execution.ts +220 -0
  437. package/src/recipes/registry.ts +192 -0
  438. package/src/recipes/retry.ts +69 -0
  439. package/src/recipes/sequential-execution.ts +139 -0
  440. package/src/recipes/service-types.ts +105 -0
  441. package/src/recipes/service.ts +400 -0
  442. package/src/recipes/types.ts +247 -0
  443. package/src/sarif.ts +232 -0
  444. package/src/signalers/__tests__/loader.test.ts +99 -0
  445. package/src/signalers/index.ts +9 -0
  446. package/src/signalers/loader.ts +141 -0
  447. package/src/signalers/schema.ts +117 -0
  448. package/src/signalers/types.ts +15 -0
  449. package/src/targets/__tests__/loader.test.ts +170 -0
  450. package/src/targets/__tests__/resolver.test.ts +74 -0
  451. package/src/targets/__tests__/target-registry.test.ts +103 -0
  452. package/src/targets/index.ts +13 -0
  453. package/src/targets/loader.ts +214 -0
  454. package/src/targets/resolver.ts +44 -0
  455. package/src/targets/target-registry.ts +111 -0
  456. package/src/targets/types.ts +89 -0
  457. package/src/tool.ts +302 -0
  458. package/src/types/findings.ts +239 -0
  459. package/src/types/severity.ts +39 -0
  460. package/tsconfig.json +8 -0
  461. package/vitest.config.ts +33 -0
@@ -0,0 +1,44 @@
1
+ // @fitness-ignore-file error-handling-suite -- catch blocks delegate errors through established patterns
2
+ /**
3
+ * @fileoverview Retry logic for fitness check execution
4
+ *
5
+ * Provides exponential backoff retry wrapper for transient check failures.
6
+ */
7
+ import { CheckAbortedError } from '../framework/execution-context.js';
8
+ const BACKOFF_DELAYS_MS = [1000, 2000];
9
+ function backoff(attempt) {
10
+ const delay = BACKOFF_DELAYS_MS[attempt] ?? BACKOFF_DELAYS_MS.at(-1) ?? 2000;
11
+ return new Promise((resolve) => setTimeout(resolve, delay));
12
+ }
13
+ /**
14
+ * Execute a function with retry logic.
15
+ * Only retries when the function throws. CheckAbortedError is never retried.
16
+ */
17
+ export async function executeWithRetry(fn, options) {
18
+ try {
19
+ const result = await fn();
20
+ return { result, lastError: undefined, retryCount: 0, wasRetried: false };
21
+ }
22
+ catch (firstError) {
23
+ if (firstError instanceof CheckAbortedError) {
24
+ return { result: undefined, lastError: firstError, retryCount: 0, wasRetried: false };
25
+ }
26
+ if (!options.enabled || options.maxRetries <= 0) {
27
+ return { result: undefined, lastError: firstError, retryCount: 0, wasRetried: false };
28
+ }
29
+ let lastError = firstError;
30
+ for (let attempt = 0; attempt < options.maxRetries; attempt++) {
31
+ // @fitness-ignore-next-line performance-anti-patterns -- sequential retry with backoff is inherently serial
32
+ await backoff(attempt);
33
+ try {
34
+ const result = await fn();
35
+ return { result, lastError: undefined, retryCount: attempt + 1, wasRetried: true };
36
+ }
37
+ catch (retryError) {
38
+ lastError = retryError;
39
+ }
40
+ }
41
+ return { result: undefined, lastError, retryCount: options.maxRetries, wasRetried: true };
42
+ }
43
+ }
44
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/recipes/retry.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAU,CAAA;AAkB/C,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC5E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,OAAqB;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;QACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;IAC3E,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,IAAI,UAAU,YAAY,iBAAiB,EAAE,CAAC;YAC5C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QACvF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QACvF,CAAC;QAED,IAAI,SAAS,GAAY,UAAU,CAAA;QAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,4GAA4G;YAC5G,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;YAEtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;gBACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;YACpF,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,SAAS,GAAG,UAAU,CAAA;YACxB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;IAC3F,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fileoverview Sequential execution engine for fitness recipe checks
3
+ *
4
+ * Runs fitness checks one at a time with per-check timeouts,
5
+ * abort support, and retry logic.
6
+ */
7
+ import type { ExecutionOptions, ExecutionServiceContext } from './parallel-execution.js';
8
+ /** Execute fitness checks sequentially with per-check timeouts and retry support */
9
+ export declare function executeSequential(ctx: ExecutionServiceContext, opts: ExecutionOptions): Promise<void>;
10
+ //# sourceMappingURL=sequential-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequential-execution.d.ts","sourceRoot":"","sources":["../../src/recipes/sequential-execution.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAMxF,oFAAoF;AAEpF,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH3G"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @fileoverview Sequential execution engine for fitness recipe checks
3
+ *
4
+ * Runs fitness checks one at a time with per-check timeouts,
5
+ * abort support, and retry logic.
6
+ */
7
+ import { TimeoutError } from '@opensip-tools/core';
8
+ import { memoryProfiler } from '../framework/memory-profiler.js';
9
+ import { processSuccessResult, processErrorResult, } from './check-result-processor.js';
10
+ import { executeWithRetry } from './retry.js';
11
+ // =============================================================================
12
+ // SEQUENTIAL EXECUTION
13
+ // =============================================================================
14
+ /** Execute fitness checks sequentially with per-check timeouts and retry support */
15
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- Inherent complexity: sequential check execution with per-check timeouts, abort signal handling, file matching, error recovery, and progress callbacks
16
+ export async function executeSequential(ctx, opts) {
17
+ const { checks, cwd, recipe, checkTargetFiles, globalExcludes } = opts;
18
+ const { session, callbacks, abortController } = ctx;
19
+ const recipeTimeout = recipe.execution.timeout ?? 30_000;
20
+ const totalChecks = checks.length;
21
+ const processorCtx = { session, callbacks, recipe, includeViolations: ctx.includeViolations ?? false };
22
+ // @fitness-ignore-next-line file-length-limits -- Sequential check execution loop: orchestrates check lifecycle (start, run, retry, complete) callbacks
23
+ for (const [i, check] of checks.entries()) {
24
+ if (abortController?.signal.aborted)
25
+ break;
26
+ if (!check)
27
+ continue;
28
+ const checkId = check.config.id;
29
+ const checkSlug = check.config.slug;
30
+ const timeout = check.config.timeout ?? recipeTimeout;
31
+ void callbacks.onCheckStart?.(checkSlug, i + 1, totalChecks);
32
+ const checkAbortController = new AbortController();
33
+ const memoryBeforeMB = memoryProfiler.recordCheckStart();
34
+ const startTime = Date.now();
35
+ let timedOut = false;
36
+ const timeoutId = setTimeout(() => {
37
+ timedOut = true;
38
+ checkAbortController.abort();
39
+ }, timeout);
40
+ try {
41
+ const retryResult = await executeWithRetry(() => {
42
+ const targetFiles = checkTargetFiles?.get(check.config.slug);
43
+ return check.run(cwd, {
44
+ signal: checkAbortController.signal,
45
+ ...(targetFiles ? { targetFiles } : {}),
46
+ ...(globalExcludes ? { globalExcludes } : {}),
47
+ });
48
+ }, {
49
+ enabled: recipe.execution.retryOnFailure ?? false,
50
+ maxRetries: recipe.execution.maxRetries ?? 2,
51
+ checkId,
52
+ checkSlug,
53
+ });
54
+ clearTimeout(timeoutId);
55
+ if (checkAbortController.signal.aborted) {
56
+ const durationMs = Date.now() - startTime;
57
+ const output = processErrorResult(processorCtx, {
58
+ checkId,
59
+ checkSlug,
60
+ checkIndex: i + 1,
61
+ totalChecks,
62
+ error: new TimeoutError(`Check ${checkId} timed out after ${timeout}ms`, timeout),
63
+ durationMs,
64
+ memoryBeforeMB,
65
+ timedOut: true,
66
+ timeoutMs: timeout,
67
+ });
68
+ if (output.shouldStop)
69
+ break;
70
+ continue;
71
+ }
72
+ if (retryResult.result === undefined) {
73
+ const durationMs = Date.now() - startTime;
74
+ const output = processErrorResult(processorCtx, {
75
+ checkId,
76
+ checkSlug,
77
+ checkIndex: i + 1,
78
+ totalChecks,
79
+ error: retryResult.lastError,
80
+ durationMs,
81
+ memoryBeforeMB,
82
+ timedOut: false,
83
+ });
84
+ if (output.shouldStop)
85
+ break;
86
+ continue;
87
+ }
88
+ const durationMs = Date.now() - startTime;
89
+ const output = processSuccessResult(processorCtx, {
90
+ checkId,
91
+ checkSlug,
92
+ tags: check.config.tags ?? [],
93
+ checkIndex: i + 1,
94
+ totalChecks,
95
+ result: retryResult.result,
96
+ durationMs,
97
+ memoryBeforeMB,
98
+ });
99
+ if (output.shouldStop)
100
+ break;
101
+ }
102
+ catch (error) {
103
+ clearTimeout(timeoutId);
104
+ const durationMs = Date.now() - startTime;
105
+ const isTimeout = timedOut || checkAbortController.signal.aborted;
106
+ const output = processErrorResult(processorCtx, {
107
+ checkId,
108
+ checkSlug,
109
+ checkIndex: i + 1,
110
+ totalChecks,
111
+ error,
112
+ durationMs,
113
+ memoryBeforeMB,
114
+ timedOut: isTimeout,
115
+ ...(isTimeout ? { timeoutMs: timeout } : {}),
116
+ });
117
+ if (output.shouldStop)
118
+ break;
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=sequential-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequential-execution.js","sourceRoot":"","sources":["../../src/recipes/sequential-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @fileoverview Service-layer type definitions for fitness recipe execution
3
+ *
4
+ * Defines the configuration, session state, and callback types
5
+ * used by FitnessRecipeService and its execution engines.
6
+ */
7
+ import type { FitnessRecipeRegistry } from './registry.js';
8
+ import type { FitnessRecipe, FitnessRecipeResult, RecipeCheckResult, IgnoresByType } from './types.js';
9
+ import type { DirectiveEntry } from '../framework/directive-inventory.js';
10
+ import type { CheckMemoryProfile } from '../framework/memory-profiler.js';
11
+ import type { CheckRegistry } from '../framework/registry.js';
12
+ /** Summary of a single check execution for callback reporting */
13
+ export interface CheckSummary {
14
+ readonly checkId: string;
15
+ readonly checkSlug: string;
16
+ readonly passed: boolean;
17
+ readonly errors: number;
18
+ readonly warnings: number;
19
+ readonly durationMs: number;
20
+ readonly filesScanned: number;
21
+ readonly ignoredCount: number;
22
+ readonly memoryProfile: CheckMemoryProfile;
23
+ readonly timedOut?: boolean;
24
+ readonly errorMessage?: string;
25
+ }
26
+ /** Callbacks invoked during recipe execution for progress and errors */
27
+ export interface FitnessRecipeServiceCallbacks {
28
+ onCheckStart?: (checkSlug: string, index: number, total: number) => void;
29
+ onCheckComplete?: (checkSlug: string, summary: CheckSummary, index: number, total: number) => void;
30
+ onError?: (checkSlug: string, error: Error) => void;
31
+ onMemoryWarning?: (checkId: string, profile: CheckMemoryProfile) => void;
32
+ onComplete?: (result: FitnessRecipeResult) => void;
33
+ /** Called before execution with all registered checks for catalog sync. */
34
+ onCatalogSync?: (entries: {
35
+ id: string;
36
+ slug: string;
37
+ tags: readonly string[];
38
+ description: string;
39
+ }[]) => void;
40
+ }
41
+ /** Configuration for the fitness recipe service */
42
+ export interface FitnessRecipeServiceConfig {
43
+ cwd?: string;
44
+ prewarmCache?: boolean;
45
+ prewarmPatterns?: string[];
46
+ callbacks?: FitnessRecipeServiceCallbacks;
47
+ /** Per-check pre-resolved file paths from target overrides. Map of check slug → absolute file paths. */
48
+ checkTargetFiles?: ReadonlyMap<string, readonly string[]>;
49
+ /** Optional check registry (defaults to defaultRegistry). */
50
+ checkRegistry?: CheckRegistry;
51
+ /** Optional recipe registry (defaults to defaultRecipeRegistry). */
52
+ recipeRegistry?: FitnessRecipeRegistry;
53
+ /** Check slugs disabled via opensip.config.yml — these checks are skipped unless force-included by a recipe. */
54
+ disabledChecks?: readonly string[];
55
+ /** When true, carry violation details on RecipeCheckResult. */
56
+ includeViolations?: boolean;
57
+ /**
58
+ * Run-wide file exclusion patterns from `opensip-tools.config.yml`'s
59
+ * top-level `globalExcludes`. Threaded into each check's RunOptions
60
+ * so the matchFiles() fallback honors them — without this, scope-empty
61
+ * checks scan every prewarmed file. Should be the same array passed
62
+ * to `loadTargetsConfig`.
63
+ */
64
+ globalExcludes?: readonly string[];
65
+ }
66
+ /** Mutable session state tracking progress during a recipe execution */
67
+ export interface FitnessRecipeSession {
68
+ readonly sessionId: string;
69
+ readonly recipe: FitnessRecipe;
70
+ readonly startedAt: Date;
71
+ status: 'running' | 'completed' | 'failed';
72
+ totalChecks: number;
73
+ completedChecks: number;
74
+ passedChecks: number;
75
+ failedChecks: number;
76
+ totalErrors: number;
77
+ totalWarnings: number;
78
+ totalIgnored: number;
79
+ ignoresByTag: Map<string, number>;
80
+ checkResults: RecipeCheckResult[];
81
+ ignoreCounts?: IgnoresByType | undefined;
82
+ directives: DirectiveEntry[];
83
+ }
84
+ //# sourceMappingURL=service-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-types.d.ts","sourceRoot":"","sources":["../../src/recipes/service-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAO7D,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAA;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAMD,wEAAwE;AACxE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClG,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACxE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAClD,2EAA2E;IAC3E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,CAAA;CAChH;AAMD,mDAAmD;AACnD,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,CAAC,EAAE,6BAA6B,CAAA;IACzC,wGAAwG;IACxG,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IACzD,6DAA6D;IAC7D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,oEAAoE;IACpE,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,gHAAgH;IAChH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAMD,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IACxC,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Service-layer type definitions for fitness recipe execution
3
+ *
4
+ * Defines the configuration, session state, and callback types
5
+ * used by FitnessRecipeService and its execution engines.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=service-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-types.js","sourceRoot":"","sources":["../../src/recipes/service-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @fileoverview Central orchestrator for fitness recipe execution
3
+ *
4
+ * FitnessRecipeService resolves checks, manages session lifecycle,
5
+ * coordinates parallel/sequential execution, and builds results.
6
+ */
7
+ import { type FitnessRecipe, type FitnessRecipeResult } from './types.js';
8
+ import type { FitnessRecipeServiceCallbacks, FitnessRecipeServiceConfig, FitnessRecipeSession } from './service-types.js';
9
+ /**
10
+ * Central orchestrator for fitness check execution.
11
+ */
12
+ export declare class FitnessRecipeService {
13
+ private readonly config;
14
+ private readonly checkRegistry;
15
+ private readonly recipeRegistry;
16
+ private activeSession;
17
+ private abortController?;
18
+ constructor(config?: FitnessRecipeServiceConfig);
19
+ private get session();
20
+ /**
21
+ * Execute a fitness recipe by name or recipe object.
22
+ *
23
+ * Resolves checks, prewarms the file cache, runs checks in parallel or sequential mode,
24
+ * then builds and returns a {@link FitnessRecipeResult}. Only one session can be active
25
+ * at a time — call {@link abort} to cancel a running session.
26
+ *
27
+ * @param recipeOrName - A recipe name (looked up in the recipe registry) or a FitnessRecipe object.
28
+ * @returns The result of the recipe execution including per-check results and summary.
29
+ * @throws {SystemError} If a session is already in progress.
30
+ * @throws {NotFoundError} If the recipe name is not found in the registry.
31
+ */
32
+ start(recipeOrName: FitnessRecipe | string): Promise<FitnessRecipeResult>;
33
+ private executeRecipe;
34
+ private collectAppliedDirectives;
35
+ private createSession;
36
+ private resolveAndFilterChecks;
37
+ private prepareExecution;
38
+ private buildResult;
39
+ /**
40
+ * Convert CLI arguments to an ad-hoc FitnessRecipe.
41
+ */
42
+ static createAdHocRecipe(args: {
43
+ check?: string;
44
+ tagFilters?: string[];
45
+ file?: string;
46
+ parallel?: boolean;
47
+ json?: boolean;
48
+ unified?: boolean;
49
+ verbose?: boolean;
50
+ retry?: boolean;
51
+ maxRetries?: number;
52
+ maxParallel?: number;
53
+ timeout?: number;
54
+ successThreshold?: number;
55
+ }): FitnessRecipe;
56
+ /** Get the currently active session, or null if no recipe is running. */
57
+ getActiveSession(): FitnessRecipeSession | null;
58
+ /** Abort the currently running recipe execution. No-op if no session is active. */
59
+ abort(): void;
60
+ /** List all available recipes from the recipe registry. */
61
+ listRecipes(): readonly FitnessRecipe[];
62
+ /**
63
+ * Look up a recipe by name or ID.
64
+ * @param nameOrId - The recipe name or full recipe ID (e.g. "default" or "RCP_default").
65
+ * @returns The recipe if found, undefined otherwise.
66
+ */
67
+ getRecipe(nameOrId: string): FitnessRecipe | undefined;
68
+ protected generateSessionId(): string;
69
+ protected get callbacks(): FitnessRecipeServiceCallbacks;
70
+ }
71
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/recipes/service.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAYH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAEzB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AA2B3B;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAE7B,MAAM,CAAC,EAAE,0BAA0B;IAM/C,OAAO,KAAK,OAAO,GAKlB;IAED;;;;;;;;;;;OAWG;IAEG,KAAK,CAAC,YAAY,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAgBjE,aAAa;IAkE3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,sBAAsB;YAuChB,gBAAgB;IAsB9B,OAAO,CAAC,WAAW;IAqCnB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;QACrB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,GAAG,aAAa;IA4CjB,yEAAyE;IACzE,gBAAgB,IAAI,oBAAoB,GAAG,IAAI;IAI/C,mFAAmF;IACnF,KAAK,IAAI,IAAI;IAIb,2DAA2D;IAC3D,WAAW,IAAI,SAAS,aAAa,EAAE;IAIvC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAItD,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,KAAK,SAAS,IAAI,6BAA6B,CAEvD;CACF"}