@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,63 @@
1
+ // @fitness-ignore-file correlation-id-coverage -- Fitness check analysis function; no network operations requiring correlation
2
+ /**
3
+ * @fileoverview Detect offset-based pagination in GraphQL queries
4
+ *
5
+ * Offset pagination produces unstable results when data changes between page
6
+ * fetches (the "shifting page" problem). Cursor-based pagination (keyset via
7
+ * where clause) provides stable results.
8
+ */
9
+ import { defineCheck } from '@opensip-cli/fitness';
10
+ const OFFSET_VAR_PATTERN = /\$offset\s*:\s*Int/;
11
+ export const graphqlOffsetPagination = defineCheck({
12
+ id: '0ef4c33d-48e6-4bb1-871b-6ac7c1b579e9',
13
+ slug: 'graphql-offset-pagination',
14
+ disabled: true,
15
+ scope: { languages: ['typescript'], concerns: ['backend', 'server'] },
16
+ contentFilter: 'strip-strings',
17
+ confidence: 'medium',
18
+ description: 'Detect $offset variables in GraphQL queries that indicate offset-based pagination',
19
+ longDescription: `**Purpose:** Flags GraphQL queries that use offset-based pagination, which produces unstable results when data changes between page fetches.
20
+
21
+ **Detects:**
22
+ - \`$offset: Int\` variable declarations (matched by \`/\\$offset\\s*:\\s*Int/\`) inside \`gql\\\`\` template literals
23
+
24
+ **Why it matters:** Offset pagination causes the "shifting page" problem where inserts or deletes between fetches cause items to be skipped or duplicated. Cursor-based (keyset) pagination provides stable results.
25
+
26
+ **Scope:** General best practice. Analyzes each file individually using line-by-line text scanning within \`gql\\\`\` template boundaries.`,
27
+ tags: ['quality', 'graphql', 'pagination', 'api'],
28
+ fileTypes: ['ts'],
29
+ analyze(content, filePath) {
30
+ const violations = [];
31
+ const lines = content.split('\n');
32
+ let inTemplate = false;
33
+ for (let i = 0; i < lines.length; i++) {
34
+ const line = lines[i] ?? '';
35
+ if (line.includes('gql`') || line.includes('gql `')) {
36
+ inTemplate = true;
37
+ }
38
+ if (!inTemplate && line.includes('= `')) {
39
+ const nextLines = lines.slice(i, Math.min(i + 3, lines.length)).join('\n');
40
+ if (/(?:query|mutation|subscription)\s+\w+/.test(nextLines)) {
41
+ inTemplate = true;
42
+ }
43
+ }
44
+ if (inTemplate && OFFSET_VAR_PATTERN.test(line)) {
45
+ violations.push({
46
+ filePath,
47
+ line: i + 1,
48
+ severity: 'error',
49
+ message: 'GraphQL query uses offset-based pagination ($offset: Int).',
50
+ suggestion: 'Use cursor-based pagination (keyset via where clause) instead of offset for stable results during data changes.',
51
+ });
52
+ }
53
+ if (inTemplate &&
54
+ line.trimEnd().endsWith('`') &&
55
+ !line.includes('gql`') &&
56
+ !line.includes('= `')) {
57
+ inTemplate = false;
58
+ }
59
+ }
60
+ return violations;
61
+ },
62
+ });
63
+ //# sourceMappingURL=graphql-offset-pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-offset-pagination.js","sourceRoot":"","sources":["../../../../src/checks/quality/api/graphql-offset-pagination.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAC/H;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAExE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAC;IACjD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;IACrE,aAAa,EAAE,eAAe;IAE9B,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,mFAAmF;IAChG,eAAe,EAAE;;;;;;;2IAOwH;IACzI,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC;IACjD,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3E,IAAI,uCAAuC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5D,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,IAAI,UAAU,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC;oBACd,QAAQ;oBACR,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,4DAA4D;oBACrE,UAAU,EACR,iHAAiH;iBACpH,CAAC,CAAC;YACL,CAAC;YAED,IACE,UAAU;gBACV,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACrB,CAAC;gBACD,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './graphql-offset-pagination.js';
2
+ export * from './zod-openapi-sync.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './graphql-offset-pagination.js';
2
+ export * from './zod-openapi-sync.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/quality/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @fileoverview Zod OpenAPI Sync Check
3
+ *
4
+ * Enforces that Zod schemas use the `.satisfies z.ZodType<GeneratedType>` pattern
5
+ * to stay in sync with OpenAPI-generated types.
6
+ */
7
+ /**
8
+ * Check: quality/zod-openapi-sync
9
+ *
10
+ * Ensures Zod schemas use .satisfies z.ZodType<> pattern.
11
+ */
12
+ export declare const zodOpenapiSync: import("@opensip-cli/fitness").Check;
13
+ //# sourceMappingURL=zod-openapi-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-openapi-sync.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/api/zod-openapi-sync.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAmEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,sCAiCzB,CAAC"}
@@ -0,0 +1,88 @@
1
+ // @fitness-ignore-file correlation-id-coverage -- Fitness check implementation, not an API handler
2
+ /**
3
+ * @fileoverview Zod OpenAPI Sync Check
4
+ *
5
+ * Enforces that Zod schemas use the `.satisfies z.ZodType<GeneratedType>` pattern
6
+ * to stay in sync with OpenAPI-generated types.
7
+ */
8
+ import { defineCheck } from '@opensip-cli/fitness';
9
+ /**
10
+ * Check if a zod schema definition is missing satisfies pattern
11
+ * @returns null if schema is valid, otherwise returns violation info
12
+ */
13
+ function checkZodSchema(content, match, satisfiesPattern) {
14
+ const { schemaName, startIndex } = match;
15
+ const afterMatch = content.slice(startIndex);
16
+ const endMatch = /;\s*$/m.exec(afterMatch);
17
+ if (!endMatch)
18
+ return null;
19
+ const endIndex = endMatch.index ?? 0;
20
+ const schemaDefinition = afterMatch.slice(0, endIndex + 1);
21
+ if (satisfiesPattern.test(schemaDefinition))
22
+ return null;
23
+ const lineNumber = content.slice(0, startIndex).split('\n').length;
24
+ return { lineNumber, schemaName };
25
+ }
26
+ /**
27
+ * Scan file content for Zod schemas missing satisfies pattern
28
+ */
29
+ function scanFileForZodSchemas(content, filePath) {
30
+ const violations = [];
31
+ const zodObjectPattern = /export\s+const\s+(\w+Schema)\s*=\s*z\.object\(/g;
32
+ const satisfiesPattern = /satisfies\s+z\.ZodType</;
33
+ let match;
34
+ while ((match = zodObjectPattern.exec(content)) !== null) {
35
+ const result = checkZodSchema(content, { schemaName: match[1] ?? 'UnknownSchema', startIndex: match.index }, satisfiesPattern);
36
+ if (!result)
37
+ continue;
38
+ const { lineNumber, schemaName } = result;
39
+ violations.push({
40
+ filePath,
41
+ line: lineNumber,
42
+ column: 0,
43
+ message: `Zod schema '${schemaName}' missing .satisfies z.ZodType<> pattern`,
44
+ severity: 'warning',
45
+ suggestion: `Add type constraint after the schema: export const ${schemaName} = z.object({...}) satisfies z.ZodType<GeneratedTypeName>; This ensures the schema stays in sync with OpenAPI-generated types`,
46
+ match: schemaName,
47
+ });
48
+ }
49
+ return violations;
50
+ }
51
+ /**
52
+ * Check: quality/zod-openapi-sync
53
+ *
54
+ * Ensures Zod schemas use .satisfies z.ZodType<> pattern.
55
+ */
56
+ export const zodOpenapiSync = defineCheck({
57
+ id: '260f2344-0cf0-4b19-a929-f93eb79ae4f6',
58
+ slug: 'zod-openapi-sync',
59
+ disabled: true,
60
+ scope: { languages: ['typescript'], concerns: ['backend', 'server'] },
61
+ contentFilter: 'strip-strings',
62
+ confidence: 'medium',
63
+ description: 'Ensures Zod schemas use .satisfies z.ZodType<> pattern',
64
+ longDescription: `**Purpose:** Enforces that exported Zod object schemas include a \`satisfies z.ZodType<GeneratedType>\` constraint to stay in sync with OpenAPI-generated types.
65
+
66
+ **Detects:**
67
+ - Exported Zod schemas (matched by \`/export\\s+const\\s+(\\w+Schema)\\s*=\\s*z\\.object\\(/g\`) whose definitions lack the \`satisfies z.ZodType<\` pattern before the closing semicolon
68
+
69
+ **Why it matters:** Without the \`satisfies\` constraint, Zod schemas can silently diverge from the OpenAPI-generated TypeScript types, causing runtime validation failures that the type system cannot catch at compile time.
70
+
71
+ **Scope:** Codebase-specific convention. Analyzes each file individually using regex-based text scanning. Only processes files under \`/schemas/\` directories.`,
72
+ tags: ['quality', 'architecture', 'consistency'],
73
+ fileTypes: ['ts', 'tsx'],
74
+ analyze(content, filePath) {
75
+ // Focus on schema files
76
+ if (!filePath.includes('/schemas/')) {
77
+ return [];
78
+ }
79
+ try {
80
+ return scanFileForZodSchemas(content, filePath);
81
+ }
82
+ catch {
83
+ // @swallow-ok Skip unreadable files
84
+ return [];
85
+ }
86
+ },
87
+ });
88
+ //# sourceMappingURL=zod-openapi-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-openapi-sync.js","sourceRoot":"","sources":["../../../../src/checks/quality/api/zod-openapi-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Dead code detection using Knip
3
+ *
4
+ * Detects unused files, exports, types, and dependencies using Knip.
5
+ */
6
+ /**
7
+ * Check: quality/dead-code
8
+ *
9
+ * Uses Knip to detect unused code, exports, types, and dependencies.
10
+ */
11
+ export declare const deadCode: import("@opensip-cli/fitness").Check;
12
+ //# sourceMappingURL=dead-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/dead-code.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAoNH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,sCA8EnB,CAAC"}
@@ -0,0 +1,238 @@
1
+ // @fitness-ignore-file batch-operation-limits -- iterates bounded collections (config entries, registry items, or small analysis results)
2
+ /**
3
+ * @fileoverview Dead code detection using Knip
4
+ *
5
+ * Detects unused files, exports, types, and dependencies using Knip.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import { defineCheck } from '@opensip-cli/fitness';
10
+ /**
11
+ * Locations Knip does NOT auto-discover but many repos use for tool configs.
12
+ * When present, we pass --config explicitly so the check matches how
13
+ * the repo's own scripts invoke Knip.
14
+ */
15
+ const NON_DEFAULT_KNIP_CONFIG_PATHS = [
16
+ '.config/knip.json',
17
+ '.config/knip.jsonc',
18
+ '.config/knip.ts',
19
+ '.config/knip.js',
20
+ ];
21
+ /* v8 ignore start -- knip parsing logic is exercised in integration tests, not unit tests */
22
+ function findKnipConfig(projectRoot) {
23
+ for (const candidate of NON_DEFAULT_KNIP_CONFIG_PATHS) {
24
+ const full = path.join(projectRoot, candidate);
25
+ if (fs.existsSync(full))
26
+ return candidate;
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Create violation for unused file
32
+ */
33
+ function createUnusedFileViolation(file, cwd) {
34
+ const filePath = file.startsWith('/') ? file : `${cwd}/${file}`;
35
+ const fileName = file.split('/').pop() ?? file;
36
+ return {
37
+ line: 1,
38
+ message: `Unused file: ${file}`,
39
+ severity: 'warning',
40
+ type: 'unused-file',
41
+ suggestion: `Delete unused file '${fileName}' or add it to Knip's ignore configuration if intentionally kept`,
42
+ match: fileName,
43
+ filePath,
44
+ };
45
+ }
46
+ /**
47
+ * Process exports and types from a Knip issue
48
+ */
49
+ function processExportsAndTypes(issue, filePath) {
50
+ const violations = [];
51
+ for (const exp of issue.exports ?? []) {
52
+ const exportName = exp.symbol ?? exp.name ?? 'unknown';
53
+ violations.push({
54
+ line: exp.line ?? 1,
55
+ message: `Unused export '${exportName}'`,
56
+ severity: 'warning',
57
+ type: 'unused-export',
58
+ suggestion: `Remove unused export '${exportName}' or use it somewhere in the codebase`,
59
+ match: exportName,
60
+ filePath,
61
+ });
62
+ }
63
+ for (const type of issue.types ?? []) {
64
+ const typeName = type.symbol ?? type.name ?? 'unknown';
65
+ violations.push({
66
+ line: type.line ?? 1,
67
+ message: `Unused type '${typeName}'`,
68
+ severity: 'warning',
69
+ type: 'unused-type',
70
+ suggestion: `Remove unused type '${typeName}' or import it where needed`,
71
+ match: typeName,
72
+ filePath,
73
+ });
74
+ }
75
+ return violations;
76
+ }
77
+ /**
78
+ * Process dependencies from a Knip issue
79
+ */
80
+ function processDependencies(issue, filePath, _cwd) {
81
+ const violations = [];
82
+ for (const dep of [...(issue.dependencies ?? []), ...(issue.devDependencies ?? [])]) {
83
+ const depName = dep.name ?? 'unknown';
84
+ violations.push({
85
+ line: dep.line ?? 1,
86
+ message: `Unused dependency '${depName}'`,
87
+ severity: 'warning',
88
+ type: 'unused-dependency',
89
+ suggestion: `Remove '${depName}' from package.json dependencies with 'pnpm remove ${depName}'`,
90
+ match: depName,
91
+ // Use the actual package.json path from Knip's issue, not the project root.
92
+ // In a monorepo, each workspace has its own package.json — pointing to the
93
+ // root masked which sub-package owned the unused dep.
94
+ filePath,
95
+ });
96
+ }
97
+ for (const dep of issue.unlisted ?? []) {
98
+ const depName = dep.name ?? 'unknown';
99
+ violations.push({
100
+ line: dep.line ?? 1,
101
+ message: `Unlisted dependency '${depName}'`,
102
+ severity: 'error',
103
+ suggestion: `Add '${depName}' to package.json: 'pnpm add ${depName}'`,
104
+ type: 'unlisted-dependency',
105
+ match: depName,
106
+ filePath,
107
+ });
108
+ }
109
+ return violations;
110
+ }
111
+ /**
112
+ * Process class and enum members from a Knip issue
113
+ */
114
+ function processMembers(issue, filePath) {
115
+ const violations = [];
116
+ for (const [enumName, members] of Object.entries(issue.enumMembers ?? {})) {
117
+ for (const member of members) {
118
+ const memberName = member.name ?? 'unknown';
119
+ violations.push({
120
+ line: member.line ?? 1,
121
+ message: `Unused enum member '${memberName}' in ${enumName}`,
122
+ severity: 'warning',
123
+ type: 'unused-enum-member',
124
+ suggestion: `Remove unused enum member '${memberName}' from ${enumName} or use it in the codebase`,
125
+ match: memberName,
126
+ filePath,
127
+ });
128
+ }
129
+ }
130
+ for (const [className, members] of Object.entries(issue.classMembers ?? {})) {
131
+ for (const member of members) {
132
+ const memberName = member.name ?? 'unknown';
133
+ violations.push({
134
+ line: member.line ?? 1,
135
+ message: `Unused class member '${memberName}' in ${className}`,
136
+ severity: 'warning',
137
+ type: 'unused-class-member',
138
+ suggestion: `Remove unused method/property '${memberName}' from ${className} or make it public if it should be used externally`,
139
+ match: memberName,
140
+ filePath,
141
+ });
142
+ }
143
+ }
144
+ return violations;
145
+ }
146
+ /**
147
+ * Parse Knip JSON output into violations
148
+ */
149
+ function parseKnipOutput(output, cwd) {
150
+ const violations = [];
151
+ const data = JSON.parse(output);
152
+ // Process unused files
153
+ for (const file of data.files ?? []) {
154
+ violations.push(createUnusedFileViolation(file, cwd));
155
+ }
156
+ // Process issues
157
+ for (const issue of data.issues ?? []) {
158
+ const filePath = issue.file.startsWith('/') ? issue.file : `${cwd}/${issue.file}`;
159
+ violations.push(...processExportsAndTypes(issue, filePath), ...processDependencies(issue, filePath, cwd), ...processMembers(issue, filePath));
160
+ }
161
+ return violations;
162
+ }
163
+ /* v8 ignore stop */
164
+ /**
165
+ * Check: quality/dead-code
166
+ *
167
+ * Uses Knip to detect unused code, exports, types, and dependencies.
168
+ */
169
+ export const deadCode = defineCheck({
170
+ id: '0ed970d8-0cfc-4263-b82d-c6e08e768a59',
171
+ slug: 'dead-code',
172
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
173
+ confidence: 'medium',
174
+ description: 'Detect unused files, exports, types, and dependencies using Knip',
175
+ longDescription: `**Purpose:** Detects dead code across the entire codebase by running the Knip static analysis tool and parsing its JSON output into fitness violations.
176
+
177
+ **Detects:** Runs external tool \`npx knip --reporter json\`.
178
+ - Unused files (no imports from anywhere)
179
+ - Unused exports and unused type exports
180
+ - Unused dependencies and devDependencies in package.json
181
+ - Unlisted dependencies (used but not declared in package.json)
182
+ - Unused enum members and class members
183
+
184
+ **Why it matters:** Dead code increases maintenance burden, slows builds, and confuses developers. Unlisted dependencies cause runtime failures in production.
185
+
186
+ **Scope:** General best practice`,
187
+ tags: ['quality', 'dead-code', 'knip', 'maintainability'],
188
+ fileTypes: ['ts'],
189
+ timeout: 120_000, // 2 minutes - Knip workspace analysis can be slow
190
+ command: {
191
+ bin: 'npx',
192
+ // Callable so config discovery runs at check execution time
193
+ // (when process.cwd() is the project root), not at import time.
194
+ args: () => {
195
+ const base = ['knip', '--reporter', 'json'];
196
+ const configPath = findKnipConfig(process.cwd());
197
+ return configPath ? [...base, '--config', configPath] : base;
198
+ },
199
+ expectedExitCodes: [0, 1], // 0 = no issues, 1 = issues found
200
+ parseOutput(stdout, stderr, _exitCode, _files, cwd) {
201
+ if (!stdout) {
202
+ // No output - likely a configuration error
203
+ return [
204
+ {
205
+ line: 1,
206
+ /* v8 ignore next -- defensive: stderr branch only fires when knip is installed and produces stderr */
207
+ message: `Knip failed: ${stderr || 'Unknown error'}`,
208
+ severity: 'error',
209
+ type: 'knip-error',
210
+ suggestion: "Ensure Knip is installed and .config/knip.json exists. Run 'pnpm knip' manually for details",
211
+ match: 'knip',
212
+ filePath: cwd,
213
+ },
214
+ ];
215
+ }
216
+ /* v8 ignore start -- knip-success path requires knip CLI + valid JSON; covered in integration */
217
+ try {
218
+ return parseKnipOutput(stdout, cwd);
219
+ }
220
+ catch {
221
+ // @swallow-ok If parsing fails, report the error
222
+ return [
223
+ {
224
+ line: 1,
225
+ message: `Failed to parse Knip output`,
226
+ severity: 'error',
227
+ type: 'knip-error',
228
+ suggestion: "Run 'pnpm knip' manually to see detailed output",
229
+ match: 'knip',
230
+ filePath: cwd,
231
+ },
232
+ ];
233
+ }
234
+ /* v8 ignore stop */
235
+ },
236
+ },
237
+ });
238
+ //# sourceMappingURL=dead-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-code.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/dead-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './dead-code.js';
2
+ export * from './no-ai-attribution.js';
3
+ export * from './no-console-log.js';
4
+ export * from './no-process-artifacts.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './dead-code.js';
2
+ export * from './no-ai-attribution.js';
3
+ export * from './no-console-log.js';
4
+ export * from './no-process-artifacts.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileoverview AI-attribution comment detection.
3
+ *
4
+ * Detects "generated by AI" / "Claude wrote this" style attribution
5
+ * metadata in comments. Source comments must stand on their own
6
+ * merit; AI-attribution leaks process metadata into shipped code.
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 here because every pattern
13
+ * already uses bounded quantifiers (`[^/]{0,200}`, `[^*]{0,200}`,
14
+ * `\s{1,5}`), so an unbounded line cannot produce catastrophic
15
+ * backtracking. The `oneViolationPerLine: true` option preserves the
16
+ * original "one finding per line, first matching pattern wins"
17
+ * semantics.
18
+ */
19
+ /**
20
+ * Check: quality/no-ai-attribution
21
+ *
22
+ * Detects AI-attribution metadata in comments.
23
+ */
24
+ export declare const noAiAttribution: import("@opensip-cli/fitness").Check;
25
+ //# sourceMappingURL=no-ai-attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-ai-attribution.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-ai-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH;;;;GAIG;AACH,eAAO,MAAM,eAAe,sCAmD1B,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @fileoverview AI-attribution comment detection.
3
+ *
4
+ * Detects "generated by AI" / "Claude wrote this" style attribution
5
+ * metadata in comments. Source comments must stand on their own
6
+ * merit; AI-attribution leaks process metadata into shipped code.
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 here because every pattern
13
+ * already uses bounded quantifiers (`[^/]{0,200}`, `[^*]{0,200}`,
14
+ * `\s{1,5}`), so an unbounded line cannot produce catastrophic
15
+ * backtracking. The `oneViolationPerLine: true` option preserves the
16
+ * original "one finding per line, first matching pattern wins"
17
+ * semantics.
18
+ */
19
+ import { defineRegexListCheck } from '@opensip-cli/fitness';
20
+ const FIX_MESSAGE = 'Remove AI-generation metadata; comments must stand on their own merit';
21
+ const VIOLATION_MESSAGE = `AI-attribution comment found. ${FIX_MESSAGE}`;
22
+ /**
23
+ * Check: quality/no-ai-attribution
24
+ *
25
+ * Detects AI-attribution metadata in comments.
26
+ */
27
+ export const noAiAttribution = defineRegexListCheck({
28
+ id: '4281da0e-2af1-447b-8a25-1da675f41f56',
29
+ slug: 'no-ai-attribution',
30
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
31
+ contentFilter: 'raw',
32
+ confidence: 'medium',
33
+ description: 'Detects AI-attribution metadata in comments',
34
+ longDescription: `**Purpose:** Source comments must stand on their own merit. AI-attribution metadata ("Generated by Claude", "ChatGPT wrote this") leaks process information into code that has no value to readers and quickly goes stale.
35
+
36
+ **Detects:** Single-line and block comments containing "generated by AI/Claude/GPT/Copilot/Anthropic/OpenAI/etc." attribution patterns.
37
+
38
+ **Why it matters:** Comments should explain the code, not its provenance. Tools or models used during authorship belong in commit messages or external metadata, not in source files.`,
39
+ tags: ['maintainability', 'code-quality', 'quality'],
40
+ fileTypes: ['ts', 'tsx'],
41
+ disabled: true,
42
+ options: {
43
+ // Comments are exactly what this check targets — do NOT skip them.
44
+ skipCommentLines: false,
45
+ // Original site emitted at most one violation per line via `break`
46
+ // after the first matching pattern.
47
+ oneViolationPerLine: true,
48
+ },
49
+ patterns: [
50
+ {
51
+ id: '97fb9199-8a84-448e-9f6b-06eb468f63e9',
52
+ slug: 'ai-generated-by-single',
53
+ regex: /\/\/[^/]{0,200}\b(?:generated|created|written|assisted)\s{1,5}by\s{1,5}(?:ai|chatgpt|claude|copilot|gpt|llm|openai|anthropic|gemini|bard)\b/i,
54
+ message: VIOLATION_MESSAGE,
55
+ severity: 'error',
56
+ suggestion: FIX_MESSAGE,
57
+ },
58
+ {
59
+ id: '8ebd2f1a-d146-4906-ac36-921e28d5847f',
60
+ slug: 'ai-tool-action-single',
61
+ regex: /\/\/[^/]{0,200}\b(?:ai|chatgpt|claude|copilot|gpt|llm)\s{1,5}(?:generated|created|wrote|suggested|assisted)\b/i,
62
+ message: VIOLATION_MESSAGE,
63
+ severity: 'error',
64
+ suggestion: FIX_MESSAGE,
65
+ },
66
+ {
67
+ id: 'f1d68629-f299-4ee7-94ed-89cc246c57ba',
68
+ slug: 'ai-generated-by-block',
69
+ regex: /\/\*{1,5}[^*]{0,200}\b(?:generated|created|written|assisted)\s{1,5}by\s{1,5}(?:ai|chatgpt|claude|copilot|gpt|llm|openai|anthropic|gemini|bard)\b/i,
70
+ message: VIOLATION_MESSAGE,
71
+ severity: 'error',
72
+ suggestion: FIX_MESSAGE,
73
+ },
74
+ ],
75
+ });
76
+ //# sourceMappingURL=no-ai-attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-ai-attribution.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-ai-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,GAAG,uEAAuE,CAAC;AAC5F,MAAM,iBAAiB,GAAG,iCAAiC,WAAW,EAAE,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;IAClD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,mBAAmB;IACzB,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,6CAA6C;IAC1D,eAAe,EAAE;;;;sLAImK;IACpL,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;KAC1B;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EACH,8IAA8I;YAChJ,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,uBAAuB;YAC7B,KAAK,EACH,gHAAgH;YAClH,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,uBAAuB;YAC7B,KAAK,EACH,mJAAmJ;YACrJ,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,WAAW;SACxB;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileoverview Disallow console.log in production code
3
+ *
4
+ * Migrated to defineRegexListCheck (Layer 4 Phase C6). The CLI-output
5
+ * allowlist (`/commands/`, `/display/`, `/output/`, `/bin/`, `/scripts/`,
6
+ * `/cli/...ts`) is preserved verbatim via the helper's `skipFile` option.
7
+ * The per-pattern UUID + sub-slug shape is now the helper's default.
8
+ */
9
+ /**
10
+ * Check: quality/no-console-log
11
+ *
12
+ * Ensures production code uses structured logging via a project logger
13
+ * instead of console.log, console.debug, console.info, console.warn, or console.error.
14
+ * Skips CLI command files, display/output modules, and scripts where console is appropriate.
15
+ */
16
+ export declare const noConsoleLog: import("@opensip-cli/fitness").Check;
17
+ //# sourceMappingURL=no-console-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-console-log.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/no-console-log.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAuBH;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,sCAsEvB,CAAC"}