@opensip-cli/checks-universal 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 (620) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/all-checks-execute.test.d.ts +17 -0
  5. package/dist/__tests__/all-checks-execute.test.d.ts.map +1 -0
  6. package/dist/__tests__/all-checks-execute.test.js +452 -0
  7. package/dist/__tests__/all-checks-execute.test.js.map +1 -0
  8. package/dist/__tests__/behavior-fixtures-10.test.d.ts +8 -0
  9. package/dist/__tests__/behavior-fixtures-10.test.d.ts.map +1 -0
  10. package/dist/__tests__/behavior-fixtures-10.test.js +200 -0
  11. package/dist/__tests__/behavior-fixtures-10.test.js.map +1 -0
  12. package/dist/__tests__/behavior-fixtures-11.test.d.ts +8 -0
  13. package/dist/__tests__/behavior-fixtures-11.test.d.ts.map +1 -0
  14. package/dist/__tests__/behavior-fixtures-11.test.js +120 -0
  15. package/dist/__tests__/behavior-fixtures-11.test.js.map +1 -0
  16. package/dist/__tests__/behavior-fixtures-12.test.d.ts +8 -0
  17. package/dist/__tests__/behavior-fixtures-12.test.d.ts.map +1 -0
  18. package/dist/__tests__/behavior-fixtures-12.test.js +157 -0
  19. package/dist/__tests__/behavior-fixtures-12.test.js.map +1 -0
  20. package/dist/__tests__/behavior-fixtures-2.test.d.ts +8 -0
  21. package/dist/__tests__/behavior-fixtures-2.test.d.ts.map +1 -0
  22. package/dist/__tests__/behavior-fixtures-2.test.js +785 -0
  23. package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -0
  24. package/dist/__tests__/behavior-fixtures-3.test.d.ts +6 -0
  25. package/dist/__tests__/behavior-fixtures-3.test.d.ts.map +1 -0
  26. package/dist/__tests__/behavior-fixtures-3.test.js +663 -0
  27. package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -0
  28. package/dist/__tests__/behavior-fixtures-4.test.d.ts +5 -0
  29. package/dist/__tests__/behavior-fixtures-4.test.d.ts.map +1 -0
  30. package/dist/__tests__/behavior-fixtures-4.test.js +612 -0
  31. package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -0
  32. package/dist/__tests__/behavior-fixtures-5.test.d.ts +5 -0
  33. package/dist/__tests__/behavior-fixtures-5.test.d.ts.map +1 -0
  34. package/dist/__tests__/behavior-fixtures-5.test.js +469 -0
  35. package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -0
  36. package/dist/__tests__/behavior-fixtures-6.test.d.ts +8 -0
  37. package/dist/__tests__/behavior-fixtures-6.test.d.ts.map +1 -0
  38. package/dist/__tests__/behavior-fixtures-6.test.js +591 -0
  39. package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -0
  40. package/dist/__tests__/behavior-fixtures-7.test.d.ts +5 -0
  41. package/dist/__tests__/behavior-fixtures-7.test.d.ts.map +1 -0
  42. package/dist/__tests__/behavior-fixtures-7.test.js +662 -0
  43. package/dist/__tests__/behavior-fixtures-7.test.js.map +1 -0
  44. package/dist/__tests__/behavior-fixtures-8.test.d.ts +11 -0
  45. package/dist/__tests__/behavior-fixtures-8.test.d.ts.map +1 -0
  46. package/dist/__tests__/behavior-fixtures-8.test.js +634 -0
  47. package/dist/__tests__/behavior-fixtures-8.test.js.map +1 -0
  48. package/dist/__tests__/behavior-fixtures-9.test.d.ts +11 -0
  49. package/dist/__tests__/behavior-fixtures-9.test.d.ts.map +1 -0
  50. package/dist/__tests__/behavior-fixtures-9.test.js +271 -0
  51. package/dist/__tests__/behavior-fixtures-9.test.js.map +1 -0
  52. package/dist/__tests__/behavior-fixtures.test.d.ts +14 -0
  53. package/dist/__tests__/behavior-fixtures.test.d.ts.map +1 -0
  54. package/dist/__tests__/behavior-fixtures.test.js +1423 -0
  55. package/dist/__tests__/behavior-fixtures.test.js.map +1 -0
  56. package/dist/__tests__/checks.test.d.ts +2 -0
  57. package/dist/__tests__/checks.test.d.ts.map +1 -0
  58. package/dist/__tests__/checks.test.js +61 -0
  59. package/dist/__tests__/checks.test.js.map +1 -0
  60. package/dist/__tests__/env-var-validation.test.d.ts +14 -0
  61. package/dist/__tests__/env-var-validation.test.d.ts.map +1 -0
  62. package/dist/__tests__/env-var-validation.test.js +53 -0
  63. package/dist/__tests__/env-var-validation.test.js.map +1 -0
  64. package/dist/__tests__/file-length-limit.test.d.ts +2 -0
  65. package/dist/__tests__/file-length-limit.test.d.ts.map +1 -0
  66. package/dist/__tests__/file-length-limit.test.js +29 -0
  67. package/dist/__tests__/file-length-limit.test.js.map +1 -0
  68. package/dist/__tests__/fixture-coverage.allowlist.d.ts +18 -0
  69. package/dist/__tests__/fixture-coverage.allowlist.d.ts.map +1 -0
  70. package/dist/__tests__/fixture-coverage.allowlist.js +35 -0
  71. package/dist/__tests__/fixture-coverage.allowlist.js.map +1 -0
  72. package/dist/__tests__/fixture-coverage.test.d.ts +13 -0
  73. package/dist/__tests__/fixture-coverage.test.d.ts.map +1 -0
  74. package/dist/__tests__/fixture-coverage.test.js +57 -0
  75. package/dist/__tests__/fixture-coverage.test.js.map +1 -0
  76. package/dist/__tests__/iic.test.d.ts +15 -0
  77. package/dist/__tests__/iic.test.d.ts.map +1 -0
  78. package/dist/__tests__/iic.test.js +316 -0
  79. package/dist/__tests__/iic.test.js.map +1 -0
  80. package/dist/__tests__/no-skipped-tests.test.d.ts +14 -0
  81. package/dist/__tests__/no-skipped-tests.test.d.ts.map +1 -0
  82. package/dist/__tests__/no-skipped-tests.test.js +144 -0
  83. package/dist/__tests__/no-skipped-tests.test.js.map +1 -0
  84. package/dist/__tests__/no-todo-comments.test.d.ts +2 -0
  85. package/dist/__tests__/no-todo-comments.test.d.ts.map +1 -0
  86. package/dist/__tests__/no-todo-comments.test.js +31 -0
  87. package/dist/__tests__/no-todo-comments.test.js.map +1 -0
  88. package/dist/__tests__/no-unimplemented-markers.test.d.ts +2 -0
  89. package/dist/__tests__/no-unimplemented-markers.test.d.ts.map +1 -0
  90. package/dist/__tests__/no-unimplemented-markers.test.js +140 -0
  91. package/dist/__tests__/no-unimplemented-markers.test.js.map +1 -0
  92. package/dist/__tests__/public-api-jsdoc-scope.test.d.ts +10 -0
  93. package/dist/__tests__/public-api-jsdoc-scope.test.d.ts.map +1 -0
  94. package/dist/__tests__/public-api-jsdoc-scope.test.js +176 -0
  95. package/dist/__tests__/public-api-jsdoc-scope.test.js.map +1 -0
  96. package/dist/__tests__/resilience-fp.test.d.ts +14 -0
  97. package/dist/__tests__/resilience-fp.test.d.ts.map +1 -0
  98. package/dist/__tests__/resilience-fp.test.js +110 -0
  99. package/dist/__tests__/resilience-fp.test.js.map +1 -0
  100. package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts +2 -0
  101. package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts.map +1 -0
  102. package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js +32 -0
  103. package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js.map +1 -0
  104. package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts +2 -0
  105. package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts.map +1 -0
  106. package/dist/checks/architecture/__tests__/tool-has-manifest.test.js +152 -0
  107. package/dist/checks/architecture/__tests__/tool-has-manifest.test.js.map +1 -0
  108. package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts +2 -0
  109. package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts.map +1 -0
  110. package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js +129 -0
  111. package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js.map +1 -0
  112. package/dist/checks/architecture/_yaml-doc-bindings.d.ts +23 -0
  113. package/dist/checks/architecture/_yaml-doc-bindings.d.ts.map +1 -0
  114. package/dist/checks/architecture/_yaml-doc-bindings.js +29 -0
  115. package/dist/checks/architecture/_yaml-doc-bindings.js.map +1 -0
  116. package/dist/checks/architecture/dependencies/index.d.ts +2 -0
  117. package/dist/checks/architecture/dependencies/index.d.ts.map +1 -0
  118. package/dist/checks/architecture/dependencies/index.js +2 -0
  119. package/dist/checks/architecture/dependencies/index.js.map +1 -0
  120. package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts +11 -0
  121. package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts.map +1 -0
  122. package/dist/checks/architecture/dependencies/no-duplicate-packages.js +171 -0
  123. package/dist/checks/architecture/dependencies/no-duplicate-packages.js.map +1 -0
  124. package/dist/checks/architecture/docker-best-practices.d.ts +23 -0
  125. package/dist/checks/architecture/docker-best-practices.d.ts.map +1 -0
  126. package/dist/checks/architecture/docker-best-practices.js +427 -0
  127. package/dist/checks/architecture/docker-best-practices.js.map +1 -0
  128. package/dist/checks/architecture/docker-ignore-validation.d.ts +18 -0
  129. package/dist/checks/architecture/docker-ignore-validation.d.ts.map +1 -0
  130. package/dist/checks/architecture/docker-ignore-validation.js +117 -0
  131. package/dist/checks/architecture/docker-ignore-validation.js.map +1 -0
  132. package/dist/checks/architecture/docker-version-sync.d.ts +16 -0
  133. package/dist/checks/architecture/docker-version-sync.d.ts.map +1 -0
  134. package/dist/checks/architecture/docker-version-sync.js +193 -0
  135. package/dist/checks/architecture/docker-version-sync.js.map +1 -0
  136. package/dist/checks/architecture/env-var-validation.d.ts +14 -0
  137. package/dist/checks/architecture/env-var-validation.d.ts.map +1 -0
  138. package/dist/checks/architecture/env-var-validation.js +289 -0
  139. package/dist/checks/architecture/env-var-validation.js.map +1 -0
  140. package/dist/checks/architecture/heavy-import-detection.d.ts +11 -0
  141. package/dist/checks/architecture/heavy-import-detection.d.ts.map +1 -0
  142. package/dist/checks/architecture/heavy-import-detection.js +91 -0
  143. package/dist/checks/architecture/heavy-import-detection.js.map +1 -0
  144. package/dist/checks/architecture/index.d.ts +16 -0
  145. package/dist/checks/architecture/index.d.ts.map +1 -0
  146. package/dist/checks/architecture/index.js +16 -0
  147. package/dist/checks/architecture/index.js.map +1 -0
  148. package/dist/checks/architecture/modules/empty-package-detection.d.ts +11 -0
  149. package/dist/checks/architecture/modules/empty-package-detection.d.ts.map +1 -0
  150. package/dist/checks/architecture/modules/empty-package-detection.js +277 -0
  151. package/dist/checks/architecture/modules/empty-package-detection.js.map +1 -0
  152. package/dist/checks/architecture/modules/index.d.ts +3 -0
  153. package/dist/checks/architecture/modules/index.d.ts.map +1 -0
  154. package/dist/checks/architecture/modules/index.js +3 -0
  155. package/dist/checks/architecture/modules/index.js.map +1 -0
  156. package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts +12 -0
  157. package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts.map +1 -0
  158. package/dist/checks/architecture/modules/interface-implementation-consistency.js +555 -0
  159. package/dist/checks/architecture/modules/interface-implementation-consistency.js.map +1 -0
  160. package/dist/checks/architecture/no-custom-event-emitter.d.ts +11 -0
  161. package/dist/checks/architecture/no-custom-event-emitter.d.ts.map +1 -0
  162. package/dist/checks/architecture/no-custom-event-emitter.js +123 -0
  163. package/dist/checks/architecture/no-custom-event-emitter.js.map +1 -0
  164. package/dist/checks/architecture/no-kebab-option-indexing.d.ts +33 -0
  165. package/dist/checks/architecture/no-kebab-option-indexing.d.ts.map +1 -0
  166. package/dist/checks/architecture/no-kebab-option-indexing.js +81 -0
  167. package/dist/checks/architecture/no-kebab-option-indexing.js.map +1 -0
  168. package/dist/checks/architecture/node-version-consistency.d.ts +22 -0
  169. package/dist/checks/architecture/node-version-consistency.d.ts.map +1 -0
  170. package/dist/checks/architecture/node-version-consistency.js +225 -0
  171. package/dist/checks/architecture/node-version-consistency.js.map +1 -0
  172. package/dist/checks/architecture/project-readme-existence.d.ts +13 -0
  173. package/dist/checks/architecture/project-readme-existence.d.ts.map +1 -0
  174. package/dist/checks/architecture/project-readme-existence.js +55 -0
  175. package/dist/checks/architecture/project-readme-existence.js.map +1 -0
  176. package/dist/checks/architecture/stale-build-artifacts.d.ts +10 -0
  177. package/dist/checks/architecture/stale-build-artifacts.d.ts.map +1 -0
  178. package/dist/checks/architecture/stale-build-artifacts.js +55 -0
  179. package/dist/checks/architecture/stale-build-artifacts.js.map +1 -0
  180. package/dist/checks/architecture/tool-has-manifest.d.ts +27 -0
  181. package/dist/checks/architecture/tool-has-manifest.d.ts.map +1 -0
  182. package/dist/checks/architecture/tool-has-manifest.js +135 -0
  183. package/dist/checks/architecture/tool-has-manifest.js.map +1 -0
  184. package/dist/checks/architecture/vitest-config-extends-base.d.ts +15 -0
  185. package/dist/checks/architecture/vitest-config-extends-base.d.ts.map +1 -0
  186. package/dist/checks/architecture/vitest-config-extends-base.js +104 -0
  187. package/dist/checks/architecture/vitest-config-extends-base.js.map +1 -0
  188. package/dist/checks/architecture/vitest-config-required-with-tests.d.ts +49 -0
  189. package/dist/checks/architecture/vitest-config-required-with-tests.d.ts.map +1 -0
  190. package/dist/checks/architecture/vitest-config-required-with-tests.js +199 -0
  191. package/dist/checks/architecture/vitest-config-required-with-tests.js.map +1 -0
  192. package/dist/checks/documentation/_directives/eslint.d.ts +9 -0
  193. package/dist/checks/documentation/_directives/eslint.d.ts.map +1 -0
  194. package/dist/checks/documentation/_directives/eslint.js +168 -0
  195. package/dist/checks/documentation/_directives/eslint.js.map +1 -0
  196. package/dist/checks/documentation/_directives/fitness.d.ts +9 -0
  197. package/dist/checks/documentation/_directives/fitness.d.ts.map +1 -0
  198. package/dist/checks/documentation/_directives/fitness.js +64 -0
  199. package/dist/checks/documentation/_directives/fitness.js.map +1 -0
  200. package/dist/checks/documentation/_directives/graph.d.ts +10 -0
  201. package/dist/checks/documentation/_directives/graph.d.ts.map +1 -0
  202. package/dist/checks/documentation/_directives/graph.js +65 -0
  203. package/dist/checks/documentation/_directives/graph.js.map +1 -0
  204. package/dist/checks/documentation/_directives/graph.test.d.ts +2 -0
  205. package/dist/checks/documentation/_directives/graph.test.d.ts.map +1 -0
  206. package/dist/checks/documentation/_directives/graph.test.js +54 -0
  207. package/dist/checks/documentation/_directives/graph.test.js.map +1 -0
  208. package/dist/checks/documentation/_directives/semgrep.d.ts +8 -0
  209. package/dist/checks/documentation/_directives/semgrep.d.ts.map +1 -0
  210. package/dist/checks/documentation/_directives/semgrep.js +72 -0
  211. package/dist/checks/documentation/_directives/semgrep.js.map +1 -0
  212. package/dist/checks/documentation/_directives/types.d.ts +21 -0
  213. package/dist/checks/documentation/_directives/types.d.ts.map +1 -0
  214. package/dist/checks/documentation/_directives/types.js +9 -0
  215. package/dist/checks/documentation/_directives/types.js.map +1 -0
  216. package/dist/checks/documentation/_directives/typescript.d.ts +10 -0
  217. package/dist/checks/documentation/_directives/typescript.d.ts.map +1 -0
  218. package/dist/checks/documentation/_directives/typescript.js +54 -0
  219. package/dist/checks/documentation/_directives/typescript.js.map +1 -0
  220. package/dist/checks/documentation/_public-api-graph.d.ts +30 -0
  221. package/dist/checks/documentation/_public-api-graph.d.ts.map +1 -0
  222. package/dist/checks/documentation/_public-api-graph.js +304 -0
  223. package/dist/checks/documentation/_public-api-graph.js.map +1 -0
  224. package/dist/checks/documentation/directive-audit.d.ts +26 -0
  225. package/dist/checks/documentation/directive-audit.d.ts.map +1 -0
  226. package/dist/checks/documentation/directive-audit.js +144 -0
  227. package/dist/checks/documentation/directive-audit.js.map +1 -0
  228. package/dist/checks/documentation/index.d.ts +3 -0
  229. package/dist/checks/documentation/index.d.ts.map +1 -0
  230. package/dist/checks/documentation/index.js +3 -0
  231. package/dist/checks/documentation/index.js.map +1 -0
  232. package/dist/checks/documentation/public-api-jsdoc.d.ts +10 -0
  233. package/dist/checks/documentation/public-api-jsdoc.d.ts.map +1 -0
  234. package/dist/checks/documentation/public-api-jsdoc.js +131 -0
  235. package/dist/checks/documentation/public-api-jsdoc.js.map +1 -0
  236. package/dist/checks/file-length-limit.d.ts +16 -0
  237. package/dist/checks/file-length-limit.d.ts.map +1 -0
  238. package/dist/checks/file-length-limit.js +47 -0
  239. package/dist/checks/file-length-limit.js.map +1 -0
  240. package/dist/checks/index.d.ts +16 -0
  241. package/dist/checks/index.d.ts.map +1 -0
  242. package/dist/checks/index.js +16 -0
  243. package/dist/checks/index.js.map +1 -0
  244. package/dist/checks/no-todo-comments.d.ts +18 -0
  245. package/dist/checks/no-todo-comments.d.ts.map +1 -0
  246. package/dist/checks/no-todo-comments.js +79 -0
  247. package/dist/checks/no-todo-comments.js.map +1 -0
  248. package/dist/checks/no-unimplemented-markers.d.ts +24 -0
  249. package/dist/checks/no-unimplemented-markers.d.ts.map +1 -0
  250. package/dist/checks/no-unimplemented-markers.js +198 -0
  251. package/dist/checks/no-unimplemented-markers.js.map +1 -0
  252. package/dist/checks/quality/api/graphql-offset-pagination.d.ts +9 -0
  253. package/dist/checks/quality/api/graphql-offset-pagination.d.ts.map +1 -0
  254. package/dist/checks/quality/api/graphql-offset-pagination.js +63 -0
  255. package/dist/checks/quality/api/graphql-offset-pagination.js.map +1 -0
  256. package/dist/checks/quality/api/index.d.ts +3 -0
  257. package/dist/checks/quality/api/index.d.ts.map +1 -0
  258. package/dist/checks/quality/api/index.js +3 -0
  259. package/dist/checks/quality/api/index.js.map +1 -0
  260. package/dist/checks/quality/api/zod-openapi-sync.d.ts +13 -0
  261. package/dist/checks/quality/api/zod-openapi-sync.d.ts.map +1 -0
  262. package/dist/checks/quality/api/zod-openapi-sync.js +88 -0
  263. package/dist/checks/quality/api/zod-openapi-sync.js.map +1 -0
  264. package/dist/checks/quality/code-structure/dead-code.d.ts +12 -0
  265. package/dist/checks/quality/code-structure/dead-code.d.ts.map +1 -0
  266. package/dist/checks/quality/code-structure/dead-code.js +238 -0
  267. package/dist/checks/quality/code-structure/dead-code.js.map +1 -0
  268. package/dist/checks/quality/code-structure/index.d.ts +5 -0
  269. package/dist/checks/quality/code-structure/index.d.ts.map +1 -0
  270. package/dist/checks/quality/code-structure/index.js +5 -0
  271. package/dist/checks/quality/code-structure/index.js.map +1 -0
  272. package/dist/checks/quality/code-structure/no-ai-attribution.d.ts +25 -0
  273. package/dist/checks/quality/code-structure/no-ai-attribution.d.ts.map +1 -0
  274. package/dist/checks/quality/code-structure/no-ai-attribution.js +76 -0
  275. package/dist/checks/quality/code-structure/no-ai-attribution.js.map +1 -0
  276. package/dist/checks/quality/code-structure/no-console-log.d.ts +17 -0
  277. package/dist/checks/quality/code-structure/no-console-log.d.ts.map +1 -0
  278. package/dist/checks/quality/code-structure/no-console-log.js +106 -0
  279. package/dist/checks/quality/code-structure/no-console-log.js.map +1 -0
  280. package/dist/checks/quality/code-structure/no-process-artifacts.d.ts +25 -0
  281. package/dist/checks/quality/code-structure/no-process-artifacts.d.ts.map +1 -0
  282. package/dist/checks/quality/code-structure/no-process-artifacts.js +104 -0
  283. package/dist/checks/quality/code-structure/no-process-artifacts.js.map +1 -0
  284. package/dist/checks/quality/dependency-version-consistency.d.ts +20 -0
  285. package/dist/checks/quality/dependency-version-consistency.d.ts.map +1 -0
  286. package/dist/checks/quality/dependency-version-consistency.js +266 -0
  287. package/dist/checks/quality/dependency-version-consistency.js.map +1 -0
  288. package/dist/checks/quality/fitness-ignore-hygiene.d.ts +10 -0
  289. package/dist/checks/quality/fitness-ignore-hygiene.d.ts.map +1 -0
  290. package/dist/checks/quality/fitness-ignore-hygiene.js +93 -0
  291. package/dist/checks/quality/fitness-ignore-hygiene.js.map +1 -0
  292. package/dist/checks/quality/frontend/expo-vector-icons.d.ts +13 -0
  293. package/dist/checks/quality/frontend/expo-vector-icons.d.ts.map +1 -0
  294. package/dist/checks/quality/frontend/expo-vector-icons.js +80 -0
  295. package/dist/checks/quality/frontend/expo-vector-icons.js.map +1 -0
  296. package/dist/checks/quality/frontend/image-optimization.d.ts +13 -0
  297. package/dist/checks/quality/frontend/image-optimization.d.ts.map +1 -0
  298. package/dist/checks/quality/frontend/image-optimization.js +166 -0
  299. package/dist/checks/quality/frontend/image-optimization.js.map +1 -0
  300. package/dist/checks/quality/frontend/index.d.ts +4 -0
  301. package/dist/checks/quality/frontend/index.d.ts.map +1 -0
  302. package/dist/checks/quality/frontend/index.js +4 -0
  303. package/dist/checks/quality/frontend/index.js.map +1 -0
  304. package/dist/checks/quality/frontend/navigation-typing.d.ts +12 -0
  305. package/dist/checks/quality/frontend/navigation-typing.d.ts.map +1 -0
  306. package/dist/checks/quality/frontend/navigation-typing.js +77 -0
  307. package/dist/checks/quality/frontend/navigation-typing.js.map +1 -0
  308. package/dist/checks/quality/graph-ignore-hygiene.d.ts +10 -0
  309. package/dist/checks/quality/graph-ignore-hygiene.d.ts.map +1 -0
  310. package/dist/checks/quality/graph-ignore-hygiene.js +95 -0
  311. package/dist/checks/quality/graph-ignore-hygiene.js.map +1 -0
  312. package/dist/checks/quality/graph-ignore-hygiene.test.d.ts +14 -0
  313. package/dist/checks/quality/graph-ignore-hygiene.test.d.ts.map +1 -0
  314. package/dist/checks/quality/graph-ignore-hygiene.test.js +58 -0
  315. package/dist/checks/quality/graph-ignore-hygiene.test.js.map +1 -0
  316. package/dist/checks/quality/index.d.ts +16 -0
  317. package/dist/checks/quality/index.d.ts.map +1 -0
  318. package/dist/checks/quality/index.js +16 -0
  319. package/dist/checks/quality/index.js.map +1 -0
  320. package/dist/checks/quality/linting/eslint-justifications.d.ts +12 -0
  321. package/dist/checks/quality/linting/eslint-justifications.d.ts.map +1 -0
  322. package/dist/checks/quality/linting/eslint-justifications.js +328 -0
  323. package/dist/checks/quality/linting/eslint-justifications.js.map +1 -0
  324. package/dist/checks/quality/linting/index.d.ts +4 -0
  325. package/dist/checks/quality/linting/index.d.ts.map +1 -0
  326. package/dist/checks/quality/linting/index.js +4 -0
  327. package/dist/checks/quality/linting/index.js.map +1 -0
  328. package/dist/checks/quality/linting/semgrep-justifications.d.ts +16 -0
  329. package/dist/checks/quality/linting/semgrep-justifications.d.ts.map +1 -0
  330. package/dist/checks/quality/linting/semgrep-justifications.js +229 -0
  331. package/dist/checks/quality/linting/semgrep-justifications.js.map +1 -0
  332. package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts +12 -0
  333. package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts.map +1 -0
  334. package/dist/checks/quality/linting/typescript-directive-hygiene.js +142 -0
  335. package/dist/checks/quality/linting/typescript-directive-hygiene.js.map +1 -0
  336. package/dist/checks/quality/no-compatibility-layer-names.d.ts +13 -0
  337. package/dist/checks/quality/no-compatibility-layer-names.d.ts.map +1 -0
  338. package/dist/checks/quality/no-compatibility-layer-names.js +100 -0
  339. package/dist/checks/quality/no-compatibility-layer-names.js.map +1 -0
  340. package/dist/checks/quality/no-deprecated-tags.d.ts +11 -0
  341. package/dist/checks/quality/no-deprecated-tags.d.ts.map +1 -0
  342. package/dist/checks/quality/no-deprecated-tags.js +76 -0
  343. package/dist/checks/quality/no-deprecated-tags.js.map +1 -0
  344. package/dist/checks/quality/no-markdown-references.d.ts +16 -0
  345. package/dist/checks/quality/no-markdown-references.d.ts.map +1 -0
  346. package/dist/checks/quality/no-markdown-references.js +145 -0
  347. package/dist/checks/quality/no-markdown-references.js.map +1 -0
  348. package/dist/checks/quality/no-raw-regex-on-code.d.ts +9 -0
  349. package/dist/checks/quality/no-raw-regex-on-code.d.ts.map +1 -0
  350. package/dist/checks/quality/no-raw-regex-on-code.js +61 -0
  351. package/dist/checks/quality/no-raw-regex-on-code.js.map +1 -0
  352. package/dist/checks/quality/no-temporary-workarounds.d.ts +11 -0
  353. package/dist/checks/quality/no-temporary-workarounds.d.ts.map +1 -0
  354. package/dist/checks/quality/no-temporary-workarounds.js +69 -0
  355. package/dist/checks/quality/no-temporary-workarounds.js.map +1 -0
  356. package/dist/checks/quality/no-window-alert.d.ts +19 -0
  357. package/dist/checks/quality/no-window-alert.d.ts.map +1 -0
  358. package/dist/checks/quality/no-window-alert.js +74 -0
  359. package/dist/checks/quality/no-window-alert.js.map +1 -0
  360. package/dist/checks/quality/observability/index.d.ts +2 -0
  361. package/dist/checks/quality/observability/index.d.ts.map +1 -0
  362. package/dist/checks/quality/observability/index.js +2 -0
  363. package/dist/checks/quality/observability/index.js.map +1 -0
  364. package/dist/checks/quality/observability/pino-serializer-coverage.d.ts +15 -0
  365. package/dist/checks/quality/observability/pino-serializer-coverage.d.ts.map +1 -0
  366. package/dist/checks/quality/observability/pino-serializer-coverage.js +209 -0
  367. package/dist/checks/quality/observability/pino-serializer-coverage.js.map +1 -0
  368. package/dist/checks/quality/patterns/async-state-pattern.d.ts +14 -0
  369. package/dist/checks/quality/patterns/async-state-pattern.d.ts.map +1 -0
  370. package/dist/checks/quality/patterns/async-state-pattern.js +80 -0
  371. package/dist/checks/quality/patterns/async-state-pattern.js.map +1 -0
  372. package/dist/checks/quality/patterns/index.d.ts +4 -0
  373. package/dist/checks/quality/patterns/index.d.ts.map +1 -0
  374. package/dist/checks/quality/patterns/index.js +4 -0
  375. package/dist/checks/quality/patterns/index.js.map +1 -0
  376. package/dist/checks/quality/patterns/no-non-null-assertions.d.ts +10 -0
  377. package/dist/checks/quality/patterns/no-non-null-assertions.d.ts.map +1 -0
  378. package/dist/checks/quality/patterns/no-non-null-assertions.js +97 -0
  379. package/dist/checks/quality/patterns/no-non-null-assertions.js.map +1 -0
  380. package/dist/checks/quality/patterns/performance-anti-patterns.d.ts +16 -0
  381. package/dist/checks/quality/patterns/performance-anti-patterns.d.ts.map +1 -0
  382. package/dist/checks/quality/patterns/performance-anti-patterns.js +239 -0
  383. package/dist/checks/quality/patterns/performance-anti-patterns.js.map +1 -0
  384. package/dist/checks/resilience/_helpers/config-validation.d.ts +27 -0
  385. package/dist/checks/resilience/_helpers/config-validation.d.ts.map +1 -0
  386. package/dist/checks/resilience/_helpers/config-validation.js +61 -0
  387. package/dist/checks/resilience/_helpers/config-validation.js.map +1 -0
  388. package/dist/checks/resilience/batch-operations.d.ts +22 -0
  389. package/dist/checks/resilience/batch-operations.d.ts.map +1 -0
  390. package/dist/checks/resilience/batch-operations.js +422 -0
  391. package/dist/checks/resilience/batch-operations.js.map +1 -0
  392. package/dist/checks/resilience/cache-ttl-validation.d.ts +13 -0
  393. package/dist/checks/resilience/cache-ttl-validation.d.ts.map +1 -0
  394. package/dist/checks/resilience/cache-ttl-validation.js +222 -0
  395. package/dist/checks/resilience/cache-ttl-validation.js.map +1 -0
  396. package/dist/checks/resilience/catch-clause-safety.d.ts +12 -0
  397. package/dist/checks/resilience/catch-clause-safety.d.ts.map +1 -0
  398. package/dist/checks/resilience/catch-clause-safety.js +110 -0
  399. package/dist/checks/resilience/catch-clause-safety.js.map +1 -0
  400. package/dist/checks/resilience/dangerous-config-defaults.d.ts +11 -0
  401. package/dist/checks/resilience/dangerous-config-defaults.d.ts.map +1 -0
  402. package/dist/checks/resilience/dangerous-config-defaults.js +304 -0
  403. package/dist/checks/resilience/dangerous-config-defaults.js.map +1 -0
  404. package/dist/checks/resilience/error-code-registration.d.ts +11 -0
  405. package/dist/checks/resilience/error-code-registration.d.ts.map +1 -0
  406. package/dist/checks/resilience/error-code-registration.js +88 -0
  407. package/dist/checks/resilience/error-code-registration.js.map +1 -0
  408. package/dist/checks/resilience/event-patterns.d.ts +21 -0
  409. package/dist/checks/resilience/event-patterns.d.ts.map +1 -0
  410. package/dist/checks/resilience/event-patterns.js +232 -0
  411. package/dist/checks/resilience/event-patterns.js.map +1 -0
  412. package/dist/checks/resilience/exit-code-correctness.d.ts +12 -0
  413. package/dist/checks/resilience/exit-code-correctness.d.ts.map +1 -0
  414. package/dist/checks/resilience/exit-code-correctness.js +107 -0
  415. package/dist/checks/resilience/exit-code-correctness.js.map +1 -0
  416. package/dist/checks/resilience/index.d.ts +18 -0
  417. package/dist/checks/resilience/index.d.ts.map +1 -0
  418. package/dist/checks/resilience/index.js +18 -0
  419. package/dist/checks/resilience/index.js.map +1 -0
  420. package/dist/checks/resilience/no-hardcoded-timeouts.d.ts +10 -0
  421. package/dist/checks/resilience/no-hardcoded-timeouts.d.ts.map +1 -0
  422. package/dist/checks/resilience/no-hardcoded-timeouts.js +291 -0
  423. package/dist/checks/resilience/no-hardcoded-timeouts.js.map +1 -0
  424. package/dist/checks/resilience/no-process-exit-in-finally.d.ts +11 -0
  425. package/dist/checks/resilience/no-process-exit-in-finally.d.ts.map +1 -0
  426. package/dist/checks/resilience/no-process-exit-in-finally.js +89 -0
  427. package/dist/checks/resilience/no-process-exit-in-finally.js.map +1 -0
  428. package/dist/checks/resilience/readline-cleanup.d.ts +11 -0
  429. package/dist/checks/resilience/readline-cleanup.d.ts.map +1 -0
  430. package/dist/checks/resilience/readline-cleanup.js +107 -0
  431. package/dist/checks/resilience/readline-cleanup.js.map +1 -0
  432. package/dist/checks/resilience/recovery-patterns.d.ts +25 -0
  433. package/dist/checks/resilience/recovery-patterns.d.ts.map +1 -0
  434. package/dist/checks/resilience/recovery-patterns.js +273 -0
  435. package/dist/checks/resilience/recovery-patterns.js.map +1 -0
  436. package/dist/checks/resilience/reentrancy-guard.d.ts +12 -0
  437. package/dist/checks/resilience/reentrancy-guard.d.ts.map +1 -0
  438. package/dist/checks/resilience/reentrancy-guard.js +86 -0
  439. package/dist/checks/resilience/reentrancy-guard.js.map +1 -0
  440. package/dist/checks/resilience/retry-config-validation.d.ts +13 -0
  441. package/dist/checks/resilience/retry-config-validation.d.ts.map +1 -0
  442. package/dist/checks/resilience/retry-config-validation.js +159 -0
  443. package/dist/checks/resilience/retry-config-validation.js.map +1 -0
  444. package/dist/checks/resilience/sentry/_helpers/sentry.d.ts +25 -0
  445. package/dist/checks/resilience/sentry/_helpers/sentry.d.ts.map +1 -0
  446. package/dist/checks/resilience/sentry/_helpers/sentry.js +68 -0
  447. package/dist/checks/resilience/sentry/_helpers/sentry.js.map +1 -0
  448. package/dist/checks/resilience/sentry/index.d.ts +8 -0
  449. package/dist/checks/resilience/sentry/index.d.ts.map +1 -0
  450. package/dist/checks/resilience/sentry/index.js +8 -0
  451. package/dist/checks/resilience/sentry/index.js.map +1 -0
  452. package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts +12 -0
  453. package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts.map +1 -0
  454. package/dist/checks/resilience/sentry/sentry-dsn-configured.js +55 -0
  455. package/dist/checks/resilience/sentry/sentry-dsn-configured.js.map +1 -0
  456. package/dist/checks/resilience/sentry/sentry-environment-set.d.ts +12 -0
  457. package/dist/checks/resilience/sentry/sentry-environment-set.d.ts.map +1 -0
  458. package/dist/checks/resilience/sentry/sentry-environment-set.js +51 -0
  459. package/dist/checks/resilience/sentry/sentry-environment-set.js.map +1 -0
  460. package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts +12 -0
  461. package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts.map +1 -0
  462. package/dist/checks/resilience/sentry/sentry-error-boundary.js +75 -0
  463. package/dist/checks/resilience/sentry/sentry-error-boundary.js.map +1 -0
  464. package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts +13 -0
  465. package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts.map +1 -0
  466. package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js +125 -0
  467. package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js.map +1 -0
  468. package/dist/checks/resilience/sentry/sentry-release-set.d.ts +12 -0
  469. package/dist/checks/resilience/sentry/sentry-release-set.d.ts.map +1 -0
  470. package/dist/checks/resilience/sentry/sentry-release-set.js +51 -0
  471. package/dist/checks/resilience/sentry/sentry-release-set.js.map +1 -0
  472. package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts +12 -0
  473. package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts.map +1 -0
  474. package/dist/checks/resilience/sentry/sentry-sample-rate.js +78 -0
  475. package/dist/checks/resilience/sentry/sentry-sample-rate.js.map +1 -0
  476. package/dist/checks/resilience/sentry/sentry-source-maps.d.ts +12 -0
  477. package/dist/checks/resilience/sentry/sentry-source-maps.d.ts.map +1 -0
  478. package/dist/checks/resilience/sentry/sentry-source-maps.js +83 -0
  479. package/dist/checks/resilience/sentry/sentry-source-maps.js.map +1 -0
  480. package/dist/checks/resilience/service-patterns.d.ts +18 -0
  481. package/dist/checks/resilience/service-patterns.d.ts.map +1 -0
  482. package/dist/checks/resilience/service-patterns.js +230 -0
  483. package/dist/checks/resilience/service-patterns.js.map +1 -0
  484. package/dist/checks/resilience/timer-lifecycle.d.ts +10 -0
  485. package/dist/checks/resilience/timer-lifecycle.d.ts.map +1 -0
  486. package/dist/checks/resilience/timer-lifecycle.js +78 -0
  487. package/dist/checks/resilience/timer-lifecycle.js.map +1 -0
  488. package/dist/checks/resilience/transaction-patterns.d.ts +21 -0
  489. package/dist/checks/resilience/transaction-patterns.d.ts.map +1 -0
  490. package/dist/checks/resilience/transaction-patterns.js +258 -0
  491. package/dist/checks/resilience/transaction-patterns.js.map +1 -0
  492. package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts +9 -0
  493. package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts.map +1 -0
  494. package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js +37 -0
  495. package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js.map +1 -0
  496. package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts +2 -0
  497. package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts.map +1 -0
  498. package/dist/checks/security/__tests__/package-supply-chain-policy.test.js +128 -0
  499. package/dist/checks/security/__tests__/package-supply-chain-policy.test.js.map +1 -0
  500. package/dist/checks/security/api-key-rotation.d.ts +10 -0
  501. package/dist/checks/security/api-key-rotation.d.ts.map +1 -0
  502. package/dist/checks/security/api-key-rotation.js +186 -0
  503. package/dist/checks/security/api-key-rotation.js.map +1 -0
  504. package/dist/checks/security/auth-middleware-coverage.d.ts +11 -0
  505. package/dist/checks/security/auth-middleware-coverage.d.ts.map +1 -0
  506. package/dist/checks/security/auth-middleware-coverage.js +210 -0
  507. package/dist/checks/security/auth-middleware-coverage.js.map +1 -0
  508. package/dist/checks/security/auth-route-guard.d.ts +12 -0
  509. package/dist/checks/security/auth-route-guard.d.ts.map +1 -0
  510. package/dist/checks/security/auth-route-guard.js +70 -0
  511. package/dist/checks/security/auth-route-guard.js.map +1 -0
  512. package/dist/checks/security/cors-configuration.d.ts +11 -0
  513. package/dist/checks/security/cors-configuration.d.ts.map +1 -0
  514. package/dist/checks/security/cors-configuration.js +126 -0
  515. package/dist/checks/security/cors-configuration.js.map +1 -0
  516. package/dist/checks/security/csp-headers.d.ts +11 -0
  517. package/dist/checks/security/csp-headers.d.ts.map +1 -0
  518. package/dist/checks/security/csp-headers.js +192 -0
  519. package/dist/checks/security/csp-headers.js.map +1 -0
  520. package/dist/checks/security/dependency-vulnerability-audit.d.ts +15 -0
  521. package/dist/checks/security/dependency-vulnerability-audit.d.ts.map +1 -0
  522. package/dist/checks/security/dependency-vulnerability-audit.js +184 -0
  523. package/dist/checks/security/dependency-vulnerability-audit.js.map +1 -0
  524. package/dist/checks/security/env-secret-exposure.d.ts +11 -0
  525. package/dist/checks/security/env-secret-exposure.d.ts.map +1 -0
  526. package/dist/checks/security/env-secret-exposure.js +127 -0
  527. package/dist/checks/security/env-secret-exposure.js.map +1 -0
  528. package/dist/checks/security/hasura-production-config.d.ts +11 -0
  529. package/dist/checks/security/hasura-production-config.d.ts.map +1 -0
  530. package/dist/checks/security/hasura-production-config.js +122 -0
  531. package/dist/checks/security/hasura-production-config.js.map +1 -0
  532. package/dist/checks/security/index.d.ts +17 -0
  533. package/dist/checks/security/index.d.ts.map +1 -0
  534. package/dist/checks/security/index.js +17 -0
  535. package/dist/checks/security/index.js.map +1 -0
  536. package/dist/checks/security/jwt-validation.d.ts +11 -0
  537. package/dist/checks/security/jwt-validation.d.ts.map +1 -0
  538. package/dist/checks/security/jwt-validation.js +294 -0
  539. package/dist/checks/security/jwt-validation.js.map +1 -0
  540. package/dist/checks/security/no-eval.d.ts +16 -0
  541. package/dist/checks/security/no-eval.d.ts.map +1 -0
  542. package/dist/checks/security/no-eval.js +83 -0
  543. package/dist/checks/security/no-eval.js.map +1 -0
  544. package/dist/checks/security/no-hardcoded-secrets.d.ts +28 -0
  545. package/dist/checks/security/no-hardcoded-secrets.d.ts.map +1 -0
  546. package/dist/checks/security/no-hardcoded-secrets.js +209 -0
  547. package/dist/checks/security/no-hardcoded-secrets.js.map +1 -0
  548. package/dist/checks/security/package-supply-chain-policy.d.ts +12 -0
  549. package/dist/checks/security/package-supply-chain-policy.d.ts.map +1 -0
  550. package/dist/checks/security/package-supply-chain-policy.js +534 -0
  551. package/dist/checks/security/package-supply-chain-policy.js.map +1 -0
  552. package/dist/checks/security/rate-limit-coverage.d.ts +10 -0
  553. package/dist/checks/security/rate-limit-coverage.d.ts.map +1 -0
  554. package/dist/checks/security/rate-limit-coverage.js +143 -0
  555. package/dist/checks/security/rate-limit-coverage.js.map +1 -0
  556. package/dist/checks/security/semgrep-scan.d.ts +13 -0
  557. package/dist/checks/security/semgrep-scan.d.ts.map +1 -0
  558. package/dist/checks/security/semgrep-scan.js +86 -0
  559. package/dist/checks/security/semgrep-scan.js.map +1 -0
  560. package/dist/checks/security/use-centralized-crypto.d.ts +11 -0
  561. package/dist/checks/security/use-centralized-crypto.d.ts.map +1 -0
  562. package/dist/checks/security/use-centralized-crypto.js +129 -0
  563. package/dist/checks/security/use-centralized-crypto.js.map +1 -0
  564. package/dist/checks/security/webhook-signature-verification.d.ts +10 -0
  565. package/dist/checks/security/webhook-signature-verification.d.ts.map +1 -0
  566. package/dist/checks/security/webhook-signature-verification.js +183 -0
  567. package/dist/checks/security/webhook-signature-verification.js.map +1 -0
  568. package/dist/checks/testing/index.d.ts +6 -0
  569. package/dist/checks/testing/index.d.ts.map +1 -0
  570. package/dist/checks/testing/index.js +6 -0
  571. package/dist/checks/testing/index.js.map +1 -0
  572. package/dist/checks/testing/no-skipped-tests.d.ts +40 -0
  573. package/dist/checks/testing/no-skipped-tests.d.ts.map +1 -0
  574. package/dist/checks/testing/no-skipped-tests.js +174 -0
  575. package/dist/checks/testing/no-skipped-tests.js.map +1 -0
  576. package/dist/checks/testing/no-stub-tests.d.ts +11 -0
  577. package/dist/checks/testing/no-stub-tests.d.ts.map +1 -0
  578. package/dist/checks/testing/no-stub-tests.js +103 -0
  579. package/dist/checks/testing/no-stub-tests.js.map +1 -0
  580. package/dist/checks/testing/test-convention-consistency.d.ts +14 -0
  581. package/dist/checks/testing/test-convention-consistency.d.ts.map +1 -0
  582. package/dist/checks/testing/test-convention-consistency.js +93 -0
  583. package/dist/checks/testing/test-convention-consistency.js.map +1 -0
  584. package/dist/checks/testing/test-file-naming.d.ts +13 -0
  585. package/dist/checks/testing/test-file-naming.d.ts.map +1 -0
  586. package/dist/checks/testing/test-file-naming.js +218 -0
  587. package/dist/checks/testing/test-file-naming.js.map +1 -0
  588. package/dist/checks/testing/test-file-pairing.d.ts +13 -0
  589. package/dist/checks/testing/test-file-pairing.d.ts.map +1 -0
  590. package/dist/checks/testing/test-file-pairing.js +274 -0
  591. package/dist/checks/testing/test-file-pairing.js.map +1 -0
  592. package/dist/display/architecture.d.ts +9 -0
  593. package/dist/display/architecture.d.ts.map +1 -0
  594. package/dist/display/architecture.js +29 -0
  595. package/dist/display/architecture.js.map +1 -0
  596. package/dist/display/index.d.ts +20 -0
  597. package/dist/display/index.d.ts.map +1 -0
  598. package/dist/display/index.js +30 -0
  599. package/dist/display/index.js.map +1 -0
  600. package/dist/display/quality.d.ts +7 -0
  601. package/dist/display/quality.d.ts.map +1 -0
  602. package/dist/display/quality.js +34 -0
  603. package/dist/display/quality.js.map +1 -0
  604. package/dist/display/resilience.d.ts +7 -0
  605. package/dist/display/resilience.d.ts.map +1 -0
  606. package/dist/display/resilience.js +36 -0
  607. package/dist/display/resilience.js.map +1 -0
  608. package/dist/display/security-testing.d.ts +9 -0
  609. package/dist/display/security-testing.d.ts.map +1 -0
  610. package/dist/display/security-testing.js +31 -0
  611. package/dist/display/security-testing.js.map +1 -0
  612. package/dist/display/types.d.ts +6 -0
  613. package/dist/display/types.d.ts.map +1 -0
  614. package/dist/display/types.js +6 -0
  615. package/dist/display/types.js.map +1 -0
  616. package/dist/index.d.ts +19 -0
  617. package/dist/index.d.ts.map +1 -0
  618. package/dist/index.js +21 -0
  619. package/dist/index.js.map +1 -0
  620. package/package.json +52 -0
