@opensip-cli/fitness 0.1.0

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 (576) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/baseline-plane.test.d.ts +12 -0
  5. package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
  6. package/dist/__tests__/baseline-plane.test.js +63 -0
  7. package/dist/__tests__/baseline-plane.test.js.map +1 -0
  8. package/dist/__tests__/check-utils.test.d.ts +10 -0
  9. package/dist/__tests__/check-utils.test.d.ts.map +1 -0
  10. package/dist/__tests__/check-utils.test.js +193 -0
  11. package/dist/__tests__/check-utils.test.js.map +1 -0
  12. package/dist/__tests__/fingerprint-parity.test.d.ts +14 -0
  13. package/dist/__tests__/fingerprint-parity.test.d.ts.map +1 -0
  14. package/dist/__tests__/fingerprint-parity.test.js +59 -0
  15. package/dist/__tests__/fingerprint-parity.test.js.map +1 -0
  16. package/dist/__tests__/fit-execute-opts.test.d.ts +15 -0
  17. package/dist/__tests__/fit-execute-opts.test.d.ts.map +1 -0
  18. package/dist/__tests__/fit-execute-opts.test.js +124 -0
  19. package/dist/__tests__/fit-execute-opts.test.js.map +1 -0
  20. package/dist/__tests__/public-api.test.d.ts +19 -0
  21. package/dist/__tests__/public-api.test.d.ts.map +1 -0
  22. package/dist/__tests__/public-api.test.js +85 -0
  23. package/dist/__tests__/public-api.test.js.map +1 -0
  24. package/dist/__tests__/tool.test.d.ts +10 -0
  25. package/dist/__tests__/tool.test.d.ts.map +1 -0
  26. package/dist/__tests__/tool.test.js +57 -0
  27. package/dist/__tests__/tool.test.js.map +1 -0
  28. package/dist/baseline-strategy.d.ts +21 -0
  29. package/dist/baseline-strategy.d.ts.map +1 -0
  30. package/dist/baseline-strategy.js +21 -0
  31. package/dist/baseline-strategy.js.map +1 -0
  32. package/dist/check-utils/display.d.ts +52 -0
  33. package/dist/check-utils/display.d.ts.map +1 -0
  34. package/dist/check-utils/display.js +66 -0
  35. package/dist/check-utils/display.js.map +1 -0
  36. package/dist/check-utils/index.d.ts +17 -0
  37. package/dist/check-utils/index.d.ts.map +1 -0
  38. package/dist/check-utils/index.js +13 -0
  39. package/dist/check-utils/index.js.map +1 -0
  40. package/dist/check-utils/path-matching.d.ts +40 -0
  41. package/dist/check-utils/path-matching.d.ts.map +1 -0
  42. package/dist/check-utils/path-matching.js +38 -0
  43. package/dist/check-utils/path-matching.js.map +1 -0
  44. package/dist/check-utils/source-analysis.d.ts +36 -0
  45. package/dist/check-utils/source-analysis.d.ts.map +1 -0
  46. package/dist/check-utils/source-analysis.js +44 -0
  47. package/dist/check-utils/source-analysis.js.map +1 -0
  48. package/dist/check-utils/test-helpers.d.ts +57 -0
  49. package/dist/check-utils/test-helpers.d.ts.map +1 -0
  50. package/dist/check-utils/test-helpers.js +71 -0
  51. package/dist/check-utils/test-helpers.js.map +1 -0
  52. package/dist/cli/__tests__/fit-gate-mode.test.d.ts +14 -0
  53. package/dist/cli/__tests__/fit-gate-mode.test.d.ts.map +1 -0
  54. package/dist/cli/__tests__/fit-gate-mode.test.js +110 -0
  55. package/dist/cli/__tests__/fit-gate-mode.test.js.map +1 -0
  56. package/dist/cli/__tests__/fit-modes-live.test.d.ts +13 -0
  57. package/dist/cli/__tests__/fit-modes-live.test.d.ts.map +1 -0
  58. package/dist/cli/__tests__/fit-modes-live.test.js +182 -0
  59. package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -0
  60. package/dist/cli/__tests__/report-data.test.d.ts +12 -0
  61. package/dist/cli/__tests__/report-data.test.d.ts.map +1 -0
  62. package/dist/cli/__tests__/report-data.test.js +113 -0
  63. package/dist/cli/__tests__/report-data.test.js.map +1 -0
  64. package/dist/cli/fit/__tests__/display-fold.test.d.ts +8 -0
  65. package/dist/cli/fit/__tests__/display-fold.test.d.ts.map +1 -0
  66. package/dist/cli/fit/__tests__/display-fold.test.js +87 -0
  67. package/dist/cli/fit/__tests__/display-fold.test.js.map +1 -0
  68. package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts +16 -0
  69. package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts.map +1 -0
  70. package/dist/cli/fit/__tests__/gate-resolved-config.test.js +62 -0
  71. package/dist/cli/fit/__tests__/gate-resolved-config.test.js.map +1 -0
  72. package/dist/cli/fit/check-loader.d.ts +37 -0
  73. package/dist/cli/fit/check-loader.d.ts.map +1 -0
  74. package/dist/cli/fit/check-loader.js +154 -0
  75. package/dist/cli/fit/check-loader.js.map +1 -0
  76. package/dist/cli/fit/config-loader.d.ts +55 -0
  77. package/dist/cli/fit/config-loader.d.ts.map +1 -0
  78. package/dist/cli/fit/config-loader.js +107 -0
  79. package/dist/cli/fit/config-loader.js.map +1 -0
  80. package/dist/cli/fit/display-registry.d.ts +19 -0
  81. package/dist/cli/fit/display-registry.d.ts.map +1 -0
  82. package/dist/cli/fit/display-registry.js +33 -0
  83. package/dist/cli/fit/display-registry.js.map +1 -0
  84. package/dist/cli/fit/envelope-view.d.ts +49 -0
  85. package/dist/cli/fit/envelope-view.d.ts.map +1 -0
  86. package/dist/cli/fit/envelope-view.js +85 -0
  87. package/dist/cli/fit/envelope-view.js.map +1 -0
  88. package/dist/cli/fit/fit-aux-command-specs.d.ts +35 -0
  89. package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -0
  90. package/dist/cli/fit/fit-aux-command-specs.js +110 -0
  91. package/dist/cli/fit/fit-aux-command-specs.js.map +1 -0
  92. package/dist/cli/fit/fit-command-spec.d.ts +24 -0
  93. package/dist/cli/fit/fit-command-spec.d.ts.map +1 -0
  94. package/dist/cli/fit/fit-command-spec.js +131 -0
  95. package/dist/cli/fit/fit-command-spec.js.map +1 -0
  96. package/dist/cli/fit/gate-compare-render.d.ts +13 -0
  97. package/dist/cli/fit/gate-compare-render.d.ts.map +1 -0
  98. package/dist/cli/fit/gate-compare-render.js +87 -0
  99. package/dist/cli/fit/gate-compare-render.js.map +1 -0
  100. package/dist/cli/fit/recipe-selector.d.ts +53 -0
  101. package/dist/cli/fit/recipe-selector.d.ts.map +1 -0
  102. package/dist/cli/fit/recipe-selector.js +106 -0
  103. package/dist/cli/fit/recipe-selector.js.map +1 -0
  104. package/dist/cli/fit/recipe-selector.test.d.ts +2 -0
  105. package/dist/cli/fit/recipe-selector.test.d.ts.map +1 -0
  106. package/dist/cli/fit/recipe-selector.test.js +69 -0
  107. package/dist/cli/fit/recipe-selector.test.js.map +1 -0
  108. package/dist/cli/fit/resolved-fitness-config.d.ts +48 -0
  109. package/dist/cli/fit/resolved-fitness-config.d.ts.map +1 -0
  110. package/dist/cli/fit/resolved-fitness-config.js +46 -0
  111. package/dist/cli/fit/resolved-fitness-config.js.map +1 -0
  112. package/dist/cli/fit/result-builders.d.ts +91 -0
  113. package/dist/cli/fit/result-builders.d.ts.map +1 -0
  114. package/dist/cli/fit/result-builders.js +206 -0
  115. package/dist/cli/fit/result-builders.js.map +1 -0
  116. package/dist/cli/fit-list.d.ts +7 -0
  117. package/dist/cli/fit-list.d.ts.map +1 -0
  118. package/dist/cli/fit-list.js +24 -0
  119. package/dist/cli/fit-list.js.map +1 -0
  120. package/dist/cli/fit-modes.d.ts +42 -0
  121. package/dist/cli/fit-modes.d.ts.map +1 -0
  122. package/dist/cli/fit-modes.js +322 -0
  123. package/dist/cli/fit-modes.js.map +1 -0
  124. package/dist/cli/fit-recipes.d.ts +7 -0
  125. package/dist/cli/fit-recipes.d.ts.map +1 -0
  126. package/dist/cli/fit-recipes.js +34 -0
  127. package/dist/cli/fit-recipes.js.map +1 -0
  128. package/dist/cli/fit-runner-views.d.ts +33 -0
  129. package/dist/cli/fit-runner-views.d.ts.map +1 -0
  130. package/dist/cli/fit-runner-views.js +92 -0
  131. package/dist/cli/fit-runner-views.js.map +1 -0
  132. package/dist/cli/fit-runner.d.ts +44 -0
  133. package/dist/cli/fit-runner.d.ts.map +1 -0
  134. package/dist/cli/fit-runner.js +250 -0
  135. package/dist/cli/fit-runner.js.map +1 -0
  136. package/dist/cli/fit-worker.d.ts +26 -0
  137. package/dist/cli/fit-worker.d.ts.map +1 -0
  138. package/dist/cli/fit-worker.js +67 -0
  139. package/dist/cli/fit-worker.js.map +1 -0
  140. package/dist/cli/fit.d.ts +74 -0
  141. package/dist/cli/fit.d.ts.map +1 -0
  142. package/dist/cli/fit.js +149 -0
  143. package/dist/cli/fit.js.map +1 -0
  144. package/dist/cli/report-data.d.ts +44 -0
  145. package/dist/cli/report-data.d.ts.map +1 -0
  146. package/dist/cli/report-data.js +89 -0
  147. package/dist/cli/report-data.js.map +1 -0
  148. package/dist/config/__tests__/fitness-config-schema.test.d.ts +6 -0
  149. package/dist/config/__tests__/fitness-config-schema.test.d.ts.map +1 -0
  150. package/dist/config/__tests__/fitness-config-schema.test.js +37 -0
  151. package/dist/config/__tests__/fitness-config-schema.test.js.map +1 -0
  152. package/dist/config/fitness-config-schema.d.ts +48 -0
  153. package/dist/config/fitness-config-schema.d.ts.map +1 -0
  154. package/dist/config/fitness-config-schema.js +62 -0
  155. package/dist/config/fitness-config-schema.js.map +1 -0
  156. package/dist/framework/__tests__/abortable-exec.test.d.ts +9 -0
  157. package/dist/framework/__tests__/abortable-exec.test.d.ts.map +1 -0
  158. package/dist/framework/__tests__/abortable-exec.test.js +102 -0
  159. package/dist/framework/__tests__/abortable-exec.test.js.map +1 -0
  160. package/dist/framework/__tests__/check-config.test.d.ts +2 -0
  161. package/dist/framework/__tests__/check-config.test.d.ts.map +1 -0
  162. package/dist/framework/__tests__/check-config.test.js +56 -0
  163. package/dist/framework/__tests__/check-config.test.js.map +1 -0
  164. package/dist/framework/__tests__/check-types.test.d.ts +2 -0
  165. package/dist/framework/__tests__/check-types.test.d.ts.map +1 -0
  166. package/dist/framework/__tests__/check-types.test.js +76 -0
  167. package/dist/framework/__tests__/check-types.test.js.map +1 -0
  168. package/dist/framework/__tests__/command-executor.test.d.ts +2 -0
  169. package/dist/framework/__tests__/command-executor.test.d.ts.map +1 -0
  170. package/dist/framework/__tests__/command-executor.test.js +110 -0
  171. package/dist/framework/__tests__/command-executor.test.js.map +1 -0
  172. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts +2 -0
  173. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
  174. package/dist/framework/__tests__/content-filter-dispatch.test.js +122 -0
  175. package/dist/framework/__tests__/content-filter-dispatch.test.js.map +1 -0
  176. package/dist/framework/__tests__/define-check.test.d.ts +2 -0
  177. package/dist/framework/__tests__/define-check.test.d.ts.map +1 -0
  178. package/dist/framework/__tests__/define-check.test.js +402 -0
  179. package/dist/framework/__tests__/define-check.test.js.map +1 -0
  180. package/dist/framework/__tests__/define-regex-list-check.test.d.ts +15 -0
  181. package/dist/framework/__tests__/define-regex-list-check.test.d.ts.map +1 -0
  182. package/dist/framework/__tests__/define-regex-list-check.test.js +299 -0
  183. package/dist/framework/__tests__/define-regex-list-check.test.js.map +1 -0
  184. package/dist/framework/__tests__/directive-inventory.test.d.ts +2 -0
  185. package/dist/framework/__tests__/directive-inventory.test.d.ts.map +1 -0
  186. package/dist/framework/__tests__/directive-inventory.test.js +111 -0
  187. package/dist/framework/__tests__/directive-inventory.test.js.map +1 -0
  188. package/dist/framework/__tests__/directive-parsing.test.d.ts +13 -0
  189. package/dist/framework/__tests__/directive-parsing.test.d.ts.map +1 -0
  190. package/dist/framework/__tests__/directive-parsing.test.js +86 -0
  191. package/dist/framework/__tests__/directive-parsing.test.js.map +1 -0
  192. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts +2 -0
  193. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts.map +1 -0
  194. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js +56 -0
  195. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js.map +1 -0
  196. package/dist/framework/__tests__/execution-context.test.d.ts +2 -0
  197. package/dist/framework/__tests__/execution-context.test.d.ts.map +1 -0
  198. package/dist/framework/__tests__/execution-context.test.js +140 -0
  199. package/dist/framework/__tests__/execution-context.test.js.map +1 -0
  200. package/dist/framework/__tests__/file-accessor.test.d.ts +2 -0
  201. package/dist/framework/__tests__/file-accessor.test.d.ts.map +1 -0
  202. package/dist/framework/__tests__/file-accessor.test.js +106 -0
  203. package/dist/framework/__tests__/file-accessor.test.js.map +1 -0
  204. package/dist/framework/__tests__/file-cache.test.d.ts +2 -0
  205. package/dist/framework/__tests__/file-cache.test.d.ts.map +1 -0
  206. package/dist/framework/__tests__/file-cache.test.js +122 -0
  207. package/dist/framework/__tests__/file-cache.test.js.map +1 -0
  208. package/dist/framework/__tests__/file-type-filter.test.d.ts +9 -0
  209. package/dist/framework/__tests__/file-type-filter.test.d.ts.map +1 -0
  210. package/dist/framework/__tests__/file-type-filter.test.js +39 -0
  211. package/dist/framework/__tests__/file-type-filter.test.js.map +1 -0
  212. package/dist/framework/__tests__/ignore-processing.test.d.ts +11 -0
  213. package/dist/framework/__tests__/ignore-processing.test.d.ts.map +1 -0
  214. package/dist/framework/__tests__/ignore-processing.test.js +175 -0
  215. package/dist/framework/__tests__/ignore-processing.test.js.map +1 -0
  216. package/dist/framework/__tests__/import-graph.test.d.ts +15 -0
  217. package/dist/framework/__tests__/import-graph.test.d.ts.map +1 -0
  218. package/dist/framework/__tests__/import-graph.test.js +164 -0
  219. package/dist/framework/__tests__/import-graph.test.js.map +1 -0
  220. package/dist/framework/__tests__/memory-profiler.test.d.ts +9 -0
  221. package/dist/framework/__tests__/memory-profiler.test.d.ts.map +1 -0
  222. package/dist/framework/__tests__/memory-profiler.test.js +108 -0
  223. package/dist/framework/__tests__/memory-profiler.test.js.map +1 -0
  224. package/dist/framework/__tests__/parse-cache.test.d.ts +9 -0
  225. package/dist/framework/__tests__/parse-cache.test.d.ts.map +1 -0
  226. package/dist/framework/__tests__/parse-cache.test.js +51 -0
  227. package/dist/framework/__tests__/parse-cache.test.js.map +1 -0
  228. package/dist/framework/__tests__/path-matcher.test.d.ts +2 -0
  229. package/dist/framework/__tests__/path-matcher.test.d.ts.map +1 -0
  230. package/dist/framework/__tests__/path-matcher.test.js +113 -0
  231. package/dist/framework/__tests__/path-matcher.test.js.map +1 -0
  232. package/dist/framework/__tests__/register-helpers.test.d.ts +2 -0
  233. package/dist/framework/__tests__/register-helpers.test.d.ts.map +1 -0
  234. package/dist/framework/__tests__/register-helpers.test.js +51 -0
  235. package/dist/framework/__tests__/register-helpers.test.js.map +1 -0
  236. package/dist/framework/__tests__/registry.test.d.ts +2 -0
  237. package/dist/framework/__tests__/registry.test.d.ts.map +1 -0
  238. package/dist/framework/__tests__/registry.test.js +211 -0
  239. package/dist/framework/__tests__/registry.test.js.map +1 -0
  240. package/dist/framework/__tests__/result-builder.test.d.ts +2 -0
  241. package/dist/framework/__tests__/result-builder.test.d.ts.map +1 -0
  242. package/dist/framework/__tests__/result-builder.test.js +153 -0
  243. package/dist/framework/__tests__/result-builder.test.js.map +1 -0
  244. package/dist/framework/__tests__/scope-registry.test.d.ts +8 -0
  245. package/dist/framework/__tests__/scope-registry.test.d.ts.map +1 -0
  246. package/dist/framework/__tests__/scope-registry.test.js +156 -0
  247. package/dist/framework/__tests__/scope-registry.test.js.map +1 -0
  248. package/dist/framework/__tests__/scope-resolver.golden.test.d.ts +2 -0
  249. package/dist/framework/__tests__/scope-resolver.golden.test.d.ts.map +1 -0
  250. package/dist/framework/__tests__/scope-resolver.golden.test.js +105 -0
  251. package/dist/framework/__tests__/scope-resolver.golden.test.js.map +1 -0
  252. package/dist/framework/__tests__/scope-resolver.test.d.ts +2 -0
  253. package/dist/framework/__tests__/scope-resolver.test.d.ts.map +1 -0
  254. package/dist/framework/__tests__/scope-resolver.test.js +150 -0
  255. package/dist/framework/__tests__/scope-resolver.test.js.map +1 -0
  256. package/dist/framework/__tests__/severity-mapping.test.d.ts +2 -0
  257. package/dist/framework/__tests__/severity-mapping.test.d.ts.map +1 -0
  258. package/dist/framework/__tests__/severity-mapping.test.js +74 -0
  259. package/dist/framework/__tests__/severity-mapping.test.js.map +1 -0
  260. package/dist/framework/__tests__/strip-literals.test.d.ts +2 -0
  261. package/dist/framework/__tests__/strip-literals.test.d.ts.map +1 -0
  262. package/dist/framework/__tests__/strip-literals.test.js +87 -0
  263. package/dist/framework/__tests__/strip-literals.test.js.map +1 -0
  264. package/dist/framework/abortable-exec.d.ts +34 -0
  265. package/dist/framework/abortable-exec.d.ts.map +1 -0
  266. package/dist/framework/abortable-exec.js +143 -0
  267. package/dist/framework/abortable-exec.js.map +1 -0
  268. package/dist/framework/check-config.d.ts +175 -0
  269. package/dist/framework/check-config.d.ts.map +1 -0
  270. package/dist/framework/check-config.js +115 -0
  271. package/dist/framework/check-config.js.map +1 -0
  272. package/dist/framework/check-types.d.ts +82 -0
  273. package/dist/framework/check-types.d.ts.map +1 -0
  274. package/dist/framework/check-types.js +63 -0
  275. package/dist/framework/check-types.js.map +1 -0
  276. package/dist/framework/command-executor.d.ts +25 -0
  277. package/dist/framework/command-executor.d.ts.map +1 -0
  278. package/dist/framework/command-executor.js +63 -0
  279. package/dist/framework/command-executor.js.map +1 -0
  280. package/dist/framework/comment-openers.d.ts +11 -0
  281. package/dist/framework/comment-openers.d.ts.map +1 -0
  282. package/dist/framework/comment-openers.js +11 -0
  283. package/dist/framework/comment-openers.js.map +1 -0
  284. package/dist/framework/constants.d.ts +9 -0
  285. package/dist/framework/constants.d.ts.map +1 -0
  286. package/dist/framework/constants.js +16 -0
  287. package/dist/framework/constants.js.map +1 -0
  288. package/dist/framework/define-check.d.ts +38 -0
  289. package/dist/framework/define-check.d.ts.map +1 -0
  290. package/dist/framework/define-check.js +296 -0
  291. package/dist/framework/define-check.js.map +1 -0
  292. package/dist/framework/define-regex-list-check.d.ts +160 -0
  293. package/dist/framework/define-regex-list-check.d.ts.map +1 -0
  294. package/dist/framework/define-regex-list-check.js +177 -0
  295. package/dist/framework/define-regex-list-check.js.map +1 -0
  296. package/dist/framework/directive-inventory.d.ts +37 -0
  297. package/dist/framework/directive-inventory.d.ts.map +1 -0
  298. package/dist/framework/directive-inventory.js +82 -0
  299. package/dist/framework/directive-inventory.js.map +1 -0
  300. package/dist/framework/directive-parsing.d.ts +23 -0
  301. package/dist/framework/directive-parsing.d.ts.map +1 -0
  302. package/dist/framework/directive-parsing.js +39 -0
  303. package/dist/framework/directive-parsing.js.map +1 -0
  304. package/dist/framework/execution-context.d.ts +98 -0
  305. package/dist/framework/execution-context.d.ts.map +1 -0
  306. package/dist/framework/execution-context.js +145 -0
  307. package/dist/framework/execution-context.js.map +1 -0
  308. package/dist/framework/file-accessor.d.ts +20 -0
  309. package/dist/framework/file-accessor.d.ts.map +1 -0
  310. package/dist/framework/file-accessor.js +122 -0
  311. package/dist/framework/file-accessor.js.map +1 -0
  312. package/dist/framework/file-cache.d.ts +70 -0
  313. package/dist/framework/file-cache.d.ts.map +1 -0
  314. package/dist/framework/file-cache.js +199 -0
  315. package/dist/framework/file-cache.js.map +1 -0
  316. package/dist/framework/file-type-filter.d.ts +11 -0
  317. package/dist/framework/file-type-filter.d.ts.map +1 -0
  318. package/dist/framework/file-type-filter.js +21 -0
  319. package/dist/framework/file-type-filter.js.map +1 -0
  320. package/dist/framework/ignore-processing.d.ts +36 -0
  321. package/dist/framework/ignore-processing.d.ts.map +1 -0
  322. package/dist/framework/ignore-processing.js +172 -0
  323. package/dist/framework/ignore-processing.js.map +1 -0
  324. package/dist/framework/import-graph.d.ts +51 -0
  325. package/dist/framework/import-graph.d.ts.map +1 -0
  326. package/dist/framework/import-graph.js +217 -0
  327. package/dist/framework/import-graph.js.map +1 -0
  328. package/dist/framework/memory-profiler.d.ts +53 -0
  329. package/dist/framework/memory-profiler.d.ts.map +1 -0
  330. package/dist/framework/memory-profiler.js +92 -0
  331. package/dist/framework/memory-profiler.js.map +1 -0
  332. package/dist/framework/parse-cache.d.ts +24 -0
  333. package/dist/framework/parse-cache.d.ts.map +1 -0
  334. package/dist/framework/parse-cache.js +41 -0
  335. package/dist/framework/parse-cache.js.map +1 -0
  336. package/dist/framework/path-matcher.d.ts +86 -0
  337. package/dist/framework/path-matcher.d.ts.map +1 -0
  338. package/dist/framework/path-matcher.js +138 -0
  339. package/dist/framework/path-matcher.js.map +1 -0
  340. package/dist/framework/register-helpers.d.ts +11 -0
  341. package/dist/framework/register-helpers.d.ts.map +1 -0
  342. package/dist/framework/register-helpers.js +19 -0
  343. package/dist/framework/register-helpers.js.map +1 -0
  344. package/dist/framework/registry.d.ts +51 -0
  345. package/dist/framework/registry.d.ts.map +1 -0
  346. package/dist/framework/registry.js +131 -0
  347. package/dist/framework/registry.js.map +1 -0
  348. package/dist/framework/result-builder.d.ts +74 -0
  349. package/dist/framework/result-builder.d.ts.map +1 -0
  350. package/dist/framework/result-builder.js +154 -0
  351. package/dist/framework/result-builder.js.map +1 -0
  352. package/dist/framework/scope-registry.d.ts +38 -0
  353. package/dist/framework/scope-registry.d.ts.map +1 -0
  354. package/dist/framework/scope-registry.js +77 -0
  355. package/dist/framework/scope-registry.js.map +1 -0
  356. package/dist/framework/scope-resolver.d.ts +23 -0
  357. package/dist/framework/scope-resolver.d.ts.map +1 -0
  358. package/dist/framework/scope-resolver.js +102 -0
  359. package/dist/framework/scope-resolver.js.map +1 -0
  360. package/dist/framework/severity-mapping.d.ts +17 -0
  361. package/dist/framework/severity-mapping.d.ts.map +1 -0
  362. package/dist/framework/severity-mapping.js +71 -0
  363. package/dist/framework/severity-mapping.js.map +1 -0
  364. package/dist/framework/strip-literals.d.ts +73 -0
  365. package/dist/framework/strip-literals.d.ts.map +1 -0
  366. package/dist/framework/strip-literals.js +213 -0
  367. package/dist/framework/strip-literals.js.map +1 -0
  368. package/dist/index.d.ts +47 -0
  369. package/dist/index.d.ts.map +1 -0
  370. package/dist/index.js +64 -0
  371. package/dist/index.js.map +1 -0
  372. package/dist/internal.d.ts +17 -0
  373. package/dist/internal.d.ts.map +1 -0
  374. package/dist/internal.js +17 -0
  375. package/dist/internal.js.map +1 -0
  376. package/dist/persistence/session-payload.d.ts +68 -0
  377. package/dist/persistence/session-payload.d.ts.map +1 -0
  378. package/dist/persistence/session-payload.js +78 -0
  379. package/dist/persistence/session-payload.js.map +1 -0
  380. package/dist/persistence/session-payload.test.d.ts +11 -0
  381. package/dist/persistence/session-payload.test.d.ts.map +1 -0
  382. package/dist/persistence/session-payload.test.js +80 -0
  383. package/dist/persistence/session-payload.test.js.map +1 -0
  384. package/dist/persistence/session-replay.d.ts +14 -0
  385. package/dist/persistence/session-replay.d.ts.map +1 -0
  386. package/dist/persistence/session-replay.js +85 -0
  387. package/dist/persistence/session-replay.js.map +1 -0
  388. package/dist/persistence/session-replay.test.d.ts +10 -0
  389. package/dist/persistence/session-replay.test.d.ts.map +1 -0
  390. package/dist/persistence/session-replay.test.js +171 -0
  391. package/dist/persistence/session-replay.test.js.map +1 -0
  392. package/dist/plugins/__tests__/check-package-discovery.test.d.ts +2 -0
  393. package/dist/plugins/__tests__/check-package-discovery.test.d.ts.map +1 -0
  394. package/dist/plugins/__tests__/check-package-discovery.test.js +48 -0
  395. package/dist/plugins/__tests__/check-package-discovery.test.js.map +1 -0
  396. package/dist/plugins/__tests__/lang-domain.test.d.ts +2 -0
  397. package/dist/plugins/__tests__/lang-domain.test.d.ts.map +1 -0
  398. package/dist/plugins/__tests__/lang-domain.test.js +192 -0
  399. package/dist/plugins/__tests__/lang-domain.test.js.map +1 -0
  400. package/dist/plugins/__tests__/loader.test.d.ts +2 -0
  401. package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
  402. package/dist/plugins/__tests__/loader.test.js +271 -0
  403. package/dist/plugins/__tests__/loader.test.js.map +1 -0
  404. package/dist/plugins/check-package-discovery.d.ts +19 -0
  405. package/dist/plugins/check-package-discovery.d.ts.map +1 -0
  406. package/dist/plugins/check-package-discovery.js +34 -0
  407. package/dist/plugins/check-package-discovery.js.map +1 -0
  408. package/dist/plugins/loader.d.ts +32 -0
  409. package/dist/plugins/loader.d.ts.map +1 -0
  410. package/dist/plugins/loader.js +198 -0
  411. package/dist/plugins/loader.js.map +1 -0
  412. package/dist/plugins/types.d.ts +29 -0
  413. package/dist/plugins/types.d.ts.map +1 -0
  414. package/dist/plugins/types.js +9 -0
  415. package/dist/plugins/types.js.map +1 -0
  416. package/dist/recipes/__tests__/built-in-recipes.test.d.ts +2 -0
  417. package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
  418. package/dist/recipes/__tests__/built-in-recipes.test.js +93 -0
  419. package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
  420. package/dist/recipes/__tests__/check-config.test.d.ts +12 -0
  421. package/dist/recipes/__tests__/check-config.test.d.ts.map +1 -0
  422. package/dist/recipes/__tests__/check-config.test.js +90 -0
  423. package/dist/recipes/__tests__/check-config.test.js.map +1 -0
  424. package/dist/recipes/__tests__/check-resolution.test.d.ts +2 -0
  425. package/dist/recipes/__tests__/check-resolution.test.d.ts.map +1 -0
  426. package/dist/recipes/__tests__/check-resolution.test.js +160 -0
  427. package/dist/recipes/__tests__/check-resolution.test.js.map +1 -0
  428. package/dist/recipes/__tests__/execution-branches.test.d.ts +10 -0
  429. package/dist/recipes/__tests__/execution-branches.test.d.ts.map +1 -0
  430. package/dist/recipes/__tests__/execution-branches.test.js +612 -0
  431. package/dist/recipes/__tests__/execution-branches.test.js.map +1 -0
  432. package/dist/recipes/__tests__/execution-paths.test.d.ts +10 -0
  433. package/dist/recipes/__tests__/execution-paths.test.d.ts.map +1 -0
  434. package/dist/recipes/__tests__/execution-paths.test.js +280 -0
  435. package/dist/recipes/__tests__/execution-paths.test.js.map +1 -0
  436. package/dist/recipes/__tests__/registry.test.d.ts +2 -0
  437. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  438. package/dist/recipes/__tests__/registry.test.js +89 -0
  439. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  440. package/dist/recipes/__tests__/retry.test.d.ts +2 -0
  441. package/dist/recipes/__tests__/retry.test.d.ts.map +1 -0
  442. package/dist/recipes/__tests__/retry.test.js +75 -0
  443. package/dist/recipes/__tests__/retry.test.js.map +1 -0
  444. package/dist/recipes/__tests__/run-one-check.test.d.ts +14 -0
  445. package/dist/recipes/__tests__/run-one-check.test.d.ts.map +1 -0
  446. package/dist/recipes/__tests__/run-one-check.test.js +182 -0
  447. package/dist/recipes/__tests__/run-one-check.test.js.map +1 -0
  448. package/dist/recipes/__tests__/service.test.d.ts +11 -0
  449. package/dist/recipes/__tests__/service.test.d.ts.map +1 -0
  450. package/dist/recipes/__tests__/service.test.js +572 -0
  451. package/dist/recipes/__tests__/service.test.js.map +1 -0
  452. package/dist/recipes/built-in-recipes.d.ts +14 -0
  453. package/dist/recipes/built-in-recipes.d.ts.map +1 -0
  454. package/dist/recipes/built-in-recipes.js +241 -0
  455. package/dist/recipes/built-in-recipes.js.map +1 -0
  456. package/dist/recipes/check-config.d.ts +56 -0
  457. package/dist/recipes/check-config.d.ts.map +1 -0
  458. package/dist/recipes/check-config.js +61 -0
  459. package/dist/recipes/check-config.js.map +1 -0
  460. package/dist/recipes/check-resolution.d.ts +36 -0
  461. package/dist/recipes/check-resolution.d.ts.map +1 -0
  462. package/dist/recipes/check-resolution.js +81 -0
  463. package/dist/recipes/check-resolution.js.map +1 -0
  464. package/dist/recipes/check-result-processor.d.ts +51 -0
  465. package/dist/recipes/check-result-processor.d.ts.map +1 -0
  466. package/dist/recipes/check-result-processor.js +197 -0
  467. package/dist/recipes/check-result-processor.js.map +1 -0
  468. package/dist/recipes/parallel-execution.d.ts +38 -0
  469. package/dist/recipes/parallel-execution.d.ts.map +1 -0
  470. package/dist/recipes/parallel-execution.js +61 -0
  471. package/dist/recipes/parallel-execution.js.map +1 -0
  472. package/dist/recipes/registry.d.ts +47 -0
  473. package/dist/recipes/registry.d.ts.map +1 -0
  474. package/dist/recipes/registry.js +70 -0
  475. package/dist/recipes/registry.js.map +1 -0
  476. package/dist/recipes/retry.d.ts +29 -0
  477. package/dist/recipes/retry.d.ts.map +1 -0
  478. package/dist/recipes/retry.js +23 -0
  479. package/dist/recipes/retry.js.map +1 -0
  480. package/dist/recipes/run-one-check.d.ts +59 -0
  481. package/dist/recipes/run-one-check.d.ts.map +1 -0
  482. package/dist/recipes/run-one-check.js +174 -0
  483. package/dist/recipes/run-one-check.js.map +1 -0
  484. package/dist/recipes/sequential-execution.d.ts +12 -0
  485. package/dist/recipes/sequential-execution.d.ts.map +1 -0
  486. package/dist/recipes/sequential-execution.js +48 -0
  487. package/dist/recipes/sequential-execution.js.map +1 -0
  488. package/dist/recipes/service-types.d.ts +87 -0
  489. package/dist/recipes/service-types.d.ts.map +1 -0
  490. package/dist/recipes/service-types.js +8 -0
  491. package/dist/recipes/service-types.js.map +1 -0
  492. package/dist/recipes/service.d.ts +73 -0
  493. package/dist/recipes/service.d.ts.map +1 -0
  494. package/dist/recipes/service.js +438 -0
  495. package/dist/recipes/service.js.map +1 -0
  496. package/dist/recipes/types.d.ts +155 -0
  497. package/dist/recipes/types.d.ts.map +1 -0
  498. package/dist/recipes/types.js +56 -0
  499. package/dist/recipes/types.js.map +1 -0
  500. package/dist/scaffold/config-block.d.ts +17 -0
  501. package/dist/scaffold/config-block.d.ts.map +1 -0
  502. package/dist/scaffold/config-block.js +30 -0
  503. package/dist/scaffold/config-block.js.map +1 -0
  504. package/dist/scaffold/examples.d.ts +30 -0
  505. package/dist/scaffold/examples.d.ts.map +1 -0
  506. package/dist/scaffold/examples.js +129 -0
  507. package/dist/scaffold/examples.js.map +1 -0
  508. package/dist/scope-augmentation.d.ts +77 -0
  509. package/dist/scope-augmentation.d.ts.map +1 -0
  510. package/dist/scope-augmentation.js +31 -0
  511. package/dist/scope-augmentation.js.map +1 -0
  512. package/dist/signalers/__tests__/loader.test.d.ts +2 -0
  513. package/dist/signalers/__tests__/loader.test.d.ts.map +1 -0
  514. package/dist/signalers/__tests__/loader.test.js +141 -0
  515. package/dist/signalers/__tests__/loader.test.js.map +1 -0
  516. package/dist/signalers/__tests__/violation-to-signal.test.d.ts +2 -0
  517. package/dist/signalers/__tests__/violation-to-signal.test.d.ts.map +1 -0
  518. package/dist/signalers/__tests__/violation-to-signal.test.js +59 -0
  519. package/dist/signalers/__tests__/violation-to-signal.test.js.map +1 -0
  520. package/dist/signalers/index.d.ts +8 -0
  521. package/dist/signalers/index.d.ts.map +1 -0
  522. package/dist/signalers/index.js +9 -0
  523. package/dist/signalers/index.js.map +1 -0
  524. package/dist/signalers/loader.d.ts +30 -0
  525. package/dist/signalers/loader.d.ts.map +1 -0
  526. package/dist/signalers/loader.js +120 -0
  527. package/dist/signalers/loader.js.map +1 -0
  528. package/dist/signalers/schema.d.ts +60 -0
  529. package/dist/signalers/schema.d.ts.map +1 -0
  530. package/dist/signalers/schema.js +74 -0
  531. package/dist/signalers/schema.js.map +1 -0
  532. package/dist/signalers/types.d.ts +13 -0
  533. package/dist/signalers/types.d.ts.map +1 -0
  534. package/dist/signalers/types.js +5 -0
  535. package/dist/signalers/types.js.map +1 -0
  536. package/dist/signalers/violation-to-signal.d.ts +38 -0
  537. package/dist/signalers/violation-to-signal.d.ts.map +1 -0
  538. package/dist/signalers/violation-to-signal.js +43 -0
  539. package/dist/signalers/violation-to-signal.js.map +1 -0
  540. package/dist/targets/__tests__/loader.test.d.ts +2 -0
  541. package/dist/targets/__tests__/loader.test.d.ts.map +1 -0
  542. package/dist/targets/__tests__/loader.test.js +190 -0
  543. package/dist/targets/__tests__/loader.test.js.map +1 -0
  544. package/dist/targets/__tests__/target-registry.test.d.ts +2 -0
  545. package/dist/targets/__tests__/target-registry.test.d.ts.map +1 -0
  546. package/dist/targets/__tests__/target-registry.test.js +182 -0
  547. package/dist/targets/__tests__/target-registry.test.js.map +1 -0
  548. package/dist/targets/index.d.ts +18 -0
  549. package/dist/targets/index.d.ts.map +1 -0
  550. package/dist/targets/index.js +21 -0
  551. package/dist/targets/index.js.map +1 -0
  552. package/dist/targets/loader.d.ts +27 -0
  553. package/dist/targets/loader.d.ts.map +1 -0
  554. package/dist/targets/loader.js +178 -0
  555. package/dist/targets/loader.js.map +1 -0
  556. package/dist/targets/target-registry.d.ts +41 -0
  557. package/dist/targets/target-registry.d.ts.map +1 -0
  558. package/dist/targets/target-registry.js +71 -0
  559. package/dist/targets/target-registry.js.map +1 -0
  560. package/dist/targets/types.d.ts +14 -0
  561. package/dist/targets/types.d.ts.map +1 -0
  562. package/dist/targets/types.js +14 -0
  563. package/dist/targets/types.js.map +1 -0
  564. package/dist/tool.d.ts +61 -0
  565. package/dist/tool.d.ts.map +1 -0
  566. package/dist/tool.js +260 -0
  567. package/dist/tool.js.map +1 -0
  568. package/dist/types/findings.d.ts +113 -0
  569. package/dist/types/findings.d.ts.map +1 -0
  570. package/dist/types/findings.js +89 -0
  571. package/dist/types/findings.js.map +1 -0
  572. package/dist/types/severity.d.ts +15 -0
  573. package/dist/types/severity.d.ts.map +1 -0
  574. package/dist/types/severity.js +33 -0
  575. package/dist/types/severity.js.map +1 -0
  576. package/package.json +137 -0
