@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 @@
1
+ {"version":3,"file":"check-types.d.ts","sourceRoot":"","sources":["../../src/framework/check-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAIjE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAClD,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAA;CAClD;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAatD;AAED,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Core type definitions for fitness checks
3
+ *
4
+ * Check interface is the return type of defineCheck.
5
+ * CheckConfig represents the internal configuration structure.
6
+ * CheckResult carries Signal[].
7
+ */
8
+ /**
9
+ * Type guard: is this value a Check object?
10
+ *
11
+ * Checks for the shape of a Check object:
12
+ * - Has a `config` property that is an object
13
+ * - config has an `id` property that is a string
14
+ * - config has a `slug` property that is a string
15
+ * - config has an `execute` property that is a function
16
+ * - Has a `run` property that is a function
17
+ */
18
+ export function isCheck(value) {
19
+ if (value === null || typeof value !== 'object')
20
+ return false;
21
+ const obj = value;
22
+ if (!obj.config || typeof obj.config !== 'object')
23
+ return false;
24
+ const config = obj.config;
25
+ if (typeof config.id !== 'string')
26
+ return false;
27
+ if (typeof config.slug !== 'string')
28
+ return false;
29
+ if (typeof config.execute !== 'function')
30
+ return false;
31
+ if (typeof obj.run !== 'function')
32
+ return false;
33
+ return true;
34
+ }
35
+ //# sourceMappingURL=check-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-types.js","sourceRoot":"","sources":["../../src/framework/check-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6CH;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE7D,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE/D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiC,CAAA;IACpD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IACtD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IAE/C,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileoverview Command executor for external tool checks
3
+ *
4
+ * Executes external commands (eslint, prettier, etc.) with abort
5
+ * and timeout support, then parses output into violations.
6
+ */
7
+ import type { CheckViolation, CommandConfig } from './check-config.js';
8
+ /** Options for executing an external command. */
9
+ export interface CommandExecutorOptions {
10
+ readonly cwd: string;
11
+ readonly signal?: AbortSignal | undefined;
12
+ readonly timeout?: number | undefined;
13
+ }
14
+ /** Result of executing an external command, including parsed violations. */
15
+ export interface CommandExecutionResult {
16
+ readonly violations: CheckViolation[];
17
+ readonly aborted: boolean;
18
+ readonly exitCode: number | null;
19
+ readonly error?: string;
20
+ }
21
+ /**
22
+ * Execute an external command and parse its output into violations.
23
+ */
24
+ export declare function executeCommand(config: CommandConfig, files: readonly string[], options: CommandExecutorOptions): Promise<CommandExecutionResult>;
25
+ //# sourceMappingURL=command-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../src/framework/command-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAMtE,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAuDjC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @fileoverview Command executor for external tool checks
3
+ *
4
+ * Executes external commands (eslint, prettier, etc.) with abort
5
+ * and timeout support, then parses output into violations.
6
+ */
7
+ import { execAbortable } from './abortable-exec.js';
8
+ // =============================================================================
9
+ // EXECUTOR
10
+ // =============================================================================
11
+ const DEFAULT_EXPECTED_EXIT_CODES = [0, 1];
12
+ /**
13
+ * Execute an external command and parse its output into violations.
14
+ */
15
+ export async function executeCommand(config, files, options) {
16
+ const { cwd, signal, timeout } = options;
17
+ const args = typeof config.args === 'function' ? config.args(files) : config.args;
18
+ const command = [config.bin, ...args];
19
+ const execOptions = { cwd, signal, timeout };
20
+ let result;
21
+ try {
22
+ result = await execAbortable(command, execOptions);
23
+ }
24
+ catch (error) {
25
+ // ENOENT = tool not installed (spawn fails before the process starts)
26
+ const message = error instanceof Error ? error.message : String(error);
27
+ if (message.includes('ENOENT') || message.includes('not found')) {
28
+ return {
29
+ violations: [],
30
+ aborted: false,
31
+ exitCode: null,
32
+ error: `${config.bin} is not installed. Install it to enable this check.`,
33
+ };
34
+ }
35
+ throw error;
36
+ }
37
+ if (result.aborted) {
38
+ return { violations: [], aborted: true, exitCode: result.exitCode };
39
+ }
40
+ // Exit code 127 = command not found (shell mode)
41
+ if (result.exitCode === 127) {
42
+ return {
43
+ violations: [],
44
+ aborted: false,
45
+ exitCode: 127,
46
+ error: `${config.bin} is not installed. Install it to enable this check.`,
47
+ };
48
+ }
49
+ const expectedCodes = config.expectedExitCodes ?? DEFAULT_EXPECTED_EXIT_CODES;
50
+ if (result.exitCode !== null && !expectedCodes.includes(result.exitCode)) {
51
+ return {
52
+ violations: [],
53
+ aborted: false,
54
+ exitCode: result.exitCode,
55
+ error: `Command exited with unexpected code ${result.exitCode}. ` +
56
+ `Expected one of: ${expectedCodes.join(', ')}. ` +
57
+ `stderr: ${result.stderr.slice(0, 500)}${result.stderr.length > 500 ? ' [truncated]' : ''}`,
58
+ };
59
+ }
60
+ const violations = config.parseOutput(result.stdout, result.stderr, result.exitCode ?? 0, files, cwd);
61
+ return { violations, aborted: false, exitCode: result.exitCode };
62
+ }
63
+ //# sourceMappingURL=command-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/framework/command-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Shared constants for the fitness framework
3
+ */
4
+ /**
5
+ * Standard exclusion patterns for file matching across the framework.
6
+ * Used by execution context, directive inventory, and file cache.
7
+ */
8
+ export declare const DEFAULT_EXCLUSION_PATTERNS: readonly ["**/node_modules/**", "**/dist/**", "**/.git/**", "**/coverage/**", "**/*.tsbuildinfo"];
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/framework/constants.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B,mGAM7B,CAAA"}
@@ -0,0 +1,16 @@
1
+ // @fitness-ignore-file project-readme-existence -- internal module, not a package root
2
+ /**
3
+ * @fileoverview Shared constants for the fitness framework
4
+ */
5
+ /**
6
+ * Standard exclusion patterns for file matching across the framework.
7
+ * Used by execution context, directive inventory, and file cache.
8
+ */
9
+ export const DEFAULT_EXCLUSION_PATTERNS = [
10
+ '**/node_modules/**',
11
+ '**/dist/**',
12
+ '**/.git/**',
13
+ '**/coverage/**',
14
+ '**/*.tsbuildinfo',
15
+ ];
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/framework/constants.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF;;GAEG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;CACV,CAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @fileoverview TypeScript scanner-based content filtering
3
+ *
4
+ * Uses the TypeScript scanner (not full AST parser) to identify string literal
5
+ * and comment regions. String content is replaced with spaces of equal length,
6
+ * preserving line/column positions for accurate violation reporting.
7
+ */
8
+ /** Content processed by the TypeScript scanner with string/comment region tracking */
9
+ export interface FilteredContent {
10
+ /** Content with string literals replaced by whitespace of equal length */
11
+ readonly code: string;
12
+ /**
13
+ * Content with both string literals AND comments replaced by whitespace
14
+ * of equal length. Use when a check pattern-matches identifiers via regex
15
+ * and would otherwise false-positive on banned-call references that
16
+ * appear in JSDoc / line / block comments documenting the rule
17
+ * (e.g. ``"Replace getDatabase() with the constructor StoreDeps"`` inside
18
+ * a doc string).
19
+ */
20
+ readonly codeNoComments: string;
21
+ /** Original content (unchanged) */
22
+ readonly raw: string;
23
+ /** Set of line numbers (1-based) that are entirely inside comments */
24
+ readonly commentLines: ReadonlySet<number>;
25
+ /** Check if a (1-based line, 0-based column) position is inside a string literal */
26
+ readonly isInString: (line: number, column: number) => boolean;
27
+ /** Check if a (1-based line, 0-based column) position is inside a comment */
28
+ readonly isInComment: (line: number, column: number) => boolean;
29
+ }
30
+ /** Clear the filter cache (call between runs or on memory pressure) */
31
+ export declare function clearFilterCache(): void;
32
+ export declare function filterContent(content: string): FilteredContent;
33
+ //# sourceMappingURL=content-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-filter.d.ts","sourceRoot":"","sources":["../../src/framework/content-filter.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAUH,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1C,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9D,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;CAChE;AA+GD,uEAAuE;AACvE,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA0B9D"}
@@ -0,0 +1,236 @@
1
+ // @fitness-ignore-file file-length-limits -- framework/content-filter complexity requires single-file cohesion
2
+ /**
3
+ * @fileoverview TypeScript scanner-based content filtering
4
+ *
5
+ * Uses the TypeScript scanner (not full AST parser) to identify string literal
6
+ * and comment regions. String content is replaced with spaces of equal length,
7
+ * preserving line/column positions for accurate violation reporting.
8
+ */
9
+ import { logger } from '@opensip-tools/core';
10
+ import ts from 'typescript';
11
+ // =============================================================================
12
+ // HELPERS
13
+ // =============================================================================
14
+ /** Build an array of byte offsets where each line starts. */
15
+ function buildLineStarts(content) {
16
+ const lineStarts = [0];
17
+ // eslint-disable-next-line unicorn/no-for-loop -- offset-bearing scan: stores UTF-16 indexes
18
+ for (let i = 0; i < content.length; i++) {
19
+ if (content[i] === '\n')
20
+ lineStarts.push(i + 1);
21
+ }
22
+ return lineStarts;
23
+ }
24
+ /**
25
+ * Build a set of 1-based line numbers from a list of regions.
26
+ * A line is included if any part of it falls within a region.
27
+ */
28
+ function linesToSet(content, regions) {
29
+ if (regions.length === 0)
30
+ return new Set();
31
+ const lineStarts = buildLineStarts(content);
32
+ const result = new Set();
33
+ for (const region of regions) {
34
+ for (let lineIdx = 0; lineIdx < lineStarts.length; lineIdx++) {
35
+ const lineStart = lineStarts[lineIdx];
36
+ const lineEnd = lineIdx + 1 < lineStarts.length ? lineStarts[lineIdx + 1] - 1 : content.length;
37
+ if (lineStart > region.end)
38
+ break;
39
+ if (lineEnd >= region.start) {
40
+ result.add(lineIdx + 1); // 1-based
41
+ }
42
+ }
43
+ }
44
+ return result;
45
+ }
46
+ /**
47
+ * Check if a (1-based line, 0-based column) offset falls within any region.
48
+ */
49
+ function isInRegions(content, regions, line, column) {
50
+ if (regions.length === 0)
51
+ return false;
52
+ // Convert line/column to byte offset
53
+ let currentLine = 1;
54
+ let lineStart = 0;
55
+ // eslint-disable-next-line unicorn/no-for-loop -- offset-bearing scan: captures UTF-16 line start
56
+ for (let i = 0; i < content.length; i++) {
57
+ if (currentLine === line) {
58
+ lineStart = i;
59
+ break;
60
+ }
61
+ if (content[i] === '\n')
62
+ currentLine++;
63
+ }
64
+ if (currentLine !== line)
65
+ return false;
66
+ const offset = lineStart + column;
67
+ for (const region of regions) {
68
+ if (offset >= region.start && offset < region.end)
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ /**
74
+ * Replace characters in the given range with spaces, preserving newlines.
75
+ * Records the range as a string region.
76
+ */
77
+ function replaceCharsInRange(chars, start, end, stringRegions) {
78
+ stringRegions.push({ start, end });
79
+ for (let i = start; i < end; i++) {
80
+ if (chars[i] !== '\n')
81
+ chars[i] = ' ';
82
+ }
83
+ }
84
+ // =============================================================================
85
+ // MAIN
86
+ // =============================================================================
87
+ /**
88
+ * Scan content using TypeScript's scanner to identify string and comment regions.
89
+ *
90
+ * String literals are replaced with spaces of equal length, preserving
91
+ * line/column positions. Comments are tracked but not removed (directives
92
+ * live in comments and must be preserved).
93
+ */
94
+ // Module-level cache to avoid re-running the TS scanner on the same content.
95
+ // Bounded by an idle timer (10 min, matching parse-cache.ts) so long-lived
96
+ // embedders don't accumulate cached filter results across runs forever. The
97
+ // timer resets each time filterContent runs, so an active session never
98
+ // loses its cache.
99
+ const FILTER_CACHE_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
100
+ const filterCache = new Map();
101
+ let filterCacheIdleTimer = null;
102
+ function scheduleFilterCacheClear() {
103
+ if (filterCacheIdleTimer)
104
+ clearTimeout(filterCacheIdleTimer);
105
+ filterCacheIdleTimer = setTimeout(() => {
106
+ filterCache.clear();
107
+ filterCacheIdleTimer = null;
108
+ }, FILTER_CACHE_IDLE_TIMEOUT_MS);
109
+ filterCacheIdleTimer.unref();
110
+ }
111
+ /** Clear the filter cache (call between runs or on memory pressure) */
112
+ export function clearFilterCache() {
113
+ filterCache.clear();
114
+ if (filterCacheIdleTimer) {
115
+ clearTimeout(filterCacheIdleTimer);
116
+ filterCacheIdleTimer = null;
117
+ }
118
+ }
119
+ export function filterContent(content) {
120
+ const cached = filterCache.get(content);
121
+ if (cached) {
122
+ scheduleFilterCacheClear();
123
+ return cached;
124
+ }
125
+ try {
126
+ const result = filterContentImpl(content);
127
+ filterCache.set(content, result);
128
+ scheduleFilterCacheClear();
129
+ return result;
130
+ }
131
+ catch {
132
+ // Graceful degradation — return raw content if scanner fails
133
+ logger.debug('Content filter fell back to raw content', { evt: 'fitness.content_filter.fallback', module: 'fitness:framework' });
134
+ const fallback = {
135
+ code: content,
136
+ codeNoComments: content,
137
+ raw: content,
138
+ commentLines: new Set(),
139
+ isInString: () => false,
140
+ isInComment: () => false,
141
+ };
142
+ filterCache.set(content, fallback);
143
+ return fallback;
144
+ }
145
+ }
146
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- TS scanner driver: token-by-token loop with per-kind handling; flatter shape would scatter token classification
147
+ function filterContentImpl(content) {
148
+ const scanner = ts.createScanner(ts.ScriptTarget.Latest, false, ts.LanguageVariant.Standard, content);
149
+ const stringRegions = [];
150
+ const commentRegions = [];
151
+ const chars = [...content];
152
+ // Depth counter, not a boolean — a `${ `inner` }` construct nests two templates
153
+ // and each `}` that closes a template-expression must be rescanned. A plain
154
+ // boolean flipped off by the inner TemplateTail would leave the outer unrescanned
155
+ // and desync the scanner for the rest of the file (which silently wipes real
156
+ // code to whitespace). Incremented at TemplateHead, decremented at TemplateTail.
157
+ let templateDepth = 0;
158
+ while (true) {
159
+ let token = scanner.scan();
160
+ // @fitness-ignore-next-line unsafe-secret-comparison -- comparing TypeScript SyntaxKind enum, not a secret
161
+ if (token === ts.SyntaxKind.EndOfFileToken)
162
+ break;
163
+ // After a CloseBraceToken inside ANY template expression, rescan to get TemplateMiddle/TemplateTail
164
+ // @fitness-ignore-next-line unsafe-secret-comparison -- comparing TypeScript SyntaxKind enum, not a secret
165
+ if (token === ts.SyntaxKind.CloseBraceToken && templateDepth > 0) {
166
+ token = scanner.reScanTemplateToken(false);
167
+ }
168
+ const start = scanner.getTokenStart();
169
+ const end = scanner.getTokenEnd();
170
+ switch (token) {
171
+ case ts.SyntaxKind.StringLiteral:
172
+ case ts.SyntaxKind.NoSubstitutionTemplateLiteral: {
173
+ // Replace content inside quotes/backticks (keep delimiters)
174
+ replaceCharsInRange(chars, start + 1, end - 1, stringRegions);
175
+ break;
176
+ }
177
+ case ts.SyntaxKind.TemplateHead: {
178
+ // `text ${ — replace text between ` and ${
179
+ templateDepth++;
180
+ replaceCharsInRange(chars, start + 1, end - 2, stringRegions);
181
+ break;
182
+ }
183
+ case ts.SyntaxKind.TemplateMiddle: {
184
+ // }text ${ — replace text between } and ${
185
+ replaceCharsInRange(chars, start + 1, end - 2, stringRegions);
186
+ break;
187
+ }
188
+ case ts.SyntaxKind.TemplateTail: {
189
+ // }text` — replace text between } and `
190
+ templateDepth--;
191
+ replaceCharsInRange(chars, start + 1, end - 1, stringRegions);
192
+ break;
193
+ }
194
+ case ts.SyntaxKind.SingleLineCommentTrivia:
195
+ case ts.SyntaxKind.MultiLineCommentTrivia: {
196
+ // Track comment regions but don't modify content
197
+ commentRegions.push({ start, end });
198
+ break;
199
+ }
200
+ // RegularExpressionLiteral — leave unchanged, regex is code
201
+ default: {
202
+ break;
203
+ }
204
+ }
205
+ }
206
+ const code = chars.join('');
207
+ const commentLines = linesToSet(content, commentRegions);
208
+ // Compute `codeNoComments` by additionally replacing comment regions
209
+ // with whitespace. Done as a second pass on a fresh array so `code`
210
+ // (strings-stripped only) and `codeNoComments` (strings + comments
211
+ // stripped) remain available — most checks want one or the other,
212
+ // not both.
213
+ const charsNoComments = [...content];
214
+ for (const region of stringRegions) {
215
+ for (let i = region.start; i < region.end; i++) {
216
+ if (charsNoComments[i] !== '\n')
217
+ charsNoComments[i] = ' ';
218
+ }
219
+ }
220
+ for (const region of commentRegions) {
221
+ for (let i = region.start; i < region.end; i++) {
222
+ if (charsNoComments[i] !== '\n')
223
+ charsNoComments[i] = ' ';
224
+ }
225
+ }
226
+ const codeNoComments = charsNoComments.join('');
227
+ return {
228
+ code,
229
+ codeNoComments,
230
+ raw: content,
231
+ commentLines,
232
+ isInString: (line, column) => isInRegions(content, stringRegions, line, column),
233
+ isInComment: (line, column) => isInRegions(content, commentRegions, line, column),
234
+ };
235
+ }
236
+ //# sourceMappingURL=content-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-filter.js","sourceRoot":"","sources":["../../src/framework/content-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview defineCheck - Unified check definition API
3
+ *
4
+ * The main API for creating fitness checks. Supports three modes:
5
+ * - analyze: Per-file analysis with content and path
6
+ * - analyzeAll: Multi-file analysis with lazy loading FileAccessor
7
+ * - command: External tool execution with output parsing
8
+ *
9
+ * Check authors return CheckViolation[]. The framework converts each
10
+ * CheckViolation into a universal Signal via createSignal().
11
+ */
12
+ import type { UnifiedCheckConfig } from './check-config.js';
13
+ import type { Check } from './check-types.js';
14
+ /**
15
+ * Define a fitness check using the unified API.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * export const noConsoleLog = defineCheck({
20
+ * id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
21
+ * slug: 'no-console-log',
22
+ * category: 'quality',
23
+ * description: 'Disallow console.log in production code',
24
+ * analyze: (content, filePath) => {
25
+ * const violations: CheckViolation[] = [];
26
+ * content.split('\n').forEach((line, idx) => {
27
+ * if (line.includes('console.log')) {
28
+ * violations.push({ line: idx + 1, message: 'No console.log', severity: 'error' });
29
+ * }
30
+ * });
31
+ * return violations;
32
+ * },
33
+ * });
34
+ * ```
35
+ * @throws {ValidationError} When the check config is invalid
36
+ */
37
+ export declare function defineCheck(config: UnifiedCheckConfig): Check;
38
+ //# sourceMappingURL=define-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-check.d.ts","sourceRoot":"","sources":["../../src/framework/define-check.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAsBH,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAyJ7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,KAAK,CAyF7D"}