@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 @@
1
+ {"version":3,"file":"scope-registry.d.ts","sourceRoot":"","sources":["../../src/framework/scope-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAIlF,OAAO,0BAA0B,CAAC;AAElC,gEAAgE;AAChE,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,IAAI,qBAAqB,CAE5D;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAgCD,+CAA+C;AAC/C,wBAAgB,oBAAoB,IAAI,aAAa,CAEpD;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,IAAI,qBAAqB,CAE7D;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,IAAI,gBAAgB,CAE1D"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview Scope-owned fitness registries — the simulation pattern.
3
+ *
4
+ * Each `RunScope` owns its own check + recipe registries (D7 — tool
5
+ * subscopes via module augmentation). The fitness tool's
6
+ * `contributeScope` hook constructs fresh registries per CLI invocation
7
+ * and attaches them to `scope.fitness.{checks,recipes}`. The module-level
8
+ * singletons (`defaultRegistry` / `defaultRecipeRegistry`) are gone —
9
+ * consumers read via `currentCheckRegistry()` / `currentRecipeRegistry()`,
10
+ * which route through the scope-bound instances and throw outside a scope.
11
+ *
12
+ * Public API (mirrors simulation's `createScenarioRegistry` /
13
+ * `currentScenarioRegistry`):
14
+ * - `createCheckRegistry()` — factory used by `contributeScope`.
15
+ * - `createRecipeRegistry()` — factory used by `contributeScope`.
16
+ * - `createFitnessLoadState()`— fresh `ensureChecksLoaded` lifecycle slot.
17
+ * - `currentCheckRegistry()` — reads `scope.fitness.checks`; throws
18
+ * outside a scope / when the subscope is absent.
19
+ * - `currentRecipeRegistry()` — reads `scope.fitness.recipes`; same throws.
20
+ * - `currentFitnessLoadState()` — reads `scope.fitness.load`; same throws.
21
+ */
22
+ import { currentScope } from '@opensip-cli/core';
23
+ import { FitnessRecipeRegistry } from '../recipes/registry.js';
24
+ import { CheckRegistry } from './registry.js';
25
+ // Side-effect import: ensures the `ScopeContribution.fitness` augmentation is
26
+ // loaded so `scope.fitness` is the correctly-typed slot at every read site.
27
+ import '../scope-augmentation.js';
28
+ /** Construct a fresh check registry for a single `RunScope`. */
29
+ export function createCheckRegistry() {
30
+ return new CheckRegistry();
31
+ }
32
+ /** Construct a fresh recipe registry (built-ins pre-seeded) for a single `RunScope`. */
33
+ export function createRecipeRegistry() {
34
+ return new FitnessRecipeRegistry();
35
+ }
36
+ /** Construct a fresh, empty `ensureChecksLoaded` lifecycle slot for a `RunScope`. */
37
+ export function createFitnessLoadState() {
38
+ return { loadedFor: null, pluginLoadErrors: [], loadWarnings: [] };
39
+ }
40
+ /**
41
+ * Read the current scope's fitness subscope. Throws when no scope is
42
+ * active or when the fitness subscope is missing — both indicate the
43
+ * caller is running outside the CLI's pre-action-hook (or the test
44
+ * fixture forgot to construct + enter a scope).
45
+ *
46
+ * @throws {Error} When called outside `runWithScope(...)`, or when the
47
+ * active scope has no fitness subscope.
48
+ */
49
+ function currentFitnessSubscope() {
50
+ const scope = currentScope();
51
+ if (!scope) {
52
+ throw new Error('fitness: scope read attempted outside a RunScope. ' +
53
+ 'Wrap the call site in runWithScope (production: pre-action-hook handles ' +
54
+ 'this; tests: use makeTestScope + fitnessTool.contributeScope or construct ' +
55
+ 'the registries directly).');
56
+ }
57
+ if (!scope.fitness) {
58
+ throw new Error('fitness: scope.fitness is missing. The fitness tool must be ' +
59
+ 'registered and its contributeScope hook must run before check/recipe reads. ' +
60
+ '(production: bootstrap registers fitnessTool; tests: call ' +
61
+ 'fitnessTool.contributeScope() after makeTestScope.)');
62
+ }
63
+ return scope.fitness;
64
+ }
65
+ /** Read the current scope's check registry. */
66
+ export function currentCheckRegistry() {
67
+ return currentFitnessSubscope().checks;
68
+ }
69
+ /** Read the current scope's recipe registry. */
70
+ export function currentRecipeRegistry() {
71
+ return currentFitnessSubscope().recipes;
72
+ }
73
+ /** Read the current scope's `ensureChecksLoaded` lifecycle state. */
74
+ export function currentFitnessLoadState() {
75
+ return currentFitnessSubscope().load;
76
+ }
77
+ //# sourceMappingURL=scope-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-registry.js","sourceRoot":"","sources":["../../src/framework/scope-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,8EAA8E;AAC9E,4EAA4E;AAC5E,OAAO,0BAA0B,CAAC;AAElC,gEAAgE;AAChE,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,qBAAqB,EAAE,CAAC;AACrC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,sBAAsB;IACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB;IAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oDAAoD;YAClD,0EAA0E;YAC1E,4EAA4E;YAC5E,2BAA2B,CAC9B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,8EAA8E;YAC9E,4DAA4D;YAC5D,qDAAqD,CACxD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB;IAClC,OAAO,sBAAsB,EAAE,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,qBAAqB;IACnC,OAAO,sBAAsB,EAAE,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,uBAAuB;IACrC,OAAO,sBAAsB,EAAE,CAAC,IAAI,CAAC;AACvC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Scope-based file resolution for fitness checks
3
+ *
4
+ * Checks declare intent (languages + concerns), targets declare reality
5
+ * (languages + concerns + globs), and this module resolves the match.
6
+ *
7
+ * Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
8
+ * Per-check resolution is a pure in-memory lookup — no redundant I/O.
9
+ */
10
+ import type { CheckScope } from './check-config.js';
11
+ import type { TargetRegistry } from '../targets/target-registry.js';
12
+ import type { TargetsConfig } from '../targets/types.js';
13
+ /**
14
+ * Build the complete check-to-files map for all checks with scopes or overrides.
15
+ *
16
+ * All targets are globbed once upfront. Per-check resolution is a pure
17
+ * in-memory lookup against the pre-resolved file lists.
18
+ */
19
+ export declare function buildScopeBasedFileMap(checks: readonly {
20
+ slug: string;
21
+ scope?: CheckScope;
22
+ }[], registry: TargetRegistry, config: TargetsConfig, rootDir: string): Map<string, readonly string[]>;
23
+ //# sourceMappingURL=scope-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolver.d.ts","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAuHzD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,EAAE,EACvD,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAgBhC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileoverview Scope-based file resolution for fitness checks
3
+ *
4
+ * Checks declare intent (languages + concerns), targets declare reality
5
+ * (languages + concerns + globs), and this module resolves the match.
6
+ *
7
+ * Performance: all targets are globbed once upfront in buildScopeBasedFileMap.
8
+ * Per-check resolution is a pure in-memory lookup — no redundant I/O.
9
+ */
10
+ import { currentScope } from '@opensip-cli/core';
11
+ import { applyGlobalExcludes, preResolveAllTargets, resolveTargets } from '@opensip-cli/targeting';
12
+ // =============================================================================
13
+ // Pre-resolved target file cache
14
+ // =============================================================================
15
+ //
16
+ // The generic glob mechanics — `preResolveAllTargets` (deduped multi-target
17
+ // glob pass), `resolveTargets` (single-pass include/exclude expansion), and
18
+ // `applyGlobalExcludes` — now live ONCE in `@opensip-cli/targeting` (ADR-0037,
19
+ // Phase 0) and are imported above. Fitness keeps only the check-domain
20
+ // resolution below (`unionTargetFiles`, the 3-tier `resolveFilesForCheck`, and
21
+ // `buildScopeBasedFileMap`).
22
+ /**
23
+ * Look up pre-resolved files for a set of target names, union and deduplicate.
24
+ */
25
+ function unionTargetFiles(targetNames, resolvedTargets) {
26
+ if (targetNames.length === 1) {
27
+ return [...(resolvedTargets.get(targetNames[0]) ?? [])];
28
+ }
29
+ const files = new Set();
30
+ for (const name of targetNames) {
31
+ const targetFiles = resolvedTargets.get(name);
32
+ if (targetFiles) {
33
+ for (const f of targetFiles)
34
+ files.add(f);
35
+ }
36
+ }
37
+ return [...files].sort();
38
+ }
39
+ function resolveFilesForCheck(slug, scope, ctx) {
40
+ const { registry, config, rootDir, resolvedTargets } = ctx;
41
+ const { globalExcludes, checkOverrides } = config;
42
+ // When resolvedTargets is provided, globalExcludes are pre-applied — skip re-filtering
43
+ const maybeApplyExcludes = (files) => resolvedTargets ? files : applyGlobalExcludes(files, rootDir, globalExcludes);
44
+ // Use pre-resolved cache when available, otherwise fall back to direct glob
45
+ const lookupFiles = (targetRef) => {
46
+ const names = typeof targetRef === 'string' ? [targetRef] : targetRef;
47
+ if (resolvedTargets) {
48
+ return unionTargetFiles(names, resolvedTargets);
49
+ }
50
+ // Fallback: resolve directly via the substrate single-pass resolver
51
+ // (single-check mode without precomputed cache).
52
+ const targets = names
53
+ .map((name) => registry.getByName(name))
54
+ .filter((t) => t !== undefined);
55
+ return [...resolveTargets(targets, rootDir, globalExcludes)];
56
+ };
57
+ // 1. Check overrides take priority (for marketplace/third-party checks)
58
+ const override = checkOverrides[slug];
59
+ if (override) {
60
+ return maybeApplyExcludes(lookupFiles(override));
61
+ }
62
+ // 2. Scope-based matching
63
+ if (scope && (scope.languages.length > 0 || scope.concerns.length > 0)) {
64
+ // Re-canonicalize the check-declared languages at *execution* time against
65
+ // the current per-run LanguageRegistry. This makes `defineCheck` timing
66
+ // irrelevant: checks defined at module load (before any scope or language
67
+ // adapters are registered) still match correctly once a real RunScope with
68
+ // registered adapters is active. The TargetRegistry.findByScope also
69
+ // canonicalizes defensively, but doing it at the resolver call site makes
70
+ // the "always canonicalize at match time" contract explicit and local.
71
+ const liveScopeLangs = scope.languages.map((l) => currentScope()?.languages.canonicalize(l) ?? l.toLowerCase());
72
+ const matchedTargets = registry.findByScope(liveScopeLangs, scope.concerns);
73
+ if (matchedTargets.length === 0) {
74
+ return [];
75
+ }
76
+ const names = matchedTargets.map((t) => t.config.name);
77
+ return maybeApplyExcludes(lookupFiles(names));
78
+ }
79
+ // 3. No scope, no override — undefined signals "use file cache fallback"
80
+ return undefined;
81
+ }
82
+ /**
83
+ * Build the complete check-to-files map for all checks with scopes or overrides.
84
+ *
85
+ * All targets are globbed once upfront. Per-check resolution is a pure
86
+ * in-memory lookup against the pre-resolved file lists.
87
+ */
88
+ export function buildScopeBasedFileMap(checks, registry, config, rootDir) {
89
+ // Pre-resolve all targets once — deduplicated glob pass across all targets.
90
+ // GlobalExcludes are applied during pre-resolution so per-check lookups are pure in-memory.
91
+ const resolvedTargets = preResolveAllTargets(registry, config.globalExcludes, rootDir);
92
+ const ctx = { registry, config, rootDir, resolvedTargets };
93
+ const result = new Map();
94
+ for (const check of checks) {
95
+ const files = resolveFilesForCheck(check.slug, check.scope, ctx);
96
+ if (files !== undefined) {
97
+ result.set(check.slug, files);
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ //# sourceMappingURL=scope-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolver.js","sourceRoot":"","sources":["../../src/framework/scope-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileoverview Shared severity and category mapping for fitness checks
3
+ *
4
+ * Maps FindingSeverity to SignalSeverity and check category strings
5
+ * to SignalCategory. Used by defineCheck and PatternDetector.
6
+ */
7
+ import type { FindingSeverity } from '../types/findings.js';
8
+ import type { SignalSeverity, SignalCategory } from '@opensip-cli/core';
9
+ /**
10
+ * Map FindingSeverity to SignalSeverity. Release 2.13.0 (§5.9): delegates to the
11
+ * central `SeverityPolicy` (one author→wire home), byte-identical
12
+ * (`error → high`, `warning → medium`).
13
+ */
14
+ export declare function mapFindingSeverity(severity: FindingSeverity): SignalSeverity;
15
+ /** Map check tags to SignalCategory (first matching tag wins) */
16
+ export declare function mapTagsToSignalCategory(tags: readonly string[]): SignalCategory;
17
+ //# sourceMappingURL=severity-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity-mapping.d.ts","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAE5E;AAiDD,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAO/E"}
@@ -0,0 +1,71 @@
1
+ // @fitness-ignore-file project-readme-existence -- internal module, not a package root
2
+ /**
3
+ * @fileoverview Shared severity and category mapping for fitness checks
4
+ *
5
+ * Maps FindingSeverity to SignalSeverity and check category strings
6
+ * to SignalCategory. Used by defineCheck and PatternDetector.
7
+ */
8
+ import { SeverityPolicy, logger } from '@opensip-cli/core';
9
+ /**
10
+ * Map FindingSeverity to SignalSeverity. Release 2.13.0 (§5.9): delegates to the
11
+ * central `SeverityPolicy` (one author→wire home), byte-identical
12
+ * (`error → high`, `warning → medium`).
13
+ */
14
+ export function mapFindingSeverity(severity) {
15
+ return SeverityPolicy.liftAuthorSeverity(severity);
16
+ }
17
+ /**
18
+ * Tag → category lookup table. Frozen to make accidental mutation
19
+ * impossible. The original 7-arm switch translated literally into this
20
+ * record; ordering of categories doesn't matter (the iteration walks
21
+ * the input tag list, not the table).
22
+ *
23
+ * The `quality` → `warning` mapping mirrors the pre-table fallback:
24
+ * "this is a low-severity quality concern, surface it as a warning."
25
+ */
26
+ const TAG_TO_CATEGORY = Object.freeze({
27
+ security: 'security',
28
+ performance: 'performance',
29
+ architecture: 'architecture',
30
+ quality: 'warning',
31
+ resilience: 'resilience',
32
+ testing: 'testing',
33
+ documentation: 'documentation',
34
+ });
35
+ const KNOWN_CATEGORY_TAGS = new Set(Object.keys(TAG_TO_CATEGORY));
36
+ /**
37
+ * Tags we have already warned about. Avoids spamming the warn channel
38
+ * for the same misspelled tag on every check that carries it. Cleared
39
+ * implicitly on process restart.
40
+ */
41
+ const warnedUnknownTagSets = new Set();
42
+ function maybeWarnUnknownTags(tags) {
43
+ if (tags.length === 0)
44
+ return;
45
+ const hasKnown = tags.some((tag) => KNOWN_CATEGORY_TAGS.has(tag));
46
+ if (hasKnown)
47
+ return;
48
+ const sorted = [...tags].sort();
49
+ const key = sorted.join(',');
50
+ if (warnedUnknownTagSets.has(key))
51
+ return;
52
+ warnedUnknownTagSets.add(key);
53
+ logger.warn({
54
+ evt: 'fitness.severity_mapping.unknown_tags',
55
+ module: 'fitness:framework',
56
+ msg: 'check tags do not include any known signal category — falling back to "warning"',
57
+ tags: sorted,
58
+ knownCategoryTags: [...KNOWN_CATEGORY_TAGS].sort(),
59
+ });
60
+ }
61
+ /** Map check tags to SignalCategory (first matching tag wins) */
62
+ export function mapTagsToSignalCategory(tags) {
63
+ for (const tag of tags) {
64
+ const category = TAG_TO_CATEGORY[tag];
65
+ if (category !== undefined)
66
+ return category;
67
+ }
68
+ maybeWarnUnknownTags(tags);
69
+ return 'warning';
70
+ }
71
+ //# sourceMappingURL=severity-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity-mapping.js","sourceRoot":"","sources":["../../src/framework/severity-mapping.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,OAAO,cAAc,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,eAAe,GAA6C,MAAM,CAAC,MAAM,CAAC;IAC9E,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAElE;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE/C,SAAS,oBAAoB,CAAC,IAAuB;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,uCAAuC;QAC5C,MAAM,EAAE,mBAAmB;QAC3B,GAAG,EAAE,iFAAiF;QACtF,IAAI,EAAE,MAAM;QACZ,iBAAiB,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,IAAI,EAAE;KACnD,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,IAAuB;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;IAC9C,CAAC;IACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Shared utilities for stripping string literal and comment
3
+ * content from source code. Used by fitness checks to avoid false positives
4
+ * from patterns appearing inside string literals or comments.
5
+ *
6
+ * Canonical rationale for the two-stripper split
7
+ * ----------------------------------------------
8
+ * Fitness ships two complementary content-stripping families and this is
9
+ * the canonical place that explains why both exist (audit 2026-05-23 F9):
10
+ *
11
+ * 1. **This module** — regex-based, **language-agnostic**, no AST
12
+ * dependency. Used by checks that scan Python/Go/Java/C++/universal
13
+ * text where a real parser would be overkill (or unavailable). Trades
14
+ * off precision: edge cases like nested template literals or escaped
15
+ * quotes inside comments are best-effort.
16
+ *
17
+ * 2. **`filterContent` in `@opensip-cli/lang-typescript`** — uses the
18
+ * real TypeScript scanner, position-preserving (string content is
19
+ * replaced with whitespace of equal length so line/column numbers
20
+ * survive). Cached. Used exclusively by TS-aware checks where the
21
+ * precision matters.
22
+ *
23
+ * The dispatch boundary is `applyContentFilter` in
24
+ * `@opensip-cli/core/languages/content-filter-dispatch.ts` — checks
25
+ * declare a `contentFilter` mode (`'strip-strings'`,
26
+ * `'strip-strings-and-comments'`, `'raw'`) and the language adapter for
27
+ * the file's extension routes to the right family. New strippers plug in
28
+ * by implementing the `LanguageAdapter` contract; nothing in the check
29
+ * layer needs to change.
30
+ */
31
+ /**
32
+ * Strip string literal contents from a single line.
33
+ * Replaces content inside '...', "...", and `...` with empty strings.
34
+ * Used by checks for per-line pattern matching to avoid false positives
35
+ * from patterns appearing inside string literals.
36
+ */
37
+ export declare function stripStringLiterals(line: string): string;
38
+ /**
39
+ * Strip string literals and single-line comments from full file content.
40
+ * Used by checks for quick-filter gates to avoid matching keywords
41
+ * that only appear in documentation strings or comments.
42
+ */
43
+ /**
44
+ * Check if a position in a line is inside a string literal.
45
+ * Scans characters before the match position for unescaped quotes/backticks.
46
+ * Used by checks to avoid false positives from suggestion/description text.
47
+ */
48
+ export declare function isInsideStringLiteral(line: string, matchIndex: number): boolean;
49
+ /**
50
+ * Strip string literals and single-line comments from full file content.
51
+ * Used by checks for quick-filter gates to avoid matching keywords
52
+ * that only appear in documentation strings or comments.
53
+ */
54
+ export declare function stripStringsAndComments(content: string): string;
55
+ /**
56
+ * Strip strings, single-line comments, AND block comments while preserving
57
+ * BOTH character positions and line numbers. Each stripped character is
58
+ * replaced with a space (non-newline) so the output has identical length
59
+ * and line offsets to the input. Use this when downstream processing
60
+ * needs to map a match index back to a line number in the ORIGINAL
61
+ * source — `stripStringsAndComments` collapses string literals to empty
62
+ * pairs, which shifts indexes and breaks `getLineNumber(content, idx)`.
63
+ *
64
+ * Strips:
65
+ * - Single-quoted, double-quoted, and template-literal string contents
66
+ * - Single-line `// ...` comments (to end of line)
67
+ * - Block `/* ... *\/` comments (including JSDoc `/** ... *\/`)
68
+ *
69
+ * Preserves: newlines, total character count, character positions of
70
+ * code OUTSIDE these regions.
71
+ */
72
+ export declare function stripStringsAndCommentsPreservingPositions(content: string): string;
73
+ //# sourceMappingURL=strip-literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-literals.d.ts","sourceRoot":"","sources":["../../src/framework/strip-literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAOD;;;;GAIG;AACH;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAyB/E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,0CAA0C,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuGlF"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * @fileoverview Shared utilities for stripping string literal and comment
3
+ * content from source code. Used by fitness checks to avoid false positives
4
+ * from patterns appearing inside string literals or comments.
5
+ *
6
+ * Canonical rationale for the two-stripper split
7
+ * ----------------------------------------------
8
+ * Fitness ships two complementary content-stripping families and this is
9
+ * the canonical place that explains why both exist (audit 2026-05-23 F9):
10
+ *
11
+ * 1. **This module** — regex-based, **language-agnostic**, no AST
12
+ * dependency. Used by checks that scan Python/Go/Java/C++/universal
13
+ * text where a real parser would be overkill (or unavailable). Trades
14
+ * off precision: edge cases like nested template literals or escaped
15
+ * quotes inside comments are best-effort.
16
+ *
17
+ * 2. **`filterContent` in `@opensip-cli/lang-typescript`** — uses the
18
+ * real TypeScript scanner, position-preserving (string content is
19
+ * replaced with whitespace of equal length so line/column numbers
20
+ * survive). Cached. Used exclusively by TS-aware checks where the
21
+ * precision matters.
22
+ *
23
+ * The dispatch boundary is `applyContentFilter` in
24
+ * `@opensip-cli/core/languages/content-filter-dispatch.ts` — checks
25
+ * declare a `contentFilter` mode (`'strip-strings'`,
26
+ * `'strip-strings-and-comments'`, `'raw'`) and the language adapter for
27
+ * the file's extension routes to the right family. New strippers plug in
28
+ * by implementing the `LanguageAdapter` contract; nothing in the check
29
+ * layer needs to change.
30
+ */
31
+ /**
32
+ * Strip string literal contents from a single line.
33
+ * Replaces content inside '...', "...", and `...` with empty strings.
34
+ * Used by checks for per-line pattern matching to avoid false positives
35
+ * from patterns appearing inside string literals.
36
+ */
37
+ export function stripStringLiterals(line) {
38
+ return line
39
+ .replaceAll(/'(?:[^'\\]|\\.)*'/g, "''")
40
+ .replaceAll(/"(?:[^"\\]|\\.)*"/g, '""')
41
+ .replaceAll(/`(?:[^`\\]|\\.)*`/gs, '``');
42
+ }
43
+ /** Shared regex patterns for string literal replacement */
44
+ const SINGLE_QUOTE_RE = /'(?:[^'\\]|\\.)*'/g;
45
+ const DOUBLE_QUOTE_RE = /"(?:[^"\\]|\\.)*"/g;
46
+ const BACKTICK_RE = /`(?:[^`\\]|\\.)*`/gs;
47
+ /**
48
+ * Strip string literals and single-line comments from full file content.
49
+ * Used by checks for quick-filter gates to avoid matching keywords
50
+ * that only appear in documentation strings or comments.
51
+ */
52
+ /**
53
+ * Check if a position in a line is inside a string literal.
54
+ * Scans characters before the match position for unescaped quotes/backticks.
55
+ * Used by checks to avoid false positives from suggestion/description text.
56
+ */
57
+ export function isInsideStringLiteral(line, matchIndex) {
58
+ let inSingle = false;
59
+ let inDouble = false;
60
+ let inTemplate = false;
61
+ let escaped = false;
62
+ for (let i = 0; i < matchIndex; i++) {
63
+ const ch = line[i];
64
+ if (escaped) {
65
+ escaped = false;
66
+ continue;
67
+ }
68
+ if (ch === '\\' && (inSingle || inDouble || inTemplate)) {
69
+ escaped = true;
70
+ continue;
71
+ }
72
+ if (ch === "'" && !inDouble && !inTemplate)
73
+ inSingle = !inSingle;
74
+ else if (ch === '"' && !inSingle && !inTemplate)
75
+ inDouble = !inDouble;
76
+ else if (ch === '`' && !inSingle && !inDouble)
77
+ inTemplate = !inTemplate;
78
+ }
79
+ return inSingle || inDouble || inTemplate;
80
+ }
81
+ /**
82
+ * Strip string literals and single-line comments from full file content.
83
+ * Used by checks for quick-filter gates to avoid matching keywords
84
+ * that only appear in documentation strings or comments.
85
+ */
86
+ export function stripStringsAndComments(content) {
87
+ // Strip string literals first
88
+ let result = content
89
+ .replaceAll(SINGLE_QUOTE_RE, "''")
90
+ .replaceAll(DOUBLE_QUOTE_RE, '""')
91
+ .replaceAll(BACKTICK_RE, '``');
92
+ // Strip single-line comments (after string stripping to avoid matching // inside strings)
93
+ // eslint-disable-next-line sonarjs/slow-regex -- .*$ anchored to line end; linear scan
94
+ result = result.replaceAll(/\/\/.*$/gm, '');
95
+ return result;
96
+ }
97
+ /**
98
+ * Strip strings, single-line comments, AND block comments while preserving
99
+ * BOTH character positions and line numbers. Each stripped character is
100
+ * replaced with a space (non-newline) so the output has identical length
101
+ * and line offsets to the input. Use this when downstream processing
102
+ * needs to map a match index back to a line number in the ORIGINAL
103
+ * source — `stripStringsAndComments` collapses string literals to empty
104
+ * pairs, which shifts indexes and breaks `getLineNumber(content, idx)`.
105
+ *
106
+ * Strips:
107
+ * - Single-quoted, double-quoted, and template-literal string contents
108
+ * - Single-line `// ...` comments (to end of line)
109
+ * - Block `/* ... *\/` comments (including JSDoc `/** ... *\/`)
110
+ *
111
+ * Preserves: newlines, total character count, character positions of
112
+ * code OUTSIDE these regions.
113
+ */
114
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- token-state-machine: single-pass tokenizer, branches reflect quote/comment state
115
+ export function stripStringsAndCommentsPreservingPositions(content) {
116
+ const out = [];
117
+ let i = 0;
118
+ let inSingle = false;
119
+ let inDouble = false;
120
+ let inTemplate = false;
121
+ let inLineComment = false;
122
+ let inBlockComment = false;
123
+ let escaped = false;
124
+ while (i < content.length) {
125
+ const ch = content[i];
126
+ const next = content[i + 1];
127
+ // Inside any string: blank out chars (preserve newlines) until terminator.
128
+ if (inSingle || inDouble || inTemplate) {
129
+ if (escaped) {
130
+ out.push(ch === '\n' ? '\n' : ' ');
131
+ escaped = false;
132
+ i++;
133
+ continue;
134
+ }
135
+ if (ch === '\\') {
136
+ out.push(' ');
137
+ escaped = true;
138
+ i++;
139
+ continue;
140
+ }
141
+ if ((ch === "'" && inSingle) || (ch === '"' && inDouble) || (ch === '`' && inTemplate)) {
142
+ // Keep terminator for symmetry — replace with space too. The
143
+ // string itself is gone; outer code doesn't care about the quote.
144
+ out.push(' ');
145
+ inSingle = inDouble = inTemplate = false;
146
+ i++;
147
+ continue;
148
+ }
149
+ out.push(ch === '\n' ? '\n' : ' ');
150
+ i++;
151
+ continue;
152
+ }
153
+ // Inside line comment: blank to end of line.
154
+ if (inLineComment) {
155
+ if (ch === '\n') {
156
+ inLineComment = false;
157
+ out.push('\n');
158
+ }
159
+ else {
160
+ out.push(' ');
161
+ }
162
+ i++;
163
+ continue;
164
+ }
165
+ // Inside block comment: blank until `*/`.
166
+ if (inBlockComment) {
167
+ if (ch === '*' && next === '/') {
168
+ out.push(' ');
169
+ inBlockComment = false;
170
+ i += 2;
171
+ continue;
172
+ }
173
+ out.push(ch === '\n' ? '\n' : ' ');
174
+ i++;
175
+ continue;
176
+ }
177
+ // Outside any region: detect openers.
178
+ if (ch === '/' && next === '/') {
179
+ out.push(' ');
180
+ inLineComment = true;
181
+ i += 2;
182
+ continue;
183
+ }
184
+ if (ch === '/' && next === '*') {
185
+ out.push(' ');
186
+ inBlockComment = true;
187
+ i += 2;
188
+ continue;
189
+ }
190
+ if (ch === "'") {
191
+ out.push(' ');
192
+ inSingle = true;
193
+ i++;
194
+ continue;
195
+ }
196
+ if (ch === '"') {
197
+ out.push(' ');
198
+ inDouble = true;
199
+ i++;
200
+ continue;
201
+ }
202
+ if (ch === '`') {
203
+ out.push(' ');
204
+ inTemplate = true;
205
+ i++;
206
+ continue;
207
+ }
208
+ out.push(ch);
209
+ i++;
210
+ }
211
+ return out.join('');
212
+ }
213
+ //# sourceMappingURL=strip-literals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-literals.js","sourceRoot":"","sources":["../../src/framework/strip-literals.ts"],"names":[],"mappings":"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"}