@@ -0,0 +1,217 @@
1
+ // @fitness-ignore-file toctou-race-condition -- Tarjan's SCC strongConnect() walks Maps/Sets local to the function; entirely synchronous graph traversal, no async gap, safe in single-threaded Node.js
2
+ /**
3
+ * @fileoverview Project-wide import graph builder.
4
+ *
5
+ * Builds a file-level dependency graph from a set of TypeScript/JavaScript
6
+ * source files, plus a Tarjan's strongly-connected-components implementation
7
+ * for cycle detection. Used by structural-drift checks like
8
+ * circular-import-detection and module-coupling-fan-out.
9
+ *
10
+ * Module resolution is deliberately a heuristic: relative imports are
11
+ * resolved by trying common extension/index.ts suffixes; bare specifiers
12
+ * (npm packages) are dropped; tsconfig path aliases are NOT resolved
13
+ * (treated as unresolved — they simply don't appear as edges in the graph).
14
+ *
15
+ * This matches the heuristic the existing `phantom-dependency-detection`
16
+ * check uses, which has been shipping reliably. Adding tsconfig-aware
17
+ * resolution is a follow-up plan.
18
+ */
19
+ import * as path from 'node:path';
20
+ import ts from 'typescript';
21
+ import { getSharedSourceFile } from './parse-cache.js';
22
+ // =============================================================================
23
+ // PUBLIC API
24
+ // =============================================================================
25
+ /**
26
+ * Build an import graph from a collection of file paths and their content.
27
+ *
28
+ * Each file's TS AST is walked for top-level `import` and `export ... from`
29
+ * declarations. Relative specifiers (`./foo`, `../bar/baz.js`) are resolved
30
+ * against the importing file's directory using the heuristic in
31
+ * `resolveRelativeSpecifier`. Bare specifiers (`react`, `lodash`) are
32
+ * dropped — they don't represent intra-project edges.
33
+ *
34
+ * Files that fail to parse are still added as nodes (with no edges) so the
35
+ * graph remains complete.
36
+ */
37
+ export function buildImportGraph(files) {
38
+ const nodes = new Set(files.keys());
39
+ const outbound = new Map();
40
+ const inbound = new Map();
41
+ // Initialize empty edge sets for every node so callers can safely
42
+ // outbound.get(file) without checking for undefined.
43
+ for (const node of nodes) {
44
+ outbound.set(node, new Set());
45
+ inbound.set(node, new Set());
46
+ }
47
+ for (const [filePath, content] of files) {
48
+ const specifiers = extractImportSpecifiers(filePath, content);
49
+ for (const spec of specifiers) {
50
+ const resolved = resolveRelativeSpecifier(filePath, spec, nodes);
51
+ if (resolved !== null) {
52
+ outbound.get(filePath).add(resolved);
53
+ inbound.get(resolved).add(filePath);
54
+ }
55
+ }
56
+ }
57
+ return { nodes, outbound, inbound };
58
+ }
59
+ /**
60
+ * Find strongly-connected components in the graph using Tarjan's algorithm.
61
+ *
62
+ * Returns an array of SCCs, each represented as an array of node names. SCCs
63
+ * of size 1 represent a node with no cycle (or a self-loop, which is rare in
64
+ * import graphs). Cycle-detection callers typically filter to `scc.length > 1`
65
+ * to get only real multi-file cycles.
66
+ *
67
+ * Algorithm: standard iterative Tarjan's SCC. O(V + E), single pass.
68
+ */
69
+ export function findStronglyConnectedComponents(graph) {
70
+ const indexOf = new Map();
71
+ const lowlinkOf = new Map();
72
+ const onStack = new Set();
73
+ const stack = [];
74
+ const sccs = [];
75
+ let nextIndex = 0;
76
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- iterative Tarjan SCC: explicit stack to avoid recursion; the algorithm is canonical and reads cleanest as a single function
77
+ function strongConnect(start) {
78
+ const callStack = [];
79
+ indexOf.set(start, nextIndex);
80
+ lowlinkOf.set(start, nextIndex);
81
+ nextIndex++;
82
+ stack.push(start);
83
+ onStack.add(start);
84
+ callStack.push({
85
+ node: start,
86
+ neighbors: [...(graph.outbound.get(start) ?? [])],
87
+ next: 0,
88
+ });
89
+ while (callStack.length > 0) {
90
+ const frame = callStack.at(-1);
91
+ if (frame.next < frame.neighbors.length) {
92
+ const w = frame.neighbors[frame.next];
93
+ frame.next++;
94
+ if (!indexOf.has(w)) {
95
+ // Recurse into w.
96
+ indexOf.set(w, nextIndex);
97
+ lowlinkOf.set(w, nextIndex);
98
+ nextIndex++;
99
+ stack.push(w);
100
+ onStack.add(w);
101
+ callStack.push({
102
+ node: w,
103
+ neighbors: [...(graph.outbound.get(w) ?? [])],
104
+ next: 0,
105
+ });
106
+ continue;
107
+ }
108
+ if (onStack.has(w)) {
109
+ // Back edge — update v's lowlink.
110
+ const vLow = lowlinkOf.get(frame.node);
111
+ const wIdx = indexOf.get(w);
112
+ if (wIdx < vLow)
113
+ lowlinkOf.set(frame.node, wIdx);
114
+ }
115
+ continue;
116
+ }
117
+ // All neighbors processed — finalize this node.
118
+ const v = frame.node;
119
+ const vLow = lowlinkOf.get(v);
120
+ const vIdx = indexOf.get(v);
121
+ if (vLow === vIdx) {
122
+ // v is the root of an SCC — pop until v is removed.
123
+ const scc = [];
124
+ let w;
125
+ do {
126
+ w = stack.pop();
127
+ onStack.delete(w);
128
+ scc.push(w);
129
+ } while (w !== v);
130
+ sccs.push(scc);
131
+ }
132
+ callStack.pop();
133
+ // Propagate lowlink up to the parent frame.
134
+ if (callStack.length > 0) {
135
+ const parent = callStack.at(-1);
136
+ const parentLow = lowlinkOf.get(parent.node);
137
+ if (vLow < parentLow)
138
+ lowlinkOf.set(parent.node, vLow);
139
+ }
140
+ }
141
+ }
142
+ for (const node of graph.nodes) {
143
+ if (!indexOf.has(node)) {
144
+ strongConnect(node);
145
+ }
146
+ }
147
+ return sccs;
148
+ }
149
+ // =============================================================================
150
+ // INTERNAL HELPERS
151
+ // =============================================================================
152
+ /** Walk the AST and collect top-level import / export-from specifiers. */
153
+ function extractImportSpecifiers(filePath, content) {
154
+ const sourceFile = getSharedSourceFile(filePath, content);
155
+ if (sourceFile === null)
156
+ return [];
157
+ const specifiers = [];
158
+ for (const stmt of sourceFile.statements) {
159
+ // import foo from './bar'; import './side-effect'; import * as ns from './m';
160
+ if (ts.isImportDeclaration(stmt) && ts.isStringLiteral(stmt.moduleSpecifier)) {
161
+ specifiers.push(stmt.moduleSpecifier.text);
162
+ continue;
163
+ }
164
+ // export * from './foo'; export { x } from './foo';
165
+ if (ts.isExportDeclaration(stmt) &&
166
+ stmt.moduleSpecifier !== undefined &&
167
+ ts.isStringLiteral(stmt.moduleSpecifier)) {
168
+ specifiers.push(stmt.moduleSpecifier.text);
169
+ }
170
+ }
171
+ return specifiers;
172
+ }
173
+ /**
174
+ * Resolve a module specifier to an actual file path in the project, or
175
+ * return null if the specifier is non-relative (npm package, path alias) or
176
+ * doesn't resolve to a known project file.
177
+ *
178
+ * Supports:
179
+ * - `./foo` → `<dir>/foo.ts`, `.tsx`, `/index.ts`, `/index.tsx`
180
+ * - `./foo.js` → `<dir>/foo.ts` (ESM extension swap, common in TS+ESM)
181
+ * - `./foo.ts` → `<dir>/foo.ts` (literal)
182
+ * - `../bar/baz` → resolved relative to importer's directory
183
+ *
184
+ * Does NOT support:
185
+ * - tsconfig `paths` aliases (deferred per plan)
186
+ * - npm packages (correctly dropped — out of scope for intra-project graph)
187
+ */
188
+ function resolveRelativeSpecifier(importerPath, specifier, knownPaths) {
189
+ // Only relative specifiers participate in the intra-project graph.
190
+ if (!specifier.startsWith('.'))
191
+ return null;
192
+ const importerDir = path.dirname(importerPath);
193
+ const base = path.resolve(importerDir, specifier);
194
+ // Try the candidate paths in priority order. The first one that exists in
195
+ // the project's file set wins.
196
+ const candidates = [base];
197
+ // 1. Literal path (specifier already includes extension).
198
+ // 2. ESM extension swap: `.js` → `.ts` / `.tsx` (TypeScript ESM convention).
199
+ if (base.endsWith('.js')) {
200
+ candidates.push(base.slice(0, -3) + '.ts', base.slice(0, -3) + '.tsx');
201
+ }
202
+ if (base.endsWith('.jsx')) {
203
+ candidates.push(base.slice(0, -4) + '.tsx');
204
+ }
205
+ // 3. Append common extensions if the specifier was extension-less.
206
+ const hasExt = path.extname(base) !== '';
207
+ if (!hasExt) {
208
+ // Direct extensions and index resolution.
209
+ candidates.push(base + '.ts', base + '.tsx', base + '.js', base + '.jsx', path.join(base, 'index.ts'), path.join(base, 'index.tsx'), path.join(base, 'index.js'), path.join(base, 'index.jsx'));
210
+ }
211
+ for (const candidate of candidates) {
212
+ if (knownPaths.has(candidate))
213
+ return candidate;
214
+ }
215
+ return null;
216
+ }
217
+ //# sourceMappingURL=import-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/framework/import-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview Memory profiler for fitness checks
3
+ *
4
+ * Always-on, low-overhead memory tracking for check execution.
5
+ * Collects per-check profiles for trending analysis.
6
+ */
7
+ /** Memory usage profile recorded for a single check execution */
8
+ export interface CheckMemoryProfile {
9
+ readonly checkId: string;
10
+ readonly memoryBeforeMB: number;
11
+ readonly memoryAfterMB: number;
12
+ readonly memoryDeltaMB: number;
13
+ readonly violationCount: number;
14
+ readonly durationMs: number;
15
+ }
16
+ /** Aggregated memory profiling summary across all check executions */
17
+ interface MemoryProfileSummary {
18
+ readonly prewarmMemoryMB: number;
19
+ readonly peakMemoryMB: number;
20
+ readonly checksExceedingThreshold: number;
21
+ readonly topConsumers: readonly CheckMemoryProfile[];
22
+ readonly allProfiles: readonly CheckMemoryProfile[];
23
+ }
24
+ /** Low-overhead memory profiler that tracks per-check heap usage during fitness runs */
25
+ declare class MemoryProfiler {
26
+ private readonly profiles;
27
+ private prewarmMemoryMB;
28
+ private peakMemoryMB;
29
+ private readonly warningThresholdMB;
30
+ constructor(warningThresholdMB?: number);
31
+ private takeSnapshot;
32
+ private bytesToMB;
33
+ /** Record memory baseline after cache prewarm completes */
34
+ recordPrewarmComplete(): void;
35
+ /** Return current heap usage in megabytes */
36
+ getCurrentMemoryMB(): number;
37
+ /** Record memory before a check starts; returns the pre-check heap in MB */
38
+ recordCheckStart(): number;
39
+ /** Record memory after a check completes and return the check's memory profile */
40
+ recordCheckComplete(checkId: string, memoryBeforeMB: number, violationCount: number, durationMs: number): CheckMemoryProfile;
41
+ /** Check whether a memory delta exceeds the configured warning threshold */
42
+ exceedsThreshold(deltaMB: number): boolean;
43
+ /** Return the configured warning threshold in megabytes */
44
+ getWarningThresholdMB(): number;
45
+ /** Build and return an aggregated summary of all recorded check profiles */
46
+ getSummary(): MemoryProfileSummary;
47
+ /** Reset all recorded profiles and counters */
48
+ reset(): void;
49
+ }
50
+ /** Shared singleton memory profiler instance used across fitness check runs */
51
+ export declare const memoryProfiler: MemoryProfiler;
52
+ export {};
53
+ //# sourceMappingURL=memory-profiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-profiler.d.ts","sourceRoot":"","sources":["../../src/framework/memory-profiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,sEAAsE;AACtE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACrD;AAID,wFAAwF;AACxF,cAAM,cAAc;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,kBAAkB,SAAsC;IAIpE,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,SAAS;IAIjB,2DAA2D;IAC3D,qBAAqB,IAAI,IAAI;IAM7B,6CAA6C;IAC7C,kBAAkB,IAAI,MAAM;IAK5B,4EAA4E;IAC5E,gBAAgB,IAAI,MAAM;IAI1B,kFAAkF;IAClF,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,kBAAkB;IAqBrB,4EAA4E;IAC5E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1C,2DAA2D;IAC3D,qBAAqB,IAAI,MAAM;IAI/B,4EAA4E;IAC5E,UAAU,IAAI,oBAAoB;IAgBlC,+CAA+C;IAC/C,KAAK,IAAI,IAAI;CAKd;AAED,+EAA+E;AAC/E,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @fileoverview Memory profiler for fitness checks
3
+ *
4
+ * Always-on, low-overhead memory tracking for check execution.
5
+ * Collects per-check profiles for trending analysis.
6
+ */
7
+ const DEFAULT_MEMORY_WARNING_THRESHOLD_MB = 200;
8
+ /** Low-overhead memory profiler that tracks per-check heap usage during fitness runs */
9
+ class MemoryProfiler {
10
+ profiles = [];
11
+ prewarmMemoryMB = 0;
12
+ peakMemoryMB = 0;
13
+ warningThresholdMB;
14
+ constructor(warningThresholdMB = DEFAULT_MEMORY_WARNING_THRESHOLD_MB) {
15
+ this.warningThresholdMB = warningThresholdMB;
16
+ }
17
+ takeSnapshot() {
18
+ const mem = process.memoryUsage();
19
+ return {
20
+ heapUsed: mem.heapUsed,
21
+ heapTotal: mem.heapTotal,
22
+ external: mem.external,
23
+ arrayBuffers: mem.arrayBuffers,
24
+ rss: mem.rss,
25
+ };
26
+ }
27
+ bytesToMB(bytes) {
28
+ return bytes / 1024 / 1024;
29
+ }
30
+ /** Record memory baseline after cache prewarm completes */
31
+ recordPrewarmComplete() {
32
+ const snapshot = this.takeSnapshot();
33
+ this.prewarmMemoryMB = this.bytesToMB(snapshot.heapUsed);
34
+ this.peakMemoryMB = this.prewarmMemoryMB;
35
+ }
36
+ /** Return current heap usage in megabytes */
37
+ getCurrentMemoryMB() {
38
+ const snapshot = this.takeSnapshot();
39
+ return this.bytesToMB(snapshot.heapUsed);
40
+ }
41
+ /** Record memory before a check starts; returns the pre-check heap in MB */
42
+ recordCheckStart() {
43
+ return this.getCurrentMemoryMB();
44
+ }
45
+ /** Record memory after a check completes and return the check's memory profile */
46
+ recordCheckComplete(checkId, memoryBeforeMB, violationCount, durationMs) {
47
+ const memoryAfterMB = this.getCurrentMemoryMB();
48
+ const memoryDeltaMB = memoryAfterMB - memoryBeforeMB;
49
+ if (memoryAfterMB > this.peakMemoryMB) {
50
+ this.peakMemoryMB = memoryAfterMB;
51
+ }
52
+ const profile = {
53
+ checkId,
54
+ memoryBeforeMB: Math.round(memoryBeforeMB * 100) / 100,
55
+ memoryAfterMB: Math.round(memoryAfterMB * 100) / 100,
56
+ memoryDeltaMB: Math.round(memoryDeltaMB * 100) / 100,
57
+ violationCount,
58
+ durationMs,
59
+ };
60
+ this.profiles.push(profile);
61
+ return profile;
62
+ }
63
+ /** Check whether a memory delta exceeds the configured warning threshold */
64
+ exceedsThreshold(deltaMB) {
65
+ return deltaMB > this.warningThresholdMB;
66
+ }
67
+ /** Return the configured warning threshold in megabytes */
68
+ getWarningThresholdMB() {
69
+ return this.warningThresholdMB;
70
+ }
71
+ /** Build and return an aggregated summary of all recorded check profiles */
72
+ getSummary() {
73
+ const sortedProfiles = [...this.profiles].sort((a, b) => b.memoryDeltaMB - a.memoryDeltaMB);
74
+ const checksExceedingThreshold = this.profiles.filter((p) => p.memoryDeltaMB > this.warningThresholdMB).length;
75
+ return {
76
+ prewarmMemoryMB: Math.round(this.prewarmMemoryMB * 100) / 100,
77
+ peakMemoryMB: Math.round(this.peakMemoryMB * 100) / 100,
78
+ checksExceedingThreshold,
79
+ topConsumers: sortedProfiles.slice(0, 10),
80
+ allProfiles: this.profiles,
81
+ };
82
+ }
83
+ /** Reset all recorded profiles and counters */
84
+ reset() {
85
+ this.profiles.length = 0;
86
+ this.prewarmMemoryMB = 0;
87
+ this.peakMemoryMB = 0;
88
+ }
89
+ }
90
+ /** Shared singleton memory profiler instance used across fitness check runs */
91
+ export const memoryProfiler = new MemoryProfiler();
92
+ //# sourceMappingURL=memory-profiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-profiler.js","sourceRoot":"","sources":["../../src/framework/memory-profiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview TS SourceFile helper for framework/import-graph.ts.
3
+ *
4
+ * Sole export: `getSharedSourceFile`, a TS-specific convenience wrapper
5
+ * that resolves the TypeScript adapter from the language registry and
6
+ * parses through the language-aware cache (core/src/languages/
7
+ * parse-cache.ts), falling back to a direct parse when no adapter is
8
+ * registered (e.g. unit tests without CLI bootstrap).
9
+ *
10
+ * This file no longer re-exports the parse-cache lifecycle/getParseTree
11
+ * API — `import-graph.ts` is its only internal consumer. New TS check
12
+ * authors should import the canonical AST helpers from
13
+ * @opensip-cli/lang-typescript instead.
14
+ */
15
+ import ts from 'typescript';
16
+ /**
17
+ * Get a TypeScript SourceFile via the language-aware cache when the TS
18
+ * adapter is registered, falling back to a direct parse otherwise.
19
+ *
20
+ * @internal Used by framework/import-graph.ts. New TS check authors
21
+ * should import getSharedSourceFile from @opensip-cli/lang-typescript.
22
+ */
23
+ export declare function getSharedSourceFile(filePath: string, content: string): ts.SourceFile | null;
24
+ //# sourceMappingURL=parse-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-cache.d.ts","sourceRoot":"","sources":["../../src/framework/parse-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAe3F"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview TS SourceFile helper for framework/import-graph.ts.
3
+ *
4
+ * Sole export: `getSharedSourceFile`, a TS-specific convenience wrapper
5
+ * that resolves the TypeScript adapter from the language registry and
6
+ * parses through the language-aware cache (core/src/languages/
7
+ * parse-cache.ts), falling back to a direct parse when no adapter is
8
+ * registered (e.g. unit tests without CLI bootstrap).
9
+ *
10
+ * This file no longer re-exports the parse-cache lifecycle/getParseTree
11
+ * API — `import-graph.ts` is its only internal consumer. New TS check
12
+ * authors should import the canonical AST helpers from
13
+ * @opensip-cli/lang-typescript instead.
14
+ */
15
+ import { getParseTree, currentScope } from '@opensip-cli/core';
16
+ import ts from 'typescript';
17
+ /**
18
+ * Get a TypeScript SourceFile via the language-aware cache when the TS
19
+ * adapter is registered, falling back to a direct parse otherwise.
20
+ *
21
+ * @internal Used by framework/import-graph.ts. New TS check authors
22
+ * should import getSharedSourceFile from @opensip-cli/lang-typescript.
23
+ */
24
+ export function getSharedSourceFile(filePath, content) {
25
+ const adapter = currentScope()?.languages.get('typescript');
26
+ if (adapter) {
27
+ return getParseTree(adapter, filePath, content);
28
+ }
29
+ // No adapter registered yet (e.g. unit tests that run without CLI bootstrap).
30
+ // Fall back to direct parse — preserves prior behavior.
31
+ try {
32
+ return ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
33
+ /* v8 ignore start -- defensive: ts.createSourceFile is permissive (recovers from syntax errors) and effectively does not throw on real input */
34
+ }
35
+ catch {
36
+ // @fitness-ignore-next-line error-handling-quality -- defensive parse-or-null fallback for the no-adapter-bootstrap path; ts.createSourceFile is permissive and effectively unreachable on real input (see v8 ignore above).
37
+ return null;
38
+ }
39
+ /* v8 ignore stop */
40
+ }
41
+ //# sourceMappingURL=parse-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-cache.js","sourceRoot":"","sources":["../../src/framework/parse-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,OAAe;IACnE,MAAM,OAAO,GAAG,YAAY,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAyB,CAAC;IAC1E,CAAC;IACD,8EAA8E;IAC9E,wDAAwD;IACxD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/F,gJAAgJ;IAClJ,CAAC;IAAC,MAAM,CAAC;QACP,6NAA6N;QAC7N,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oBAAoB;AACtB,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @fileoverview PathMatcher - Strategy pattern for file matching
3
+ *
4
+ * Provides glob-based file matching with include/exclude patterns.
5
+ * Supports lazy evaluation and composition.
6
+ */
7
+ /**
8
+ * Options for PathMatcher.
9
+ */
10
+ export interface PathMatcherOptions {
11
+ /** Root directory to search from */
12
+ readonly cwd: string;
13
+ /** Glob patterns to include */
14
+ readonly include: readonly string[];
15
+ /** Glob patterns to exclude */
16
+ readonly exclude: readonly string[];
17
+ /** Additional exclusion patterns (combined with exclude) */
18
+ readonly additionalExcludes?: readonly string[];
19
+ }
20
+ /**
21
+ * Result of file matching operation.
22
+ */
23
+ export interface MatchResult {
24
+ /** Matched files (absolute paths) */
25
+ readonly files: readonly string[];
26
+ /** Files that were excluded */
27
+ readonly excluded: readonly string[];
28
+ /** Time taken for glob operation in ms */
29
+ readonly durationMs: number;
30
+ }
31
+ /**
32
+ * Strategy for matching files based on glob patterns.
33
+ * Supports both custom patterns and composition.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const matcher = PathMatcher.create({
38
+ * cwd: '/path/to/repo',
39
+ * include: ['src/**\/*.ts'],
40
+ * exclude: ['**\/__tests__/**'],
41
+ * });
42
+ * const files = await matcher.files();
43
+ * ```
44
+ */
45
+ export declare class PathMatcher {
46
+ private readonly options;
47
+ private constructor();
48
+ /**
49
+ * Create a PathMatcher from options.
50
+ */
51
+ static create(options: PathMatcherOptions): PathMatcher;
52
+ /**
53
+ * Get all matching files.
54
+ * @returns Array of absolute file paths matching the patterns
55
+ */
56
+ files(): Promise<readonly string[]>;
57
+ /**
58
+ * Get detailed match result including timing.
59
+ */
60
+ match(): Promise<MatchResult>;
61
+ /**
62
+ * Check if a file matches the patterns.
63
+ * @param filePath - Absolute path to check
64
+ * @returns True if file matches include patterns and is not excluded
65
+ */
66
+ matches(filePath: string): boolean;
67
+ /**
68
+ * Create a new PathMatcher with additional exclusions.
69
+ */
70
+ withExcludes(additionalExcludes: readonly string[]): PathMatcher;
71
+ /**
72
+ * Create a new PathMatcher that only includes TypeScript files.
73
+ */
74
+ typescriptOnly(): PathMatcher;
75
+ /**
76
+ * Create a new PathMatcher that excludes test files.
77
+ */
78
+ noTests(): PathMatcher;
79
+ /** Get the current working directory. */
80
+ get cwd(): string;
81
+ /** Get the include patterns. */
82
+ get includePatterns(): readonly string[];
83
+ /** Get the exclude patterns. */
84
+ get excludePatterns(): readonly string[];
85
+ }
86
+ //# sourceMappingURL=path-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-matcher.d.ts","sourceRoot":"","sources":["../../src/framework/path-matcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;IACF,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA5C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IAIvD;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAKzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAmCnC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoBlC;;OAEG;IACH,YAAY,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW;IAOhE;;OAEG;IACH,cAAc,IAAI,WAAW;IAgB7B;;OAEG;IACH,OAAO,IAAI,WAAW;IAUtB,yCAAyC;IACzC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,gCAAgC;IAChC,IAAI,eAAe,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED,gCAAgC;IAChC,IAAI,eAAe,IAAI,SAAS,MAAM,EAAE,CAEvC;CACF"}