@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,74 @@
1
+ /**
2
+ * @fileoverview ResultBuilder - Builder pattern for check results
3
+ *
4
+ * Provides a fluent API for constructing check results with signals,
5
+ * metadata, and display information.
6
+ */
7
+ import type { CheckResult, ItemType } from '../types/findings.js';
8
+ import type { Signal } from '@opensip-tools/core';
9
+ /**
10
+ * Options for building results.
11
+ */
12
+ export interface ResultBuilderOptions {
13
+ /** Check ID */
14
+ readonly checkId: string;
15
+ /** Item type for display (files, modules, etc.) */
16
+ readonly itemType: ItemType;
17
+ /** Custom unit label (overrides itemType) */
18
+ readonly unit?: string | undefined;
19
+ }
20
+ /**
21
+ * Builder for constructing check results.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const result = ResultBuilder.create({ checkId: 'my-check', itemType: 'files' })
26
+ * .totalItems(100)
27
+ * .addSignal(signal1)
28
+ * .build();
29
+ * ```
30
+ */
31
+ export declare class ResultBuilder {
32
+ private readonly options;
33
+ private _totalItems;
34
+ private readonly _signals;
35
+ private _ignoredCount;
36
+ private _durationMs?;
37
+ private _filesScanned?;
38
+ private _extra?;
39
+ private constructor();
40
+ static create(options: ResultBuilderOptions): ResultBuilder;
41
+ totalItems(count: number): this;
42
+ filesScanned(count: number): this;
43
+ addSignal(signal: Signal): this;
44
+ addSignals(signals: readonly Signal[]): this;
45
+ ignoredCount(count: number): this;
46
+ incrementIgnored(by?: number): this;
47
+ duration(ms: number): this;
48
+ extra(data: Record<string, unknown>): this;
49
+ build(): CheckResult;
50
+ buildError(message: string, error?: Error): CheckResult;
51
+ private buildInfo;
52
+ private getUniqueFileCount;
53
+ get signalCount(): number;
54
+ get errorCount(): number;
55
+ get warningCount(): number;
56
+ get hasSignals(): boolean;
57
+ get willPass(): boolean;
58
+ }
59
+ /**
60
+ * Extract a code snippet with context lines around a target line.
61
+ */
62
+ export declare function extractSnippet(content: string, line: number, contextLines?: number): {
63
+ snippet: string;
64
+ contextLines: number;
65
+ };
66
+ /**
67
+ * Get line number from content string and character index.
68
+ */
69
+ export declare function getLineNumber(content: string, index: number): number;
70
+ /**
71
+ * Check if a file path matches API file patterns.
72
+ */
73
+ export declare function isAPIFile(filePath: string): boolean;
74
+ //# sourceMappingURL=result-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-builder.d.ts","sourceRoot":"","sources":["../../src/framework/result-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EACV,WAAW,EAEX,QAAQ,EACT,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe;IACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IAQJ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5C,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAQ;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAyB;IAExC,OAAO;IAEP,MAAM,CAAC,MAAM,CACX,OAAO,EAAE,oBAAoB,GAC5B,aAAa;IAIhB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAQ5C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,gBAAgB,CAAC,EAAE,SAAI,GAAG,IAAI;IAK9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK1B,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK1C,KAAK,IAAI,WAAW;IAqCpB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW;IAIvD,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,kBAAkB;IAK1B,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,SAAI,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAO3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAOD;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAInD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @fileoverview ResultBuilder - Builder pattern for check results
3
+ *
4
+ * Provides a fluent API for constructing check results with signals,
5
+ * metadata, and display information.
6
+ */
7
+ import { CheckInfoFactory, createResultWithSignals, createErrorResult, getItemTypeLabel, } from '../types/findings.js';
8
+ import { countErrors, countWarnings } from '../types/severity.js';
9
+ /**
10
+ * Builder for constructing check results.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const result = ResultBuilder.create({ checkId: 'my-check', itemType: 'files' })
15
+ * .totalItems(100)
16
+ * .addSignal(signal1)
17
+ * .build();
18
+ * ```
19
+ */
20
+ export class ResultBuilder {
21
+ options;
22
+ _totalItems = 0;
23
+ _signals = [];
24
+ _ignoredCount = 0;
25
+ _durationMs;
26
+ _filesScanned;
27
+ _extra;
28
+ constructor(options) {
29
+ this.options = options;
30
+ }
31
+ static create(options) {
32
+ return new ResultBuilder(options);
33
+ }
34
+ totalItems(count) {
35
+ this._totalItems = count;
36
+ return this;
37
+ }
38
+ filesScanned(count) {
39
+ this._filesScanned = count;
40
+ return this;
41
+ }
42
+ addSignal(signal) {
43
+ this._signals.push(signal);
44
+ return this;
45
+ }
46
+ addSignals(signals) {
47
+ if (signals.length === 0) {
48
+ return this;
49
+ }
50
+ this._signals.push(...signals);
51
+ return this;
52
+ }
53
+ ignoredCount(count) {
54
+ this._ignoredCount = count;
55
+ return this;
56
+ }
57
+ incrementIgnored(by = 1) {
58
+ this._ignoredCount += by;
59
+ return this;
60
+ }
61
+ duration(ms) {
62
+ this._durationMs = ms;
63
+ return this;
64
+ }
65
+ extra(data) {
66
+ this._extra = { ...this._extra, ...data };
67
+ return this;
68
+ }
69
+ build() {
70
+ const unit = this.options.unit ?? this.options.itemType;
71
+ const errors = countErrors(this._signals);
72
+ const warnings = countWarnings(this._signals);
73
+ const info = this.buildInfo(errors, warnings, unit);
74
+ const buildOptions = {};
75
+ if (this._ignoredCount > 0) {
76
+ buildOptions.ignoredCount = this._ignoredCount;
77
+ }
78
+ if (this._durationMs !== undefined) {
79
+ buildOptions.durationMs = this._durationMs;
80
+ }
81
+ if (this._filesScanned !== undefined) {
82
+ buildOptions.filesScanned = this._filesScanned;
83
+ }
84
+ buildOptions.itemType = this.options.itemType;
85
+ if (this._extra !== undefined) {
86
+ buildOptions.extra = this._extra;
87
+ }
88
+ return createResultWithSignals(info, this._signals, this._totalItems, Object.keys(buildOptions).length > 0 ? buildOptions : undefined);
89
+ }
90
+ buildError(message, error) {
91
+ return createErrorResult(message, error);
92
+ }
93
+ buildInfo(errors, warnings, unit) {
94
+ if (this._totalItems > 0) {
95
+ // Clamp to 0: analyzeAll-mode checks can surface violations against
96
+ // files outside the scanned set, which would otherwise produce a
97
+ // negative "-N/M compliant" label.
98
+ const compliantItems = Math.max(0, this._totalItems - this.getUniqueFileCount());
99
+ return CheckInfoFactory.compliance(compliantItems, this._totalItems, unit);
100
+ }
101
+ const total = errors + warnings;
102
+ return CheckInfoFactory.violations(total, getItemTypeLabel('violations', total));
103
+ }
104
+ getUniqueFileCount() {
105
+ const files = new Set(this._signals.map((s) => s.code?.file).filter(Boolean));
106
+ return files.size;
107
+ }
108
+ get signalCount() {
109
+ return this._signals.length;
110
+ }
111
+ get errorCount() {
112
+ return countErrors(this._signals);
113
+ }
114
+ get warningCount() {
115
+ return countWarnings(this._signals);
116
+ }
117
+ get hasSignals() {
118
+ return this._signals.length > 0;
119
+ }
120
+ get willPass() {
121
+ return this.errorCount === 0;
122
+ }
123
+ }
124
+ // =============================================================================
125
+ // SNIPPET UTILITIES
126
+ // =============================================================================
127
+ /**
128
+ * Extract a code snippet with context lines around a target line.
129
+ */
130
+ export function extractSnippet(content, line, contextLines = 2) {
131
+ const lines = content.split('\n');
132
+ const startLine = Math.max(0, line - 1 - contextLines);
133
+ const endLine = Math.min(lines.length, line + contextLines);
134
+ const snippetLines = lines.slice(startLine, endLine);
135
+ const snippet = snippetLines.map((l, i) => `${startLine + i + 1} | ${l}`).join('\n');
136
+ return { snippet, contextLines };
137
+ }
138
+ /**
139
+ * Get line number from content string and character index.
140
+ */
141
+ export function getLineNumber(content, index) {
142
+ return content.slice(0, Math.max(0, index)).split('\n').length;
143
+ }
144
+ /**
145
+ * Default patterns for identifying API-related files.
146
+ */
147
+ const DEFAULT_API_FILE_PATTERNS = ['/api/', '/routes/', '-handler.ts', '.handler.ts'];
148
+ /**
149
+ * Check if a file path matches API file patterns.
150
+ */
151
+ export function isAPIFile(filePath) {
152
+ return DEFAULT_API_FILE_PATTERNS.some((pattern) => pattern.startsWith('/') ? filePath.includes(pattern) : filePath.endsWith(pattern));
153
+ }
154
+ //# sourceMappingURL=result-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-builder.js","sourceRoot":"","sources":["../../src/framework/result-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Scope-based file resolution for fitness checks
3
+ *
4
+ * Checks declare intent (languages + concerns), targets declare reality
5
+ * (languages + concerns + globs), and this module resolves the match.
6
+ *
7
+ * Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
8
+ * Per-check resolution is a pure in-memory lookup — no redundant I/O.
9
+ */
10
+ import type { CheckScope } from './check-config.js';
11
+ import type { TargetRegistry } from '../targets/target-registry.js';
12
+ import type { TargetsConfig } from '../targets/types.js';
13
+ /**
14
+ * Build the complete check-to-files map for all checks with scopes or overrides.
15
+ *
16
+ * All targets are globbed once upfront. Per-check resolution is a pure
17
+ * in-memory lookup against the pre-resolved file lists.
18
+ */
19
+ export declare function buildScopeBasedFileMap(checks: readonly {
20
+ slug: string;
21
+ scope?: CheckScope;
22
+ }[], registry: TargetRegistry, config: TargetsConfig, rootDir: string): Map<string, readonly string[]>;
23
+ //# sourceMappingURL=scope-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolver.d.ts","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAU,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA0NhE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,EAAE,EACvD,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAehC"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * @fileoverview Scope-based file resolution for fitness checks
3
+ *
4
+ * Checks declare intent (languages + concerns), targets declare reality
5
+ * (languages + concerns + globs), and this module resolves the match.
6
+ *
7
+ * Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
8
+ * Per-check resolution is a pure in-memory lookup — no redundant I/O.
9
+ */
10
+ import { relative, resolve } from 'node:path';
11
+ import { globSync } from 'glob';
12
+ import { minimatch, Minimatch } from 'minimatch';
13
+ // =============================================================================
14
+ // Pre-resolved target file cache
15
+ // =============================================================================
16
+ /** Assemble a single target's file list from pre-resolved pattern results, applying excludes. */
17
+ function assembleTargetFiles(targetConfig, patternResults, compiledGlobalExcludes, rootDir) {
18
+ const files = new Set();
19
+ for (const pattern of targetConfig.include) {
20
+ const matches = patternResults.get(pattern) ?? [];
21
+ for (const match of matches) {
22
+ files.add(match);
23
+ }
24
+ }
25
+ if (targetConfig.exclude.length > 0 || compiledGlobalExcludes.length > 0) {
26
+ const compiledTargetExcludes = targetConfig.exclude.map((ex) => new Minimatch(ex, { dot: true }));
27
+ const allExcludes = [...compiledTargetExcludes, ...compiledGlobalExcludes];
28
+ for (const filePath of files) {
29
+ const rel = relative(rootDir, filePath);
30
+ if (allExcludes.some((m) => m.match(rel))) {
31
+ files.delete(filePath);
32
+ }
33
+ }
34
+ }
35
+ return [...files].sort();
36
+ }
37
+ /**
38
+ * Collect all unique glob patterns and ignore patterns from all targets,
39
+ * run a single deduplicated glob pass, then partition results per target.
40
+ *
41
+ * This avoids redundant filesystem traversals when targets share common
42
+ * patterns (e.g. multiple targets including "packages/star/src/starstar/star.ts").
43
+ */
44
+ function preResolveAllTargets(registry, config, rootDir) {
45
+ const targets = registry.getAll();
46
+ if (targets.length === 0)
47
+ return new Map();
48
+ // Collect all unique include patterns across targets
49
+ const allPatterns = new Set();
50
+ for (const target of targets) {
51
+ for (const pattern of target.config.include) {
52
+ allPatterns.add(pattern);
53
+ }
54
+ }
55
+ // Single glob pass for each unique pattern — deduplicated across targets.
56
+ // Common infrastructure dirs are always ignored to prevent expensive traversals.
57
+ const COMMON_IGNORE = ['**/node_modules/**', '**/dist/**', '**/.git/**'];
58
+ const patternResults = new Map();
59
+ for (const pattern of allPatterns) {
60
+ const matches = globSync(pattern, {
61
+ cwd: rootDir,
62
+ absolute: true,
63
+ nodir: true,
64
+ ignore: COMMON_IGNORE,
65
+ });
66
+ patternResults.set(pattern, matches.map((m) => resolve(m)));
67
+ }
68
+ // Pre-compile globalExcludes matchers for reuse across all targets
69
+ const { globalExcludes } = config;
70
+ const compiledExcludes = globalExcludes.map((pattern) => new Minimatch(pattern, { dot: true }));
71
+ // Assemble per-target file lists by combining pattern results and filtering excludes.
72
+ // Both target-specific excludes AND globalExcludes are applied here so that
73
+ // per-check resolution is a pure in-memory lookup with no minimatch calls.
74
+ const result = new Map();
75
+ for (const target of targets) {
76
+ const files = assembleTargetFiles({ include: target.config.include, exclude: target.config.exclude, name: target.config.name }, patternResults, compiledExcludes, rootDir);
77
+ result.set(target.config.name, files);
78
+ }
79
+ return result;
80
+ }
81
+ /**
82
+ * Resolve a single target's include/exclude globs to absolute file paths.
83
+ * Used by the resolveFilesForCheck fallback path (single-check mode).
84
+ */
85
+ function resolveTargetGlobs(target, rootDir) {
86
+ const files = new Set();
87
+ const { include, exclude } = target.config;
88
+ for (const pattern of include) {
89
+ const matches = globSync(pattern, {
90
+ cwd: rootDir,
91
+ ignore: [...exclude],
92
+ absolute: true,
93
+ });
94
+ for (const match of matches) {
95
+ files.add(resolve(match));
96
+ }
97
+ }
98
+ return [...files].sort();
99
+ }
100
+ /**
101
+ * Look up pre-resolved files for a set of target names, union and deduplicate.
102
+ */
103
+ function unionTargetFiles(targetNames, resolvedTargets) {
104
+ if (targetNames.length === 1) {
105
+ return [...(resolvedTargets.get(targetNames[0]) ?? [])];
106
+ }
107
+ const files = new Set();
108
+ for (const name of targetNames) {
109
+ const targetFiles = resolvedTargets.get(name);
110
+ if (targetFiles) {
111
+ for (const f of targetFiles)
112
+ files.add(f);
113
+ }
114
+ }
115
+ return [...files].sort();
116
+ }
117
+ // =============================================================================
118
+ // Global excludes
119
+ // =============================================================================
120
+ function applyGlobalExcludes(files, rootDir, globalExcludes) {
121
+ if (globalExcludes.length === 0)
122
+ return files;
123
+ return files.filter((filePath) => {
124
+ const relativePath = relative(rootDir, filePath);
125
+ return !globalExcludes.some((pattern) => minimatch(relativePath, pattern, { dot: true }));
126
+ });
127
+ }
128
+ // =============================================================================
129
+ // Per-check resolution (pure in-memory, no I/O)
130
+ // =============================================================================
131
+ /**
132
+ * Resolve file paths for a single check using pre-resolved target files.
133
+ *
134
+ * Resolution order:
135
+ * 1. If checkOverrides has an entry for this slug, use those target(s) directly
136
+ * 2. If scope is declared, match against all targets by languages + concerns
137
+ * 3. If no scope and no override, return undefined (check uses file cache fallback)
138
+ *
139
+ * When pre-resolved targets are provided (from buildScopeBasedFileMap), globalExcludes
140
+ * have already been applied during pre-resolution and are skipped here.
141
+ * When called without pre-resolved targets (single-check fallback), globalExcludes
142
+ * are applied after direct globbing.
143
+ */
144
+ function resolveFilesForCheck(slug, scope, registry, config, rootDir, resolvedTargets) {
145
+ const { globalExcludes, checkOverrides } = config;
146
+ // When resolvedTargets is provided, globalExcludes are pre-applied — skip re-filtering
147
+ const maybeApplyExcludes = (files) => resolvedTargets ? files : applyGlobalExcludes(files, rootDir, globalExcludes);
148
+ // Use pre-resolved cache when available, otherwise fall back to direct glob
149
+ const lookupFiles = (targetRef) => {
150
+ const names = typeof targetRef === 'string' ? [targetRef] : targetRef;
151
+ if (resolvedTargets) {
152
+ return unionTargetFiles(names, resolvedTargets);
153
+ }
154
+ // Fallback: resolve directly (single-check mode without precomputed cache)
155
+ const targets = names
156
+ .map((name) => registry.getByName(name))
157
+ .filter((t) => t !== undefined);
158
+ const files = new Set();
159
+ for (const target of targets) {
160
+ for (const f of resolveTargetGlobs(target, rootDir))
161
+ files.add(f);
162
+ }
163
+ return [...files].sort();
164
+ };
165
+ // 1. Check overrides take priority (for marketplace/third-party checks)
166
+ const override = checkOverrides[slug];
167
+ if (override) {
168
+ return maybeApplyExcludes(lookupFiles(override));
169
+ }
170
+ // 2. Scope-based matching
171
+ if (scope && (scope.languages.length > 0 || scope.concerns.length > 0)) {
172
+ const matchedTargets = registry.findByScope(scope.languages, scope.concerns);
173
+ if (matchedTargets.length === 0) {
174
+ return [];
175
+ }
176
+ const names = matchedTargets.map((t) => t.config.name);
177
+ return maybeApplyExcludes(lookupFiles(names));
178
+ }
179
+ // 3. No scope, no override — undefined signals "use file cache fallback"
180
+ return undefined;
181
+ }
182
+ /**
183
+ * Build the complete check-to-files map for all checks with scopes or overrides.
184
+ *
185
+ * All targets are globbed once upfront. Per-check resolution is a pure
186
+ * in-memory lookup against the pre-resolved file lists.
187
+ */
188
+ export function buildScopeBasedFileMap(checks, registry, config, rootDir) {
189
+ // Pre-resolve all targets once — deduplicated glob pass across all targets.
190
+ // GlobalExcludes are applied during pre-resolution so per-check lookups are pure in-memory.
191
+ const resolvedTargets = preResolveAllTargets(registry, config, rootDir);
192
+ const result = new Map();
193
+ for (const check of checks) {
194
+ const files = resolveFilesForCheck(check.slug, check.scope, registry, config, rootDir, resolvedTargets);
195
+ if (files !== undefined) {
196
+ result.set(check.slug, files);
197
+ }
198
+ }
199
+ return result;
200
+ }
201
+ //# sourceMappingURL=scope-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolver.js","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @fileoverview Shared severity and category mapping for fitness checks
3
+ *
4
+ * Maps FindingSeverity to SignalSeverity and check category strings
5
+ * to SignalCategory. Used by defineCheck and PatternDetector.
6
+ */
7
+ import type { FindingSeverity } from '../types/findings.js';
8
+ import type { SignalSeverity, SignalCategory } from '@opensip-tools/core';
9
+ /** Map FindingSeverity to SignalSeverity */
10
+ export declare function mapFindingSeverity(severity: FindingSeverity): SignalSeverity;
11
+ /** Map check tags to SignalCategory (first matching tag wins) */
12
+ export declare function mapTagsToSignalCategory(tags: readonly string[]): SignalCategory;
13
+ //# sourceMappingURL=severity-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity-mapping.d.ts","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGzE,4CAA4C;AAC5C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAY5E;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CA2B/E"}
@@ -0,0 +1,51 @@
1
+ // @fitness-ignore-file project-readme-existence -- internal module, not a package root
2
+ /**
3
+ * @fileoverview Shared severity and category mapping for fitness checks
4
+ *
5
+ * Maps FindingSeverity to SignalSeverity and check category strings
6
+ * to SignalCategory. Used by defineCheck and PatternDetector.
7
+ */
8
+ /** Map FindingSeverity to SignalSeverity */
9
+ export function mapFindingSeverity(severity) {
10
+ switch (severity) {
11
+ case 'error': {
12
+ return 'high';
13
+ }
14
+ case 'warning': {
15
+ return 'medium';
16
+ }
17
+ default: {
18
+ return 'medium';
19
+ }
20
+ }
21
+ }
22
+ /** Map check tags to SignalCategory (first matching tag wins) */
23
+ export function mapTagsToSignalCategory(tags) {
24
+ for (const tag of tags) {
25
+ switch (tag) {
26
+ case 'security': {
27
+ return 'security';
28
+ }
29
+ case 'performance': {
30
+ return 'performance';
31
+ }
32
+ case 'architecture': {
33
+ return 'architecture';
34
+ }
35
+ case 'quality': {
36
+ return 'warning';
37
+ }
38
+ case 'resilience': {
39
+ return 'resilience';
40
+ }
41
+ case 'testing': {
42
+ return 'testing';
43
+ }
44
+ case 'documentation': {
45
+ return 'documentation';
46
+ }
47
+ }
48
+ }
49
+ return 'warning';
50
+ }
51
+ //# sourceMappingURL=severity-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity-mapping.js","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF;;;;;GAKG;AAMH,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,IAAuB;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,UAAU,CAAA;YACnB,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,OAAO,aAAa,CAAA;YACtB,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,cAAc,CAAA;YACvB,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,OAAO,YAAY,CAAA;YACrB,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,OAAO,eAAe,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @fileoverview Shared utilities for stripping string literal and comment
3
+ * content from source code. Used by fitness checks to avoid false positives
4
+ * from patterns appearing inside string literals or comments.
5
+ */
6
+ /**
7
+ * Strip string literal contents from a single line.
8
+ * Replaces content inside '...', "...", and `...` with empty strings.
9
+ * Used by checks for per-line pattern matching to avoid false positives
10
+ * from patterns appearing inside string literals.
11
+ */
12
+ export declare function stripStringLiterals(line: string): string;
13
+ /**
14
+ * Strip string literals and single-line comments from full file content.
15
+ * Used by checks for quick-filter gates to avoid matching keywords
16
+ * that only appear in documentation strings or comments.
17
+ */
18
+ /**
19
+ * Check if a position in a line is inside a string literal.
20
+ * Scans characters before the match position for unescaped quotes/backticks.
21
+ * Used by checks to avoid false positives from suggestion/description text.
22
+ */
23
+ export declare function isInsideStringLiteral(line: string, matchIndex: number): boolean;
24
+ /**
25
+ * Strip string literals and single-line comments from full file content.
26
+ * Used by checks for quick-filter gates to avoid matching keywords
27
+ * that only appear in documentation strings or comments.
28
+ */
29
+ export declare function stripStringsAndComments(content: string): string;
30
+ /**
31
+ * Strip strings, single-line comments, AND block comments while preserving
32
+ * BOTH character positions and line numbers. Each stripped character is
33
+ * replaced with a space (non-newline) so the output has identical length
34
+ * and line offsets to the input. Use this when downstream processing
35
+ * needs to map a match index back to a line number in the ORIGINAL
36
+ * source — `stripStringsAndComments` collapses string literals to empty
37
+ * pairs, which shifts indexes and breaks `getLineNumber(content, idx)`.
38
+ *
39
+ * Strips:
40
+ * - Single-quoted, double-quoted, and template-literal string contents
41
+ * - Single-line `// ...` comments (to end of line)
42
+ * - Block `/* ... *\/` comments (including JSDoc `/** ... *\/`)
43
+ *
44
+ * Preserves: newlines, total character count, character positions of
45
+ * code OUTSIDE these regions.
46
+ */
47
+ export declare function stripStringsAndCommentsPreservingPositions(content: string): string;
48
+ //# sourceMappingURL=strip-literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-literals.d.ts","sourceRoot":"","sources":["../../src/framework/strip-literals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAOD;;;;GAIG;AACH;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAyB/E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,0CAA0C,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuGlF"}