@@ -0,0 +1,106 @@
1
+ // @fitness-ignore-file no-console-log -- Check definition file references console patterns in its description
2
+ /**
3
+ * @fileoverview Disallow console.log in production code
4
+ *
5
+ * Migrated to defineRegexListCheck (Layer 4 Phase C6). The CLI-output
6
+ * allowlist (`/commands/`, `/display/`, `/output/`, `/bin/`, `/scripts/`,
7
+ * `/cli/...ts`) is preserved verbatim via the helper's `skipFile` option.
8
+ * The per-pattern UUID + sub-slug shape is now the helper's default.
9
+ */
10
+ import { defineRegexListCheck } from '@opensip-cli/fitness';
11
+ /**
12
+ * Paths where console.* is the correct output mechanism (CLI tools, display modules, scripts).
13
+ */
14
+ const CLI_OUTPUT_PATTERNS = [
15
+ /\/commands\//,
16
+ /\/display\//,
17
+ /\/output\//,
18
+ /\/bin\//,
19
+ /\/scripts\//,
20
+ /\/cli\/.*\.ts$/,
21
+ ];
22
+ /**
23
+ * Check if a file is a CLI output file where console.* is acceptable.
24
+ */
25
+ function isCliOutputFile(filePath) {
26
+ return CLI_OUTPUT_PATTERNS.some((p) => p.test(filePath));
27
+ }
28
+ /**
29
+ * Check: quality/no-console-log
30
+ *
31
+ * Ensures production code uses structured logging via a project logger
32
+ * instead of console.log, console.debug, console.info, console.warn, or console.error.
33
+ * Skips CLI command files, display/output modules, and scripts where console is appropriate.
34
+ */
35
+ export const noConsoleLog = defineRegexListCheck({
36
+ id: '86403377-5903-478a-bdf2-e4f2f17df39f',
37
+ slug: 'no-console-log',
38
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
39
+ description: 'Disallow console.log in production code - use a structured logger',
40
+ longDescription: `**Purpose:** Ensures production code uses a structured logger (e.g., pino, winston) instead of console methods, which lack structured fields and log levels.
41
+
42
+ **Detects:** Analyzes each file individually via regex matching against each line.
43
+ - \`console.log(\` calls (regex: \`/console\\.log\\s{0,10}\\(/\`)
44
+ - \`console.debug(\` calls
45
+ - \`console.info(\` calls
46
+ - \`console.warn(\` calls
47
+ - \`console.error(\` calls
48
+ - Skips lines that are comments (\`//\`, \`*\`, \`/*\`)
49
+ - Skips CLI output files: \`/commands/\`, \`/display/\`, \`/output/\`, \`/bin/\`, \`/scripts/\` paths
50
+
51
+ **Why it matters:** Console methods produce unstructured output without structured fields or log levels, making production debugging and log aggregation difficult.
52
+
53
+ **Scope:** General best practice. Analyzes each file individually.`,
54
+ tags: ['logging', 'quality'],
55
+ fileTypes: ['ts'],
56
+ contentFilter: 'strip-strings',
57
+ confidence: 'high',
58
+ options: {
59
+ // CLI commands, display modules, and scripts use console.* as their output mechanism.
60
+ skipFile: isCliOutputFile,
61
+ },
62
+ patterns: [
63
+ {
64
+ id: 'e32068df-b100-4406-a8ba-caec5d53fa92',
65
+ slug: 'console-log',
66
+ // Non-global: matches the original `.test()`-based per-pattern-per-line semantics.
67
+ regex: /console\.log\s{0,10}\(/,
68
+ message: 'console.log detected',
69
+ severity: 'error',
70
+ suggestion: 'Use a structured logger (e.g., pino, winston)',
71
+ },
72
+ {
73
+ id: '1e8a6367-e2f2-4acf-ac85-a85bb0e46955',
74
+ slug: 'console-debug',
75
+ regex: /console\.debug\s{0,10}\(/,
76
+ message: 'console.debug detected',
77
+ severity: 'error',
78
+ suggestion: 'Use a structured logger (e.g., pino, winston) for debug output',
79
+ },
80
+ {
81
+ id: 'dfa66ae8-7230-417b-9711-d6659e1e8506',
82
+ slug: 'console-info',
83
+ regex: /console\.info\s{0,10}\(/,
84
+ message: 'console.info detected',
85
+ severity: 'error',
86
+ suggestion: 'Use a structured logger (e.g., pino, winston) for info output',
87
+ },
88
+ {
89
+ id: '534bf31f-41a2-4bec-b0a7-c08205770db1',
90
+ slug: 'console-warn',
91
+ regex: /console\.warn\s{0,10}\(/,
92
+ message: 'console.warn detected',
93
+ severity: 'error',
94
+ suggestion: 'Use a structured logger (e.g., pino, winston) for warnings',
95
+ },
96
+ {
97
+ id: 'ebd495d1-ae48-478d-a1cc-4823a18cada6',
98
+ slug: 'console-error',
99
+ regex: /console\.error\s{0,10}\(/,
100
+ message: 'console.error detected',
101
+ severity: 'error',
102
+ suggestion: 'Use a structured logger (e.g., pino, winston) for errors',
103
+ },
104
+ ],
105
+ });
106
+ //# sourceMappingURL=no-console-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-console-log.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-console-log.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,cAAc;IACd,aAAa;IACb,YAAY;IACZ,SAAS;IACT,aAAa;IACb,gBAAgB;CACjB,CAAC;AAEF;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC/C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,WAAW,EAAE,mEAAmE;IAChF,eAAe,EAAE;;;;;;;;;;;;;mEAagD;IACjE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IAC5B,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE;QACP,sFAAsF;QACtF,QAAQ,EAAE,eAAe;KAC1B;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,aAAa;YACnB,mFAAmF;YACnF,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,+CAA+C;SAC5D;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,wBAAwB;YACjC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,gEAAgE;SAC7E;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,+DAA+D;SAC5E;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,4DAA4D;SACzE;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,wBAAwB;YACjC,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,0DAA0D;SACvE;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileoverview Process/planning artifact detection in comments.
3
+ *
4
+ * Detects "Phase 1", "Sprint 12", version stamps, and date stamps
5
+ * left in comments. These belong in the backlog, the changelog, or
6
+ * git history — not the source.
7
+ *
8
+ * Extracted from the former `comment-quality` umbrella in Phase C1.
9
+ *
10
+ * Migrated to defineRegexListCheck (Phase C6 / 2026-05-23 NF2). The
11
+ * original site truncated each line to 500 chars before running the
12
+ * regex; that ReDoS guard is unnecessary because every pattern
13
+ * already uses bounded quantifiers (`\d{1,3}`, `\s{0,5}`,
14
+ * `\d{1,5}`, etc.), so an unbounded line cannot trigger catastrophic
15
+ * backtracking. The `EXCLUDE_PATTERNS` algorithm-step exemption is
16
+ * routed through the helper's `skipLine` predicate.
17
+ */
18
+ /**
19
+ * Check: quality/no-process-artifacts
20
+ *
21
+ * Detects process/planning artifacts (Phase X, Sprint X, version
22
+ * stamps, date stamps) in comments.
23
+ */
24
+ export declare const noProcessArtifacts: import("@opensip-cli/fitness").Check;
25
+ //# sourceMappingURL=no-process-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-process-artifacts.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-process-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sCAuE7B,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @fileoverview Process/planning artifact detection in comments.
3
+ *
4
+ * Detects "Phase 1", "Sprint 12", version stamps, and date stamps
5
+ * left in comments. These belong in the backlog, the changelog, or
6
+ * git history — not the source.
7
+ *
8
+ * Extracted from the former `comment-quality` umbrella in Phase C1.
9
+ *
10
+ * Migrated to defineRegexListCheck (Phase C6 / 2026-05-23 NF2). The
11
+ * original site truncated each line to 500 chars before running the
12
+ * regex; that ReDoS guard is unnecessary because every pattern
13
+ * already uses bounded quantifiers (`\d{1,3}`, `\s{0,5}`,
14
+ * `\d{1,5}`, etc.), so an unbounded line cannot trigger catastrophic
15
+ * backtracking. The `EXCLUDE_PATTERNS` algorithm-step exemption is
16
+ * routed through the helper's `skipLine` predicate.
17
+ */
18
+ import { defineRegexListCheck } from '@opensip-cli/fitness';
19
+ // Exclusion: algorithm step comments like "Phase 1: Try primary
20
+ // operation" are allowed and should not fire the Phase pattern.
21
+ const ALGORITHM_PHASE_PATTERN = /\/\/\s{0,5}Phase\s{1,5}\d{1,3}\s{0,5}:\s{0,5}\w{1,50}/i;
22
+ const PHASE_FIX = 'Remove planning artifact; use backlog for tracking future work';
23
+ const SPRINT_FIX = 'Remove planning artifact; sprint references are not useful to code readers';
24
+ const VERSION_FIX = 'Remove version stamp; git history tracks this information';
25
+ const DATE_FIX = 'Remove date stamp; git history tracks this information';
26
+ /**
27
+ * Check: quality/no-process-artifacts
28
+ *
29
+ * Detects process/planning artifacts (Phase X, Sprint X, version
30
+ * stamps, date stamps) in comments.
31
+ */
32
+ export const noProcessArtifacts = defineRegexListCheck({
33
+ id: '3aa07a17-4bde-4f17-9296-c035809bc938',
34
+ slug: 'no-process-artifacts',
35
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
36
+ contentFilter: 'raw',
37
+ confidence: 'medium',
38
+ description: 'Detects process/planning artifacts (Phase X, Sprint X, version stamps) in comments',
39
+ longDescription: `**Purpose:** Process/planning artifacts in source code become stale and clutter file history. Tracking belongs in the backlog, changelogs, or git history.
40
+
41
+ **Detects:**
42
+ - \`// Phase N\` (excluding algorithm step comments like \`// Phase 1: Try primary operation\`)
43
+ - \`// Sprint N\`
44
+ - Version stamps (\`// v1.2.3\`)
45
+ - "Added in vN" comments
46
+ - Date stamps (\`// Updated 2024-01-01\`)
47
+
48
+ **Why it matters:** When the planning context shifts, these comments become misleading. Trim them at authorship time and rely on the backlog and version control for the real history.`,
49
+ tags: ['maintainability', 'code-quality', 'quality'],
50
+ fileTypes: ['ts', 'tsx'],
51
+ disabled: true,
52
+ options: {
53
+ // Comments are exactly what this check targets — do NOT skip them.
54
+ skipCommentLines: false,
55
+ // Original site emitted at most one violation per line via `break`
56
+ // after the first matching pattern.
57
+ oneViolationPerLine: true,
58
+ // Skip lines that look like algorithm-step comments.
59
+ skipLine: (_trimmed, rawLine) => ALGORITHM_PHASE_PATTERN.test(rawLine),
60
+ },
61
+ patterns: [
62
+ {
63
+ id: '274c1f41-817d-4b88-be5e-7907435d92f0',
64
+ slug: 'phase-artifact',
65
+ regex: /\/\/\s{0,5}Phase\s{1,5}\d{1,3}\s{0,5}(?:Enhancement|Implementation|:|$)/i,
66
+ message: `Process artifact comment found. ${PHASE_FIX}`,
67
+ severity: 'error',
68
+ suggestion: PHASE_FIX,
69
+ },
70
+ {
71
+ id: '0c6b412e-75e1-4a54-8642-ce9b27449568',
72
+ slug: 'sprint-artifact',
73
+ regex: /\/\/\s{0,5}Sprint\s{1,5}\d{1,5}\b/i,
74
+ message: `Process artifact comment found. ${SPRINT_FIX}`,
75
+ severity: 'error',
76
+ suggestion: SPRINT_FIX,
77
+ },
78
+ {
79
+ id: '939c4391-e010-45db-90d6-af3c50b6dd3c',
80
+ slug: 'version-stamp',
81
+ regex: /\/\/\s{0,5}v\d{1,3}\.\d{1,3}(?:\.\d{1,5})?\s{0,5}$/i,
82
+ message: `Process artifact comment found. ${VERSION_FIX}`,
83
+ severity: 'error',
84
+ suggestion: VERSION_FIX,
85
+ },
86
+ {
87
+ id: 'cdcdb9e5-36e3-4fc1-b315-b620354a835c',
88
+ slug: 'added-in-version',
89
+ regex: /\/\/\s{0,5}Added\s{1,5}in\s{1,5}v\d{1,5}\b/i,
90
+ message: `Process artifact comment found. ${VERSION_FIX}`,
91
+ severity: 'error',
92
+ suggestion: VERSION_FIX,
93
+ },
94
+ {
95
+ id: '5e8b6c7e-9197-4cd3-a33e-4b2247f4f65b',
96
+ slug: 'date-stamp',
97
+ regex: /\/\/\s{0,5}Updated?\s{1,5}\d{4}-\d{2}-\d{2}\b/i,
98
+ message: `Process artifact comment found. ${DATE_FIX}`,
99
+ severity: 'error',
100
+ suggestion: DATE_FIX,
101
+ },
102
+ ],
103
+ });
104
+ //# sourceMappingURL=no-process-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-process-artifacts.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-process-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,gEAAgE;AAChE,gEAAgE;AAChE,MAAM,uBAAuB,GAAG,wDAAwD,CAAC;AAEzF,MAAM,SAAS,GAAG,gEAAgE,CAAC;AACnF,MAAM,UAAU,GAAG,4EAA4E,CAAC;AAChG,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAChF,MAAM,QAAQ,GAAG,wDAAwD,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;IACrD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,oFAAoF;IACjG,eAAe,EAAE;;;;;;;;;uLASoK;IACrL,IAAI,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,SAAS,CAAC;IACpD,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IACxB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACP,mEAAmE;QACnE,gBAAgB,EAAE,KAAK;QACvB,mEAAmE;QACnE,oCAAoC;QACpC,mBAAmB,EAAE,IAAI;QACzB,qDAAqD;QACrD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;KACvE;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,0EAA0E;YACjF,OAAO,EAAE,mCAAmC,SAAS,EAAE;YACvD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,SAAS;SACtB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,oCAAoC;YAC3C,OAAO,EAAE,mCAAmC,UAAU,EAAE;YACxD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,UAAU;SACvB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,qDAAqD;YAC5D,OAAO,EAAE,mCAAmC,WAAW,EAAE;YACzD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,6CAA6C;YACpD,OAAO,EAAE,mCAAmC,WAAW,EAAE;YACzD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,gDAAgD;YACvD,OAAO,EAAE,mCAAmC,QAAQ,EAAE;YACtD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,QAAQ;SACrB;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileoverview Dependency Version Consistency check
3
+ *
4
+ * Ensures all packages in the monorepo use consistent dependency versions.
5
+ * This prevents version drift which can cause subtle bugs, inconsistent behavior,
6
+ * and bloated lockfiles.
7
+ *
8
+ * Checks:
9
+ * - Dev dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node
10
+ * - Runtime dependencies: zod, pino
11
+ * - Workspace dependencies use workspace:* protocol
12
+ */
13
+ /**
14
+ * Check: quality/dependency-version-consistency
15
+ *
16
+ * Ensures all packages use consistent dependency versions and
17
+ * workspace dependencies use the workspace:* protocol.
18
+ */
19
+ export declare const dependencyVersionConsistency: import("@opensip-cli/fitness").Check;
20
+ //# sourceMappingURL=dependency-version-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-version-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/dependency-version-consistency.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAuNH;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,sCAwFvC,CAAC"}
@@ -0,0 +1,266 @@
1
+ // @fitness-ignore-file unused-config-options -- Config options reserved for future use or environment-specific
2
+ // @fitness-ignore-file fitness-check-standards -- Uses fs for package.json reading, not source file content
3
+ // @fitness-ignore-file file-length-limit -- Complex module with tightly coupled logic; refactoring would risk breaking changes
4
+ // @fitness-ignore-file performance-anti-patterns -- spread used to aggregate version sets across bounded workspace package list
5
+ /**
6
+ * @fileoverview Dependency Version Consistency check
7
+ *
8
+ * Ensures all packages in the monorepo use consistent dependency versions.
9
+ * This prevents version drift which can cause subtle bugs, inconsistent behavior,
10
+ * and bloated lockfiles.
11
+ *
12
+ * Checks:
13
+ * - Dev dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node
14
+ * - Runtime dependencies: zod, pino
15
+ * - Workspace dependencies use workspace:* protocol
16
+ */
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import { defineCheck } from '@opensip-cli/fitness';
20
+ /**
21
+ * Dependencies that should have consistent versions across all packages
22
+ */
23
+ const TRACKED_DEPENDENCIES = [
24
+ // Dev dependencies
25
+ 'vitest',
26
+ 'typescript',
27
+ 'tsx',
28
+ 'tsc-esm-fix',
29
+ '@types/node',
30
+ 'vite-tsconfig-paths',
31
+ '@vitest/coverage-v8',
32
+ // Runtime dependencies
33
+ 'zod',
34
+ 'pino',
35
+ 'glob',
36
+ ];
37
+ /**
38
+ * Workspace package prefixes that should use workspace:* protocol
39
+ */
40
+ const WORKSPACE_PREFIXES = [];
41
+ /* v8 ignore start -- filesystem read helpers; error/file-size branches covered by integration */
42
+ /**
43
+ * Parse a package.json file safely
44
+ */
45
+ function parsePackageJson(filePath) {
46
+ try {
47
+ const stats = fs.statSync(filePath);
48
+ if (stats.size > 10_000_000)
49
+ return null;
50
+ const content = fs.readFileSync(filePath, 'utf8');
51
+ return JSON.parse(content);
52
+ }
53
+ catch {
54
+ // @swallow-ok graceful degradation - return sentinel on failure
55
+ return null;
56
+ }
57
+ }
58
+ /* v8 ignore stop */
59
+ /**
60
+ * Get the root package.json canonical versions
61
+ */
62
+ function getRootVersions(projectRoot) {
63
+ const rootPkg = parsePackageJson(path.join(projectRoot, 'package.json'));
64
+ const versions = new Map();
65
+ if (!rootPkg)
66
+ return versions;
67
+ const allDeps = {
68
+ ...rootPkg.dependencies,
69
+ ...rootPkg.devDependencies,
70
+ };
71
+ for (const [dep, version] of Object.entries(allDeps)) {
72
+ if (TRACKED_DEPENDENCIES.includes(dep)) {
73
+ versions.set(dep, version);
74
+ }
75
+ }
76
+ return versions;
77
+ }
78
+ /**
79
+ * Analyze dependency versions across all packages
80
+ */
81
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- inherent complexity: collects versions from all packages across deps/devDeps, then determines inconsistencies
82
+ function analyzeDependencyVersions(packageJsonFiles, projectRoot) {
83
+ const analysis = new Map();
84
+ const rootVersions = getRootVersions(projectRoot);
85
+ // Initialize analysis for tracked dependencies
86
+ for (const dep of TRACKED_DEPENDENCIES) {
87
+ analysis.set(dep, {
88
+ dependency: dep,
89
+ versions: new Map(),
90
+ canonicalVersion: rootVersions.get(dep) ?? '',
91
+ hasInconsistency: false,
92
+ });
93
+ }
94
+ // Collect versions from all packages
95
+ for (const pkgPath of packageJsonFiles) {
96
+ const pkg = parsePackageJson(pkgPath);
97
+ if (!pkg)
98
+ continue;
99
+ const pkgName = pkg.name ?? path.basename(path.dirname(pkgPath));
100
+ // Check both dependencies and devDependencies
101
+ const depSources = [
102
+ { deps: pkg.dependencies, isDev: false },
103
+ { deps: pkg.devDependencies, isDev: true },
104
+ ];
105
+ for (const { deps, isDev } of depSources) {
106
+ if (!deps)
107
+ continue;
108
+ for (const [dep, version] of Object.entries(deps)) {
109
+ const depAnalysis = analysis.get(dep);
110
+ if (depAnalysis) {
111
+ const existing = depAnalysis.versions.get(version);
112
+ if (existing) {
113
+ existing.packages.push(pkgName);
114
+ }
115
+ else {
116
+ depAnalysis.versions.set(version, {
117
+ version,
118
+ packages: [pkgName],
119
+ isDevDep: isDev,
120
+ });
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ // Determine inconsistencies
127
+ for (const [, depAnalysis] of analysis) {
128
+ if (depAnalysis.versions.size > 1) {
129
+ depAnalysis.hasInconsistency = true;
130
+ }
131
+ else if (depAnalysis.versions.size === 1 && depAnalysis.canonicalVersion) {
132
+ const [usedVersion] = depAnalysis.versions.keys();
133
+ if (usedVersion !== depAnalysis.canonicalVersion) {
134
+ depAnalysis.hasInconsistency = true;
135
+ }
136
+ }
137
+ }
138
+ return analysis;
139
+ }
140
+ /**
141
+ * Check for workspace dependencies not using workspace:* protocol
142
+ */
143
+ function findNonWorkspaceProtocolDeps(packageJsonFiles, projectRoot) {
144
+ const violations = [];
145
+ for (const pkgPath of packageJsonFiles) {
146
+ const pkg = parsePackageJson(pkgPath);
147
+ if (!pkg)
148
+ continue;
149
+ const pkgName = pkg.name ?? path.basename(path.dirname(pkgPath));
150
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
151
+ for (const [dep, version] of Object.entries(allDeps)) {
152
+ // eslint-disable-next-line sonarjs/no-empty-collection -- WORKSPACE_PREFIXES is intentionally empty by default; consumers populate it via project config
153
+ const isWorkspaceDep = WORKSPACE_PREFIXES.some((prefix) => dep.startsWith(prefix));
154
+ if (isWorkspaceDep && !version.startsWith('workspace:')) {
155
+ violations.push({
156
+ pkgName,
157
+ pkgPath: path.relative(projectRoot, pkgPath),
158
+ dep,
159
+ version,
160
+ });
161
+ }
162
+ }
163
+ }
164
+ return violations;
165
+ }
166
+ /**
167
+ * Get the most common or highest semver version as the canonical choice
168
+ */
169
+ function suggestCanonicalVersion(analysis) {
170
+ if (analysis.canonicalVersion) {
171
+ return analysis.canonicalVersion;
172
+ }
173
+ // Find version used by most packages
174
+ let maxCount = 0;
175
+ let suggested = '';
176
+ for (const [version, usage] of analysis.versions) {
177
+ if (usage.packages.length > maxCount) {
178
+ maxCount = usage.packages.length;
179
+ suggested = version;
180
+ }
181
+ }
182
+ return suggested;
183
+ }
184
+ /**
185
+ * Check: quality/dependency-version-consistency
186
+ *
187
+ * Ensures all packages use consistent dependency versions and
188
+ * workspace dependencies use the workspace:* protocol.
189
+ */
190
+ export const dependencyVersionConsistency = defineCheck({
191
+ id: '05d7f95c-59e1-439c-965b-6c1179d3ae13',
192
+ slug: 'dependency-version-consistency',
193
+ scope: { languages: ['json', 'typescript', 'yaml'], concerns: ['config'] },
194
+ confidence: 'medium',
195
+ description: 'Ensures consistent dependency versions across all packages',
196
+ longDescription: `**Purpose:** Ensures all packages in the monorepo use consistent versions of tracked dependencies and workspace protocol for internal packages.
197
+
198
+ **Detects:**
199
+ - Version mismatches for tracked dependencies: vitest, typescript, tsx, tsc-esm-fix, @types/node, vite-tsconfig-paths, @vitest/coverage-v8, zod, pino, glob
200
+ - Workspace dependencies not using the \`workspace:*\` protocol
201
+
202
+ **Why it matters:** Version drift across packages causes subtle bugs, inconsistent behavior, and bloated lockfiles. Non-workspace protocol usage breaks monorepo linking.
203
+
204
+ **Scope:** Codebase-specific convention. Cross-file analysis (\`analyzeAll\`). Scans all \`package.json\` files against root canonical versions.`,
205
+ tags: ['quality', 'dependencies', 'monorepo'],
206
+ // @fitness-ignore-next-line concurrency-safety -- async keyword required by analyzeAll interface contract; synchronous analysis implementation
207
+ // eslint-disable-next-line @typescript-eslint/require-await -- AnalyzeAllCheckConfig requires Promise<CheckViolation[]>; this implementation is synchronous
208
+ async analyzeAll(files) {
209
+ const violations = [];
210
+ // Discover package.json files from the supplied set (NOT process.cwd()), so
211
+ // the check analyzes exactly the files in scope — identical behavior under
212
+ // `fit` (root + every package's package.json are in scope) and under tests.
213
+ // The shortest path is the topmost (root) package.json — the canonical
214
+ // version source; the rest are the workspace packages compared against it.
215
+ const pkgJsonPaths = files.paths
216
+ .filter((p) => path.basename(p) === 'package.json')
217
+ .sort((a, b) => a.length - b.length);
218
+ if (pkgJsonPaths.length === 0) {
219
+ return violations;
220
+ }
221
+ const projectRoot = path.dirname(pkgJsonPaths[0] ?? '');
222
+ const packageJsonFiles = pkgJsonPaths.slice(1);
223
+ // Analyze version consistency
224
+ const analysis = analyzeDependencyVersions(packageJsonFiles, projectRoot);
225
+ // Report version inconsistencies
226
+ for (const [dep, depAnalysis] of analysis) {
227
+ if (depAnalysis.hasInconsistency && depAnalysis.versions.size > 0) {
228
+ const canonical = suggestCanonicalVersion(depAnalysis);
229
+ const affectedPackages = [...depAnalysis.versions.values()]
230
+ .flatMap((u) => u.packages)
231
+ .filter((pkg) => {
232
+ const pkgVersion = [...depAnalysis.versions.entries()].find(([, u]) => u.packages.includes(pkg))?.[0];
233
+ return pkgVersion !== canonical;
234
+ });
235
+ for (const pkgName of affectedPackages) {
236
+ const pkgVersion = [...depAnalysis.versions.entries()].find(([, u]) => u.packages.includes(pkgName))?.[0];
237
+ violations.push({
238
+ line: 1,
239
+ message: `Package '${pkgName}' uses ${dep}@${pkgVersion} instead of canonical version ${canonical}`,
240
+ severity: 'warning',
241
+ // @fitness-ignore-next-line sql-injection -- Fitness check suggestion text, not SQL query
242
+ suggestion: `Update to ${dep}@${canonical} for consistency. Consider using pnpm catalog for centralized version management.`,
243
+ match: dep,
244
+ type: 'version-mismatch',
245
+ filePath: `${pkgName}/package.json`,
246
+ });
247
+ }
248
+ }
249
+ }
250
+ // Check workspace protocol usage
251
+ const nonWorkspaceViolations = findNonWorkspaceProtocolDeps(packageJsonFiles, projectRoot);
252
+ for (const violation of nonWorkspaceViolations) {
253
+ violations.push({
254
+ line: 1,
255
+ message: `Package '${violation.pkgName}' should use 'workspace:*' for ${violation.dep} instead of '${violation.version}'`,
256
+ severity: 'error',
257
+ suggestion: `Change "${violation.dep}": "${violation.version}" to "${violation.dep}": "workspace:*"`,
258
+ match: violation.dep,
259
+ type: 'workspace-protocol',
260
+ filePath: violation.pkgPath,
261
+ });
262
+ }
263
+ return violations;
264
+ },
265
+ });
266
+ //# sourceMappingURL=dependency-version-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-version-consistency.js","sourceRoot":"","sources":["../../../src/checks/quality/dependency-version-consistency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fileoverview Fitness ignore hygiene check
3
+ */
4
+ /**
5
+ * Check: quality/fitness-ignore-hygiene
6
+ *
7
+ * Validates that @fitness-ignore directives have valid check slugs and reason comments.
8
+ */
9
+ export declare const fitnessIgnoreHygiene: import("@opensip-cli/fitness").Check;
10
+ //# sourceMappingURL=fitness-ignore-hygiene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fitness-ignore-hygiene.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/fitness-ignore-hygiene.ts"],"names":[],"mappings":"AACA;;GAEG;AA2EH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,sCAqB/B,CAAC"}